Ora creiamo lo stesso risultato utilizzando la funzione attachInterrupt():
constint ledPin = 13;
int state = LOW;
voidsetup()
{
pinMode(ledPin, OUTPUT);
attachInterrupt(0, changestate, CHANGE);
}
voidloop()
{
digitalWrite(ledPin, state);
}
voidchangestate()
{
state = !state;
}
La funzione attachInterrupt non fa altro che richiamare la funzione changestate quando avviene un cambiamento di stato sul pin 2, arduino uno o ethernet dispone di 2 pin dove si può appicare questa funzione invece su arduino 2 è possibile applicarla su qualunque pin, per semplificarvi il lavoro vi elenco quelli da me testati:
attachInterrupt(int, funzione, modo)
Board int=0 int=1 int=2 int=3 int=4 int=5 Uno/Ethernet pin 2 pin 3 x x x x Mega2560 pin 2 pin 3 pin 21 pin 20 pin 19 pin 18 Leonardo pin 3 pin 2 pin 0 pin 1 pin 7 x
Esistono 5 metodi mode per l'utilizzo diverso e sono:
HIGH: richiama la funzione quando il pin è allo stato HIGH
LOW: richiama la funzione quando lo stato del pin è LOW
CHANGE: richiama la funzione ogni volta che il pin cambia valore
RISING: richiama la funzione quando il pin passa dallo stato LOW allo stato HIGH
FALLING: richiama la funzione quando il pin passa dallo stato HIGH allo stato LOW.
Specifica un nome Interrupt Service Routine (ISR) per richiamare una funzione quando si verifica un interrupt.
per spiegarvi meglio questa funzione prendo come esemplio il classico circuito per accendere un led con un pulsante:
const int buttonPin = 2; const int ledPin = 13; int buttonState = 0; void setup() { pinMode(ledPin, OUTPUT); pinMode(buttonPin, INPUT); } void loop(){ buttonState = digitalRead(buttonPin); if (buttonState == HIGH) { digitalWrite(ledPin, HIGH); } else { digitalWrite(ledPin, LOW); } }
Ora creiamo lo stesso risultato utilizzando la funzione attachInterrupt():
const int ledPin = 13; int state = LOW; void setup() { pinMode(ledPin, OUTPUT); attachInterrupt(0, changestate, CHANGE); } void loop() { digitalWrite(ledPin, state); } void changestate() { state = !state; }
La funzione attachInterrupt non fa altro che richiamare la funzione changestate quando avviene un cambiamento di stato sul pin 2, arduino uno o ethernet dispone di 2 pin dove si può appicare questa funzione invece su arduino 2 è possibile applicarla su qualunque pin, per semplificarvi il lavoro vi elenco quelli da me testati:
attachInterrupt(int, funzione, modo)
Board int=0 int=1 int=2 int=3 int=4 int=5 Uno/Ethernet pin 2 pin 3 x x x x Mega2560 pin 2 pin 3 pin 21 pin 20 pin 19 pin 18 Leonardo pin 3 pin 2 pin 0 pin 1 pin 7 x
Esistono 5 metodi mode per l'utilizzo diverso e sono:
HIGH: richiama la funzione quando il pin è allo stato HIGH
LOW: richiama la funzione quando lo stato del pin è LOW
CHANGE: richiama la funzione ogni volta che il pin cambia valore
RISING: richiama la funzione quando il pin passa dallo stato LOW allo stato HIGH
FALLING: richiama la funzione quando il pin passa dallo stato HIGH allo stato LOW.
Buona programmazione
Fonte: RyujiAndy's Blog