Intreruperi cu Arduino

Intreruperile se folosesc in Arduino pentru a executa o bucata de cod la momentul producerii unui eveniment.

De exemplu avem un ceas cu afisaj digital dar si un buton legat la soneria de la usa. La fiecare apasare a butonului soneriei noi vom putea incrementa un contor in mod independent de functionarea ceasului. 

Pentru acest articol vom folosi 2 butoane si 2 leduri. La fiecare apasare de buton starea ledului se va schimba.

Schema de conectare este urmatoarea:

Cand folosim intreruperile vom folosi urmatoarea instructiune:

attachInterrupt(digitalPinToInterrupt(pinIntrerupere), functieIntrerupere, EVENIMENT);

unde la pinIntrerupere setam pinul care va fi monitorizat de catre Arduino, functieIntrerupere este o functie care va fi executata la momentul oportun iar EVENIMENT inseamna tipul de eveniment care va declansa executarea functiei. 

Important: in functia apelata de catre o intrerupere nu se vor folosi urmatorele instructiuni:

-millis();

-delay();

-micros();

-delayMicroseconds();

Pentru EVENIMENT putem folosi urmatorii parametri:

-LOW - in momentul in care pinul trece in nivel logic zero;

-CHANGE - schimbarea starii unui pin;

-RISING - trecerea unui pin de la nivel logic 0 la nivel logic 1;

-FALLING - trecrea unui pin de la nivel logic 1 la nivel logic 0.

 

Sketchul folosit in acest articol este urmatorul:

int buton1 = 2;
int buton2 = 3;
int led1 = 11;
int led2 = 12;


void setup() {
  pinMode(buton1, INPUT);
  pinMode(buton2, INPUT);
  pinMode(led1, OUTPUT);
  pinMode(led2, OUTPUT);
  digitalWrite(led1, LOW);
  digitalWrite(led2, LOW);
  attachInterrupt(digitalPinToInterrupt(buton1),butonApasat1,RISING); 
  attachInterrupt(digitalPinToInterrupt(buton2),butonApasat2,RISING); 
}


void loop() {

}

void butonApasat1() {
  int buf = digitalRead(led1);
  if (buf == 1) {
    digitalWrite(led1, LOW);
  } else {
    digitalWrite(led1, HIGH);    
  }
}

  void butonApasat2() {
  int buf2 = digitalRead(led2);
  if (buf2 == 1) {
    digitalWrite(led2, LOW);
  } else {
    digitalWrite(led2, HIGH);    
  }
}

 

Nu sunt comentarii in “Intreruperi cu Arduino”

Lasa un comentariu

Raspuns lui Some User

Autentificare