Hirdetés

Új hozzászólás Aktív témák

  • gyapo11

    őstag

    válasz Imy #1823 üzenetére

    A while feltétele 1, ami igaz, vagyis örökké fog futni.
    curr = digitalRead(NYOMOGOMB);
    beírja a curr változóba a gomb állapotát.
    if ((curr == 0) && (prev != 0)) {
    Mivel prev=1, vagyis igaz, hogy nem 0, csak akkor igaz az if feltétele, ha curr=0. Vagyis amíg curr=1, addig nem történik változás, az if nem fut le,
    prev = curr;
    prevbe beírja a curr-t, vagyis 1-et, vár 100 msecet, és újra kezdi a while-t.

    Egyszer megváltozik a gomb állapota, és a curr-ba 0 kerül. Ekkor az if feltétele már igaz lesz, mert curr=0 és prev nem 0.
    state ^= 1;
    A ^ jel a bitwise xor, vagyis 1-gyel xorolja a biteket, aminek következtében ami 0 volt az 1 lesz, ami 1 volt az 0 lesz. A state eddig 0 volt, vagyis most 1 lesz.
    digitalWrite(LED, state);
    Vagyis a LED pinbe 1-et ír, a led világítani kezd.
    prev = curr;
    A prevbe 0 kerül, innen már tudjuk, hogy az if nem fog lefutni, mert a prev nem 0 feltétel nem teljesül, egészen addig, amíg a nyomógomb állapota ismét nem változik és válik 1-gyé.
    delay(100);
    Ez a pergésmentesítés miatt kell, hogy a nyomógomb lenyomásakor és felengedésekor létrejövő többtucat ki-be kapcsolást figyelmen kívül hagyjuk. Csak az első változást dolgozzuk föl, utána várunk 100 msecet, addig ezek a parazita kapcsolások megszűnnek.

Új hozzászólás Aktív témák