Dovrei utilizzare un encoder siccome il mio sketch non andava ho scaricato uno da internet il problema è che neanche questo funziona l'encoder mi va solo in una direzione......... tutti i piedini sono collegati......
questo è il codice
int val;
int encoder0PinA = 9;
int encoder0PinB = 10;
int encoder0Pos = 0;
int encoder0PinALast = LOW;
int n = LOW;
void setup() {
pinMode (encoder0PinA,INPUT);
pinMode (encoder0PinB,INPUT);
Serial.begin (9600);
}
void loop() {
n = digitalRead(encoder0PinA);
if ((encoder0PinALast == LOW) && (n == HIGH)) {
if (digitalRead(encoder0PinB) == LOW) {
encoder0Pos--;
} else {
encoder0Pos++;
}
Serial.print (encoder0Pos);
Serial.println ("");
}
encoder0PinALast = n;
}
Se e' un'encoder incrementale, ha due uscite sfasate fra loro di 90 gradi ... per rilevare in quale direzione gira, devi controllare quale dei due fronti arriva per primo ... se il fronte A arriva prima del fronte B, allora sta girando in un senso, altrimenti sta girando nell'altro ...
Tu leggi solo un'uscita, in quel modo, e non confronti i tempi ... almeno e' quello che mi sembra ...
EDIT: no, aspetta, errore mio, li controlli nell'if ...
PaoloP: l'ho guardata, ma mi lascia perplesso quell'esempio ... e' un'impressione mia, o fa confronti sugli stati e non sul cambio di stato ? ... inoltre (ma potrei sbagliarmi), mi sembra che legga solo un'impulso ogni 4 dell'encoder (cioe', solo uno degli stati dei 4 possibili delle uscite di un'encoder a quadratura) ... o sbaglio ?
Quello che intendo dire e' che mi sembra che in quell'esempio si faccia il controllo di una sola delle 4 possibili cominazioni, cioe' controllare lo stato di B solo quando A e' HIGH ...
Gia a me che non sono un programmatore, viene in mente un possibile modo per sfruttare tutti e 4 i possibili stati ... voi che siete geni del software, dovreste averla gia risolta con un paio di righe di codice, massimo 3 (scherzo XD)