L8: Sakagailua (2)
Etiketak:
Sakagailua (2)
Zer ikasiko duzu ikasgai honetan
Ikasgai honetan honako hauek landuko ditugu:
- Zer den eten bat.
- Begizta nagusiaren barruan galdetzearen eta gertaera bati erantzutearen arteko aldea.
- Sakagailuaren egoera aldatzen denean blokeak exekutatzea.
- Eten sinpleak erabiltzea LED bat kontrolatzeko.
- Aldagaiak erabiltzea pultsazioak zenbatzeko.
Aurretiazko baldintzak
Ikasgai hau jarraitu ahal izateko, 1. ikasgaia: Nire lehen proiektua, 2. ikasgaia: LED diodoa, 3. ikasgaia: LED diodoa (2) eta 7. ikasgaia: Sakagailua osatu behar dituzu.
Kontagailuaren aukerako atala egin nahi baduzu, 6. ikasgaia: Serieko ataka landu izanak ere lagunduko dizu.
Azalpen teorikoa
Aurreko ikasgaian sakagailuaren egoera irakurtzen genuen begizta nagusian. Programak galdera bat errepikatzen zuen behin eta berriz:
- Botoia sakatuta dago?
- Orain sakatuta dago?
- Eta orain?
Lan egiteko modu horri polling esaten zaio. Ondo funtzionatzen du eta erraz ulertzen da, baina eragozpen bat du: programak etengabe kontsultatu behar du egoera.
Ikasgai honetan beste ideia bat erabiliko dugu: eten bat. Egoera etengabe kontsultatu beharrean, hau esango diogu plakari:
Sakagailua ON egoerara aldatzen denean, exekutatu bloke hauek.
Gehiago jakin nahi dut!
Zer da eten bat?
Eten bat gertaera bati erantzuteko modu bat da. Gertaera une jakin batean gertatzen den zerbait da:
- Botoi bat sakatu.
- Botoi bat askatu.
- Mezu bat jaso.
- Denbora jakin bat igaro.
Eten bat etxeko txirrinarekin alderatu dezakegu. Ez dugu atea segundo bakoitzean begiratzen, norbait dagoen egiaztatzeko. Norbaitek txirrina sakatzen duenean, abisua jasotzen dugu.
Sakagailuarekin antzeko zerbait gertatzen da:
- Polling erabiliz, programak behin eta berriz kontsultatzen du botoia sakatuta dagoen.
- Eten bat erabiliz, programak erantzun bat prestatzen du botoiaren egoera aldatzen denerako.
ON eta OFF sakagailu batean
Sakagailuaren goi-mailako blokeak balio sinpleekin lan egiteko aukera ematen digu:
- ON: sakagailua sakatuta dago.
- OFF: sakagailua sakatu gabe dago.
Ikasgai honetan bi gertaera erabiliko ditugu:
- NireSakagailua ON(e)ra aldatzen denean: sakagailua sakatzean gertatzen da.
- NireSakagailua OFF(e)ra aldatzen denean: sakagailua askatzean gertatzen da.
Bi gauza egiten dituzten programak
Etenak erabilgarriak dira zereginak bereizteko aukera ematen dutelako. Adibidez:
- Begizta nagusiak argi-sekuentzia bat egiten jarrai dezake.
- Botoia sakatzean, sakagailuaren etenak aldagai bat alda dezake edo LED bat piztu.
Horrek ez du esan nahi etenak beti hobeak direnik. Tresna bat gehiago dira. Programa sinpleetan, begizta nagusian egoera kontsultatzea nahikoa izan daiteke. Gertaera azkarretarako edo une jakin bateko ekintzetarako, eten bat erabiltzea erosoagoa izan daiteke.
Eten batean, ekintza laburrak eta argiak egitea komeni da. Saihestu eten baten barruan itxaronaldi luzeak sartzea. Ekintza batek denbora asko behar badu, normalean hobe da aldagai bat aldatzea eta lana begizta nagusiari uztea.
Atal praktikoa
Material hauek behar dituzu:
- ESP32 garapen-plaka.
- BatSTEM hedapen-plaka.
- USB konexio-kablea.
- Prototipo-plaka.
- Sakagailua.
- LED gorria.
- 100 Ohm-eko erresistentzia.
- Konexio-kableak.
Eskema elektronikoa
Aurreko ikasgaiko zirkuitu bera erabiliko dugu: sakagailu bat GPIO4 pinera konektatuta eta LED bat GPIO2 pinera konektatuta, babes-erresistentziarekin.

Konexio diagrama
- ikasgaiko zirkuitua muntatuta baduzu, berrerabil dezakezu. Bestela, muntatu sakagailua eta LEDa diagrama honi jarraituz.
Osagaien konexioa prototipo-plakan
Pausoz pauso
- Konekta ezazu hedapen-plakaren GND konektorea prototipo-plakaren lerro urdinera.
- Jar ezazu sakagailua prototipo-plakaren erdiko kanala zeharkatuz.
- Konekta ezazu sakagailuaren terminal bat GPIO4 pinera.
- Konekta ezazu sakagailuaren beste terminala GNDra.
- Konekta ezazu LEDa GPIO2 pinera, 100 Ohm-eko erresistentzia bat seriean erabiliz.
- Konekta ezazu LEDaren katodoa GNDra.
- Konekta ezazu plaka ordenagailura USB kablearekin.
Sakagailuaren goi-mailako blokea arduratuko da sakagailua behar bezala irakurtzeko behar den konfigurazioaz. Praktika honetan ez dugu kanpoko erresistentziarik gehitu behar sakagailuarentzat.
Kodea
Piztu LEDa sakagailuaren gertaeren bidez
Eraiki eta exekutatu sketch hau:

