questo è quello che ho scritto
#define encoderCLK 2
int encoderCountOr = 0;
int encoderCountAnt = 0;
int encoderCount = 0;
volatile boolean i = 0;
volatile boolean val_B;
unsigned long inizio_A = 0;
unsigned long fine_A = 0;
unsigned long diff_A = 0;
unsigned long temp_tot = 0;
void setup() {
Serial.begin(38400);
attachInterrupt(digitalPinToInterrupt (2), frontecanaleA, RISING);
pinMode(4,INPUT);
// attachInterrupt(digitalPinToInterrupt (4), frontecanaleB, RISING);
}
void loop() {
if(i == 1 && val_B== HIGH){
// encoderCountOr++;
encoderCount++;
inizio_A = micros();
diff_A = inizio_A - fine_A;
fine_A = inizio_A;
i = 0;
}
if(i == 1 && val_B== LOW){
// encoderCountAnt++;
encoderCount--;
i = 0;
}
temp_tot= diff_A + temp_tot;
// encoderCount = encoderCountOr - encoderCountAnt;
Serial.print(encoderCount);
Serial.print(" ");
Serial.println(diff_A);
}
void frontecanaleA()
{
i=1;
val_B = digitalRead(4);
}
in questo primo uso un interrupt solo, ma non riconosce i passi nel modo corretto#define encoderCLK 2
int encoderCountOr = 0;
int encoderCountAnt = 0;
int encoderCount = 0;
volatile boolean i = false;
volatile boolean j = false;
unsigned long inizio_A = 0;
unsigned long fine_A = 0;
unsigned long diff_A = 0;
unsigned long temp_tot = 0;
void setup() {
Serial.begin(38400);
attachInterrupt(digitalPinToInterrupt (2), frontecanaleA, RISING);
attachInterrupt(digitalPinToInterrupt (4), frontecanaleB, RISING);
}
void loop() {
if(i == true && j == true){
encoderCountOr++;
fine_A = inizio_A;
inizio_A = micros();
diff_A = inizio_A - fine_A;
temp_tot= diff_A + temp_tot;
i = false;
j = false;
}
if(i == true && j == false){
encoderCountAnt++;
// fine_A = inizio_A;
// diff_A = 0;
i = false;
j = false;
}
encoderCount = encoderCountOr - encoderCountAnt;
Serial.print(encoderCount);
Serial.print(" ");
Serial.println(diff_A);
}
void frontecanaleA()
{
i=true;
}
void frontecanaleB()
{
j=true;
}
questo l'ho fatto con due interrupt e non funziona nemmeno questo
Per quanto ne so solo i pin 2 e 3 possono essere usati come sorgente di interrupt individuale.