Interrupt and if else problems

Buongiorno,
non capisco bene come funzionano gli interrupt.
Provo ad utilizzarlo con un classico pulsante sul pin 2 ma nella funzione che viene richiamata dall'interrupt, chiamata "blink "non riesco a far funzionare i blocchi if-else. (N.B premetto che non dipende dal bouncing del pulsante perchè senza il blocco condizionale la pressione viene letta)
Ps. Utilizzo un arduino uno rev3
Ecco il semplicissimo codice che non mi legge la pressione.

const byte ledPin = 13;
const byte interruptPin = 2;
volatile byte state = LOW; 


void setup() {
  Serial.begin(9600);
  pinMode(ledPin, OUTPUT);
  pinMode(interruptPin, INPUT_PULLUP);
  attachInterrupt(digitalPinToInterrupt(interruptPin), blink, FALLING); 
}

void loop() { 
  digitalWrite(ledPin, state); 
  Serial.print(state);
  delay(20);
}

void blink() {
  if (true) {
    state = !state;
  }
}

Ho utilizzato nella condizione direttamente lo stato "true" in modo che funzionasse sicuramente ma invece la pressione non viene rilevata. (avevo già fatto delle prove con variabili volatili nella condizione)
Se invece elimino il blocco if-else il codice legge la pressione.

void blink() {
    state = !state;
}

Cosa è che non capisco??? possibile che nella funzione chiamata dall'interrupt non si possano usare le condizioni con i blocchi if-else???
Mi aiutate per favore????

Vi ringrazio tutti in anticipo

Buongiorno,

prima di tutto ti segnalo che, nella sezione in lingua Inglese, si può scrivere SOLO in Inglese ... quindi, per favore, la prossima volta presta più attenzione in quale sezione metti i tuoi post; questa volta esso è stato spostato, da un moderatore della sezione di lingua Inglese, nella sezione di lingua Italiana ... la prossima volta potrebbe venire direttamente eliminato, dopo di che ...

... essendo il tuo primo post, nel rispetto del regolamento della sezione Italiana del forum (… punto 13, primo capoverso), ti chiedo cortesemente di presentarti IN QUESTO THREAD (spiegando bene quali conoscenze hai di elettronica e di programmazione ... possibilmente evitando di scrivere solo una riga di saluto) e di leggere con molta attenzione tutto il succitato REGOLAMENTO ... Grazie.

Guglielmo

P.S.: Ti ricordo che, purtroppo, fino a quando non sarà fatta la presentazione nell’apposito thread, nel rispetto del suddetto regolamento nessuno ti risponderà (eventuali risposte verrebbero temporaneamente nascoste), quindi ti consiglio di farla al più presto. :wink:

1 Like

Mi spiace contraddirti, ma il problema è altrove (hardware ?) ...
... ho copiato il tuo codice sulla mia UNO e funziona perfettamente, quindi ... :roll_eyes:

Guglielmo

Riguardo agli interrupt e pulsanti posso consigliarti la lettura di questo.

Ciao.

Buona sera grazie mille per le risposte. Entrambe sono state molto utili. Eh si che vergogna, era uno sciocco problema hardware. Avevo montato male la resistenza di PULLDOWN sul pulsante.
Buona notte e grazie mille per la disponibilità

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.