Ci-dessous, les différences entre deux révisions de la page.
Prochaine révision | Révision précédente | ||
dev:arduino:shields:encodeur-rotatif [2017/12/16 14:10] – créée yoann | dev:arduino:shields:encodeur-rotatif [2021/02/01 21:51] (Version actuelle) – modification externe 127.0.0.1 | ||
---|---|---|---|
Ligne 15: | Ligne 15: | ||
===== Exemples ===== | ===== Exemples ===== | ||
- | non fonctionnel, | + | Dans ce premier exemple on écrit l' |
<code c> | <code c> | ||
+ | / | ||
+ | * ERST01: Encodeur Rotatif Snootlab Test 01 * | ||
+ | * Affiche sur le port série: | ||
+ | * Le sens de rotation R (Right) ou L (Left) | ||
+ | * valeur du compteur | ||
+ | * le nombre d' | ||
+ | *****************************************************/ | ||
+ | |||
#include < | #include < | ||
+ | |||
//stocke le sens de rotation | //stocke le sens de rotation | ||
volatile char dir = ' | volatile char dir = ' | ||
- | volatile | + | volatile |
+ | volatile int current_counter= 0; | ||
+ | volatile int isr_count = 0; | ||
+ | |||
// | // | ||
SwitchEncoder s = SwitchEncoder(8, | SwitchEncoder s = SwitchEncoder(8, | ||
+ | |||
void setup() | void setup() | ||
{ | { | ||
// Autorisation des interruptions sur le port B car les broches D12 D13 sont liées au port B | // Autorisation des interruptions sur le port B car les broches D12 D13 sont liées au port B | ||
PCICR |= (1 << PCIE0); | PCICR |= (1 << PCIE0); | ||
- | | + | |
// Activation des interruptions sur les broches D12 et D13 | // Activation des interruptions sur les broches D12 et D13 | ||
PCMSK0 |= (1 << PCINT0) | (1 << PCINT4); | PCMSK0 |= (1 << PCINT0) | (1 << PCINT4); | ||
- | | + | |
// Activation générale des interruptions | // Activation générale des interruptions | ||
sei(); | sei(); | ||
- | | + | |
// | // | ||
- | Serial.begin(9600); | + | Serial.begin(115200); |
Serial.println(" | Serial.println(" | ||
+ | | ||
+ | s.resetCount(); | ||
} | } | ||
+ | |||
void loop() | void loop() | ||
{ | { | ||
- | if(input_changed) | + | if(current_counter != last_counter) |
{ | { | ||
Serial.println(dir); | Serial.println(dir); | ||
Serial.println(s.count()); | Serial.println(s.count()); | ||
- | | + | |
+ | last_counter | ||
} | } | ||
- | + | ||
- | + | ||
} | } | ||
+ | |||
/* Définition du gestionnaire d' | /* Définition du gestionnaire d' | ||
* PCINT0_vect pour le port B | * PCINT0_vect pour le port B | ||
Ligne 64: | Ligne 77: | ||
ISR(PCINT0_vect) | ISR(PCINT0_vect) | ||
{ | { | ||
+ | | ||
dir = s.process(); | dir = s.process(); | ||
- | | + | |
+ | isr_count++; | ||
} | } | ||
- | |||
</ | </ | ||
+ | |||
+ | Le téléversement de ce code et quelques manipulations de l' | ||
+ | |||
+ | < | ||
+ | boot | ||
+ | R | ||
+ | 1 | ||
+ | 36 | ||
+ | L | ||
+ | 0 | ||
+ | 11 | ||
+ | R | ||
+ | 1 | ||
+ | 18 | ||
+ | L | ||
+ | 0 | ||
+ | 9 | ||
+ | |||
+ | 1 | ||
+ | 33 | ||
+ | L | ||
+ | 0 | ||
+ | 16 | ||
+ | |||
+ | 1 | ||
+ | 39 | ||
+ | |||
+ | 2 | ||
+ | 74 | ||
+ | |||
+ | </ | ||
+ | |||
+ | <note warning> | ||
+ | Les interruptions sont particulièrement sensibles au phénomène de rebond, on constate ici que lors de la première manipulation, | ||
+ | </ | ||
< | < | ||
- | Attention | + | Attention |
</ | </ | ||
+ | |||
+ | Autre curiosité, la valeur du sens de rotation n'est pas systématiquement écrite sur le port série. L' | ||
+ | |||
+ | |||
+ | < | ||
+ | $ cat minicom.cap | od -Ad -tc -w4 | ||
+ | 0000000 | ||
+ | 0000004 | ||
+ | 0000008 | ||
+ | 0000012 | ||
+ | 0000016 | ||
+ | 0000020 | ||
+ | 0000024 | ||
+ | 0000028 | ||
+ | 0000032 | ||
+ | 0000036 | ||
+ | 0000040 | ||
+ | 0000044 | ||
+ | 0000048 | ||
+ | 0000052 | ||
+ | 0000056 | ||
+ | 0000057 | ||
+ | </ | ||
===== Références ===== | ===== Références ===== |