difficoltà nella lettura di un encoder
Io ho un encoder con due canali A e B e devo calcolare il tempo tra un passo e il successivo (se va in senso orario cioè durante il fronte di salita del canae A il valore del canae B deve essere lo stesso del canale A cioè HIGH) e in questo caso ci calcolo il deltatempo, nel caso in cui il verso sia antiorario entra in un sottoprogramma che blocchi l'interrupt e aspetti un tempo k qualsiasi.
Attualmente ho scritto il programma che scrive il tempo tra un passo e l'altro nella seriale e scrive errore nel caso vada in senso antiorario MA questo non accade e sembra che scrive valori errati.
Chiedo aiuto
Attualmente ho scritto il programma che scrive il tempo tra un passo e l'altro nella seriale e scrive errore nel caso vada in senso antiorario MA questo non accade e sembra che scrive valori errati.
- Codice: Seleziona tutto
volatile int valoreB = 0;
volatile int i =0, j=0;
volatile int k=0;
unsigned long inizio_A = 0;
unsigned long fine_A = 0;
unsigned long diff_A = 0;
void setup() {
pinMode(2, INPUT);
pinMode(4,INPUT);
Serial.begin(9600);
attachInterrupt(digitalPinToInterrupt(2), fronte, RISING);
}
void loop() {
if(k==0) {
if(j < i){
fine_A = inizio_A;
inizio_A = micros();
diff_A = inizio_A - fine_A;
j = i;
Serial.print(diff_A/100000);
Serial.print (" ");
Serial.println(i);
}
if(k==1){
Serial.print ("erroreeeeeeeeeeeeeeeeeeee ");
Serial.println (i);
inizio_A = 0;
fine_A = 0;
}
}
}
void fronte(){
valoreB= digitalRead(4);
if(valoreB==HIGH){
i ++;
k = 0;
}
if(valoreB==LOW){
k=1;
}
}
Chiedo aiuto