Kulturált gombozat

Az előző részben itt tartottunk:

void setup() {
    pinMode(0,INPUT_PULLUP);
    Keyboard.begin(); // indítsuk el az USB kezelését
}

void loop() {
    if (digitalRead(0)==0) {
        Keyboard.println("Hello");
    }
}

Ez egy gombnyomásra szépen kiírja, hogy Hello, kb. 50 alkalommal. Nem mintha ezt szerettük volna, de nézd csak meg a kódot! Ha a gomb meg van nyomva, megy ki a Hello. Amikor a gombot "röviden" megnyomod, az legalább 0.1 másodpercig tart. A program meg olyan gyorsan fut, hogy 0.1 másodperc alatt bőven vagy 50-szer észreveszi hogy meg van nyomva a gomb, és köszön, rendületlenül!

Azt kellene csinálni, hogy megvárni, amíg a gombot elengedik. Valahogy így:

void setup() {
    pinMode(0,INPUT_PULLUP);
    Keyboard.begin(); // indítsuk el az USB kezelését
}

void loop() {
    if (digitalRead(0)==0) {
        Keyboard.println("Hello");        
        while(digitalRead(0)==0) {
            delay(10);
        }
    }
}

A while ciklus addig ismétli a ciklusmagot - és befogja a szemét 10 ms-ig - amíg a gombot nyomva tartjuk. Eközben nem írunk semmit, eközben csak befogott szemmel várunk. Ha a gombot elengedtük, a while ciklusnak vége lesz, és a következő gombnyomást az if fogja érzékelni.

Na ez már döfi, ugye?