interrupt non funziona

ho un codice da sottoporvi:

const int ledPin = 13;      // the number of the LED pin

boolean buttonState = LOW;         // variable for reading the pushbutton status

void setup() {
  // initialize the LED pin as an output:
  pinMode(ledPin, OUTPUT);      
 //pinMode(buttonPin, INPUT);     
attachInterrupt(0,accendi,CHANGE);// 2=falling 3



}

void accendi(){
buttonState= HIGH;}


void loop(){
 
 if (buttonState == HIGH) {    
    digitalWrite(ledPin, HIGH);  
//delayMicroseconds(10000);
buttonState=LOW;}
}

non funziona rimane sempre acceso anzichè stare praticamente sempre spento come dovrebbe:
appena parte l'nterrupt rimane acceso anzichè spegnersi immediatamente o dopo un certo periodo impostato dal delay. anche se non metto il delay rimane comunque acceso.
funziona con l'esempio degli interrupt ma non così.immagino sia un errore banale ma non lo vedo...

prova a cambiare
buttonState=!buttonState
nell'ISR
EDIT:o modifichi il trigger dell'interrupt da ,CHANGE in ,RISING

non cambia... ho provato pure a riscriverlo partendo da zero...

praticamente devo ad un rising accendere il led per qualche millisecondo.
any ideas?

neanche con RISING?

ne rising ne altro...
ma sembra impossibile!
è un codice così semplice... qualcuno può provarlo?

ma a quale pin è attaccato il tasto ?

2

ma l'interrupt funziona, poi però il led non torna LOW come se si piantasse

hai tolto i commenti dalla riga //delayMicroseconds(10000); ?
fai così:

const int ledPin = 13;      // the number of the LED pin
conts int buttonPin=2; // the number of the button pin
volatile int buttonState = LOW;         // variable for reading the pushbutton status

void setup() {
  // initialize the LED pin as an output:
  pinMode(ledPin, OUTPUT);      
 //pinMode(buttonPin, INPUT);     
attachInterrupt(0,accendi,CHANGE);// 2=falling 3



}

void accendi(){
buttonState=! buttonState;}


void loop(){
 
 if (buttonState == HIGH) {    
    digitalWrite(ledPin, HIGH);  
delayMicroseconds(10000);
buttonState=LOW;}
else {
buttonState=LOW;}

}

P.S.
Scusa l'EDIT :stuck_out_tongue:

si con e senza sempre =

int pin = 13;
volatile int state = LOW;

void setup()
{
  pinMode(pin, OUTPUT);
  attachInterrupt(0, blink, RISING);
}

void loop()
{
  
 if (state ==HIGH){digitalWrite(pin, state); state=LOW; }
   
}

void blink()
{
  state = !state;
}

altra prova stesso risultato

ma il tasto come lo hai collegato?

filo volante con resistenza di puldown, e anche preovato con condensatore anti disturbi...
sembra qualcosa nel codice... o nella compilazione.

sbaglio o nel tuo penultimo snippet non hai dichiarato buttonpin?
usa il codice che ho postato sopra e dimmi che fà..

tutto uguale. accendo scheda, creo il collegamento a 5v col pin 2 e il led 13 si accnde ma non si spegne finche non resetto o spengo, in entrambi gli sketch. ho èprovato anche con la buil 0020 ma uguale.

Se la resistenza fà pullup allora cambia in il codice dell'ISR in FALLING

falling change rising low sempre uguale.. sto diventando pazzo

in ogni caso anche con una pullup non creerebbe un evento interrupt ciclico. poi analizzando l'uscita con un altro arduino non silevo dei low. rimane fisso high come se non vedesse il low che c'è dopo..

lancio un appello chi ha un arduino a portata di mano può uplodare il codice e vedere se i risultati sono gli stessi?

ma ragazzi mi stupite... non c'è nessuna digitalWrite(ledPin, LOW); !!!!!!!!!!!!!!!!!!!!!!!
come sperate che si spenga il led? :smiley:

i love you!

ovvio e banale, davanti agli occhi
mi sembrava un errore del genere...

grazie mille mila

const int ledPin = 13;      // the number of the LED pin

volatile int buttonState = LOW;         // variable for reading the pushbutton status

void setup() {
  // initialize the LED pin as an output:
  pinMode(ledPin, OUTPUT);      
 //pinMode(buttonPin, INPUT);     
attachInterrupt(0,accendi,RISING);// 2=falling 3



}

void accendi(){
buttonState=! buttonState;}


void loop(){
 
 if (buttonState == HIGH) {    
    digitalWrite(ledPin, HIGH);  
delay(10);
buttonState=LOW;}
else {
buttonState=LOW;}
digitalWrite(ledPin, LOW);

}

lo posto servisse a qualcuno

"non c'è miglior modo per nascondere qualcosa che sotto gli occhi di tutti " :slight_smile:

però una bella ristata me la son fatta lo stesso :grin: