ciao a tutti,
ho un problema sulla lettura di impulsi tramite interrupts.
Durante i vari test effettuati ho riscontrato un'anomalia che non riesco a risolvere. In pratica ho messo 2 Arduino in parallelo, uno genera impulsi e il secondo li conteggia monitorando lo stato RISING.
Questi i 2 sketchs (allego anche foto dei collegamenti effettuati tra i 2 Arduino):
GeneraImpulsi:
// Durata Impulsi: tON e tOFF
int tON = 30;
int tOFF = 100;
// Pin 13: emette impulso 5V
int mypin = 13;
// the setup routine runs once when you press reset
void setup() {
// initialize the digital pin as an output of 5V
pinMode(mypin, OUTPUT);
// start the serial library
Serial.begin(9600);
}
// the loop routine runs over and over again forever:
void loop() {
// EMETTO IMPULSO di durata tON
Serial.print("Emetto impulso da ");
Serial.print(tON);
Serial.println(" ms");
digitalWrite(mypin, HIGH);
delay(tON);
// tOFF
Serial.print("Tempo di attesa per il prossimo impulso: ");
Serial.print(tOFF);
Serial.println(" ms");
digitalWrite(mypin, LOW);
delay(tOFF);
}
ContatoreImpulsi:
volatile int counter_0;
volatile int counter_1;
unsigned long time;
void setup() {
Serial.begin(9600);
attachInterrupt(0, intChannel0, RISING);
attachInterrupt(1, intChannel1, RISING);
time = millis();
}
void loop() {
if ( millis() > ( time + 1000 ) ) {
Serial.print("Counter 0: ");
Serial.println(counter_0);
Serial.print("Counter 1: ");
Serial.println(counter_1);
Serial.println();
time = millis();
}
}
/* INTERRUPTS FUNCTIONS */
void intChannel0() {
counter_0++;
}
void intChannel1() {
counter_1++;
}
Nello sketch del ContatoreImpulsi stampo a video il valore di entrambi i pin (2 e 3) ma solo il 2 dovrebbe incrementarsi perchè è l'unico che riceve impulsi. Al 3 non è attaccato nulla.
Il risultato che ottengo però è che entrambi i contatori vengono incrementati.
Ecco il risultato infatti:
Counter 0: 7
Counter 1: 7
Counter 0: 15
Counter 1: 15
Counter 0: 22
Counter 1: 22
Dove sbaglio?
Qualcuno potrebbe gentilmente illuminarmi?
