- Kormányok / autós szimulátorok topikja
- Androidos fejegységek
- Vélemény: nem úgy tűnik, de Lip-Bu Tan most menti meg az Intelt
- 3D nyomtatás
- Ventilátorok - Ház, CPU (borda, radiátor), VGA
- Milyen videókártyát?
- AMD Ryzen 9 / 7 / 5 9***(X) "Zen 5" (AM5)
- Kettő együtt: Radeon RX 9070 és 9070 XT tesztje
- Melyik tápegységet vegyem?
- Vezetékes FEJhallgatók
-
PROHARDVER!
Arduino hardverrel és szoftverrel foglakozó téma. Minden mikrovezérlő ami arduinoval programozható, és minden arduino program, board, és hardverrel kapcsolatos kérdések helye.
Új hozzászólás Aktív témák
-
zka67
őstag
Szia, a működése: a prev változó tárolja a nyomógomb előző állapotát, a state a kimenet aktuális állapotát.
Utána egy végtelen ciklusban beolvassa a curr változóba a nyomógomb aktuális állapotát, majd megnézi, hogy a nyomógomb most le van-e nyomva és az előző állapotban nem volt-e lenyomva, azaz most került-e lenyomásra. Ha igen, megváltoztatja a kimenet állapotát és kiírja azt a portra. A végén minden esetben átkerül az előző állapotba a nyomógomb aktuális állapota, és vár 100ms-et a nyomógomb prell elkerülésére.NYOMÓGOMB ___ _________ _____ ______
\____/ \/\______/ \_/
LED ______________ _______
___/ \______________/
MINTAVÉTEL | | | | | | | | | | | | | | |Szerk: lásd gyapo11 válaszát is
-
gyapo11
őstag
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
- Elektromos cigaretta 🔞
- Konteó topic
- PROHARDVER! feedback: bugok, problémák, ötletek
- EA Sports WRC '23
- Ingatlanos topic!
- Kormányok / autós szimulátorok topikja
- Óra topik
- Path of Exile (ARPG)
- Samsung Galaxy A54 - türelemjáték
- Telekom otthoni szolgáltatások (TV, internet, telefon)
- További aktív témák...
- Steam Deck (LCD) 512GB + Steam Deck dokkolóállomás + kiegészítők
- Aful Explorer
- Lian Li ITX Gamer PC - AMD R5 5600, RX 6700 XT, 16GB, 1TB, Win11 Pro - ELADÓ!
- Újszerű Lenovo Thinkpad L14 G5 (Gen5) AMD Ryzen 5 7535U 16GB RAM 512GB SSD Win11Pro Gari: 25.09
- BESZÁMÍTÁS! MSI B450 R5 5500 16GB DDR4 512GB SSD RTX 2060 Super 8GB Rampage SHIVA TT 500W
- RITKASÁG: MSI Big Bang Z77 MPOWER
- Telefon felvásárlás!! Samsung Galaxy S21/Samsung Galaxy S21+/Samsung Galaxy S21 Ultra
- Kingston ValueRAM 4GB DDR3 1333MHz KVR1333D3N9
- Bomba ár! Dell Latitude E5550 - i3-5GEN I 8GB I 128GB SSD I 15,6" HD I W10 I HDMI I Cam I Gari!
- BESZÁMÍTÁS! Apple MacBook Pro 16 M4 Pro 24GB RAM 512GB SSD - garanciával hibátlan működéssel
Állásajánlatok
Cég: CAMERA-PRO Hungary Kft
Város: Budapest
Cég: Promenade Publishing House Kft.
Város: Budapest