1.2.2. fejezet, Alapfunkciók 2. - Led villogtatás nyomógombbal

A kapcsolás célja, hogy a D2-es digitális bemenetre kötött nyomógombbal kapcsolhassuk be/ki a D13-as lábra kötött Led-et (kapcsolódó Arduino IDE projekt itt). Szükségünk lesz 3 vezetékre, egy 3k3 ohmos ellenállásra, és egy mikrokapcsolóra. Ez esetben a D2-es lábról történik a bemenő jel olvasásra, a D13-as lábat pedig kimenetnek használjuk a LED vezérlésére, mint az első alapfunkciónál is tettük. A digitális áramkörökben alkalmazott mikrokapcsoló felépítése kicsit más, mint a mindennapokban használt lámpakapcsoló. Ennek négy lába van. A kapcsoló felülről nézve négyszög alakú. A lábak két szemközti oldalon helyezkednek el párosával. Az áramot párhuzamosan vagy keresztbe vezeti, a nyomógomb állapotától függően. Ha nincs megnyomva a gomb, akkor az egymással szemközti párokat kapcsolja össze. Ha megnyomjuk a gombot, akkor a szemközti oldalakon sréhen elhelyezkedő ellenoldalak közt létesít kapcsolatot, mint ha keresztbe kötnénk a két-két lábat. Vagyis a D2-es láb két értéket vehet fel, a +5 volt és a föld között lehet választani vele. Ez azért fontos, mert a digitális lábon a feszültség változásától lesz jel, nem attól, hogy csatlakoztatjuk vagy leválasztjuk a vezetéket, mint azt tesszük egy hagyományos háztartási lámpakapcsolóval. A program forráskódja:

// constants won't change. They're used here to set pin numbers:
const int buttonPin = 2;     // the number of the pushbutton pin
const int ledPin =  13;      // the number of the LED pin
 
// variables will change:
int buttonState = 0;         // variable for reading the pushbutton status
 
void setup() {
  // initialize the LED pin as an output:
  pinMode(ledPin, OUTPUT);
  // initialize the pushbutton pin as an input:
  pinMode(buttonPin, INPUT);
}
 
void loop() {
  // read the state of the pushbutton value:
  buttonState = digitalRead(buttonPin);
 
  // check if the pushbutton is pressed. If it is, the buttonState is HIGH:
  if (buttonState == HIGH) {
    // turn LED on:
    digitalWrite(ledPin, HIGH);
  } else {
    // turn LED off:
    digitalWrite(ledPin, LOW);
  }
}

Mondhatnánk, hogy ezt egy sima lámpakapcsolóval is meg lehet csinálni, mi ebben a különleges? Következő lépés, hogy a led gombnyomásra kezdjen villogni, és a villogtatást frekvenciáját egy további gombnyomással változtathassuk. Ezt bonyolítsuk azzal, hogy ezt bármikor megtehessük. Vagyis a várakozási szakaszt bármikor félbeszakíthassuk egy gombnyomással, és új frekvenciát állíthassunk be. Erre használják az interrupt (megszakítás) műveletet. A villogtatás előtt nézzük meg egy mintaprogramban hogyan is működik ez.

const byte ledPin = 13;
const byte interruptPin = 2;
volatile byte state = LOW;
 
void setup() {
  pinMode(ledPin, OUTPUT);
  pinMode(interruptPin, INPUT_PULLUP);
  attachInterrupt(digitalPinToInterrupt(interruptPin), blink, CHANGE);
}
 
void loop() {
  digitalWrite(ledPin, state);
}
 
void blink() {
  state = !state;
}