Ciao a tutti,
vi scrivo per un problema strano con il sensore in oggetto, per cui vi spiego.
Avendo preso il solito kit auto 2WD per "sperimentare" un poco dopo aver "giocato" facendo un piccolo rover con il Meccano e due stepper (troppo lenti), ho acquistato anche due sensori FC-03 come questo:

I 4 pin sono indicati rispettivamente VCC, GND, DO, AO, per cui dato che ho trovato in rete questo schema del sensore:

l'uso mi sembrava abbastanza chiaro.
Collego quindi DO al pin 2 (interrupt 0), e preparo questo sketch di test:
#define LED1 13 // LED collegato al pin digitale 13
#define M1_SENS 2
#define M1_INT 0
volatile int count1 = 0;
void setup() {
Serial.begin(9600);
Serial.println("Start");
pinMode(LED1, OUTPUT); // imposta il pin digitale come output
pinMode(M1_SENS, INPUT);
attachInterrupt(M1_INT, motorStep1, RISING);
}
void loop() {
if ( count1 >= 20 ) {
digitalWrite(LED1, !digitalRead(LED1));
count1 = 0;
}
}
void motorStep1()
{
count1++;
Serial.println(count1);
}
Ebbene, se simulo a mano ostruendo il passaggio dei led dell'encoder (ma la stessa cosa la faceva anche montato sul disco) usando ad esempio un pezzo di plastica, l'output mostrato mi conta DUE interrupt quando inserisco l'ostacolo, e DUE quando lo rimuovo (quindi 1 e 2 quando lo inserisco, poi 3 e 4 quando lo tolgo, poi 5 e 6 ecc.)!
Innanzitutto dato che ho impostato l'interrupt su RISING dovrebbe darmelo solamente quando lo inserisco (o tolgo) e non in entrambe le direzioni. Cambiare in FALLING mi porta allo stesso identico risultato. E non è colpa del Serial.print perché ho provato anche a spostare la visualizzazione nel loop() e non cambia (anzi ogni tanto saltava anche qualche conteggio, es. 1 2 3 5 6 7 9...) per via del fatto che gli interrupt erano più rapidi del loop().
Ma la cosa peggiore è che ho misteriosamente DUE trigger per evento!
La prima prova che ho fatto è stata di metterci un MIO circuitino, fatto con una millefori e un LED e fototransistor IR, ma senza operazionale quindi l'uscita sarebbe analogica ma in linea di massima alimentato a 5V ho livelli logici. E con questo invece funziona perfettamente (ma non posso usarlo perché il posizionamento di LED e fototransistor vicino al disco è troppo critico, inoltre vorrei sfruttare le apposite fessure presenti sul kit auto)!
Allora mi è venuto in mente di provare a usare l'uscita AO (analogica). Stesso sketch, stesso modulo, a questo punto invece FUNZIONA!
Mi direte: se funziona che problema hai? Semplicemente vorrei capire perché quello che sarebbe marcato come output digitale, e che teoricamente sarebbe quello da utilizzare visto anche lo schema, abbastanza semplice, abbia quello strano comportamento del 2+2, e quindi se sia questo sensore cinese ad essere bacato per qualche ragione.
Qualcuno di voi ha usato questo sensore? E ha avuto gli stessi problemi?