Pausoz pauso
- Konfigurazioa blokean, gehitu “izena duen LEDa” blokea.
- Idatzi NireLED izena eta hautatu GPIO2 pina.
- Gehitu “izena duen sakagailua/etengailua” blokea.
- Idatzi NireSakagailua izena eta hautatu GPIO4 pina.
- Arrastatu “NireSakagailua ON(e)ra aldatzen denean” blokea.
- Bloke horren barruan, gehitu “jarri LED NireLED 100 (e)raino” blokea.
- Arrastatu “NireSakagailua OFF(e)ra aldatzen denean” blokea.
- Bloke horren barruan, gehitu “jarri LED NireLED 0 (e)raino” blokea.
- Exekutatu sketch-a eta probatu sakagailua.
Botoia sakatzen duzunean, ON gertaeraren etena exekutatuko da. Askatzen duzunean, OFF gertaeraren etena exekutatuko da.
Ikusi begizta nagusiak ez duela botoiaren egoera kontsultatu behar. Portaera gertaeren blokeetan definituta dago.
Sakaldiak zenbatu
Orain aldagai bat erabiliko dugu botoia zenbat aldiz sakatu den gogoratzeko. Atal hau pixka bat aurreratuagoa da, etenak, aldagaiak eta COM ataka konbinatzen dituelako.

Pausoz pauso
- Konfigurazioa blokean, konfiguratu COM ataka 115200 bps-ra. COM monitoreak abiadura horretan funtzionatzen du beti.
- Gehitu NireSakagailua sakagailua, GPIO4 pinera konektatuta.
- Sortu Sakaldiak izeneko aldagai bat, 0 hasierako balioarekin.
- Gehitu “NireSakagailua ON(e)ra aldatzen denean” blokea.
- Gertaera horren barruan, gehitu “Sakaldiak aldatu 1 (e)n” blokea.
- Ondoren, idatzi Sakaldiak COM atakan.
- Exekutatu sketch-a, ireki COM monitorea eta sakatu botoia hainbat aldiz.
Sakaldi bakoitzak COM monitorean agertzen den zenbakia handitu beharko luke.
Gehiago jakin nahi dut!
Zergatik zenbatzen dugu bakarrik ON egoerara aldatzean?
Sakagailu batek bi egoera-aldaketa garrantzitsu ditu:
- OFF egoeratik ON egoerara, sakatzen dugunean.
- ON egoeratik OFF egoerara, askatzen dugunean.
Bi aldaketetan zenbatzen badugu, sakaldi bakar batek bi aldiz handitu lezake kontagailua. Horregatik, ON gertaera bakarrik erabiltzen dugu zenbatzeko.
Erreboteak eta benetako sakaldiak
Sakagailu mekanikoek erreboteak sor ditzakete. Goi-mailako blokeak sakagailuarekin erosoago lan egiten laguntzen du. Hala ere, noizbait ikusten baduzu sakaldi bat behin baino gehiagotan zenbatzen dela, horrek ez du zertan esan nahi logika osoa gaizki idatzi duzunik. Botoiaren efektu fisiko bat izan daiteke, edo erreboteak saihesteko modua hobetu behar duzula adieraz dezake.
Ariketa gehigarriak edo erronkak
- Aldatu lehen sketch-a, LEDa botoia askatzean pizteko eta sakatzean itzaltzeko.
- Gehitu bigarren LED bat. Programatu bata ON gertaerarekin pizteko eta bestea OFF gertaerarekin pizteko.
- Aldatu kontagailua, zenbakiaren aurretik mezu bat idazteko, adibidez “Sakaldiak:”.
- Sortu Egoera izeneko aldagai bat. Botoia sakatzen duzunean, jarri “aktibo” balioa eta idatzi COM monitorean.
Erronketarako pistak
- LEDaren portaera alderantzikatzeko, trukatu 100 eta 0 balioak.
- Bi LED erabiltzeko, sortu “izena duen LEDa” motako bi bloke konfigurazioa blokean.
- COM monitorean testu finkoa idazteko, erabili testu-bloke bat “idatzi … COM atakan” blokearen barruan.
- Testu-aldagaiekin lan egiteko, sortu aldagai bat eta erabili “jarri … …(e)n” blokea testu-bloke batekin.
Ikasitakoaren laburpena
- Ikasi dugu eten batek gertaera bati erantzuteko aukera ematen duela.
- Polling eta etenak alderatu ditugu.
- “NireSakagailua ON(e)ra aldatzen denean” blokea erabili dugu.
- “NireSakagailua OFF(e)ra aldatzen denean” blokea erabili dugu.
- Sakaldien kontagailu bat sortu dugu aldagai bat erabiliz.
- Informazioa bidali dugu COM monitorera, gertatzen dena monitorizatzeko.
Hurrengo urratsak
- Ikasi ekintza aldizkakoak tenporizadore batekin egiten 9. ikasgaian.
Ariketa gehigarrien soluzioak
Erakutsi
LEDa piztuta botoia askatzean
Portaera alderantzikatzeko, aldatu gertaera bakoitzaren ekintzak:
- “NireSakagailua ON(e)ra aldatzen denean” blokean, jarri NireLED 0 balioan.
- “NireSakagailua OFF(e)ra aldatzen denean” blokean, jarri NireLED 100 balioan.
Horrela, LEDa itzalita egongo da botoia sakatuta mantentzen duzun bitartean, eta piztuta egongo da askatzen duzunean.