L9: Timer-a
Timer-a
Zer ikasiko duzu ikasgai honetan
Ikasgai honetan honako hauek landuko ditugu:
- Zer den timer bat edo tenporizadore bat.
- Begizta nagusiaren barruan itxarotearen eta aldizkako gertaera bat erabiltzearen arteko desberdintasuna.
- Blokeak denbora-tarte jakin batean behin exekutatzea.
- Nola aktibatu eta desaktibatu tenporizadore bat.
- Aldagaiak erabiltzea timerraren jauzi baten eta hurrengoaren arteko egoera gogoratzeko.
Aurretiazko baldintzak
Ikasgai hau jarraitu ahal izateko, 1. ikasgaia: Nire lehen proiektua, 3. ikasgaia: LED diodoa (2), 6. ikasgaia: Serieko ataka eta 8. ikasgaia: Sakagailua (2) osatu behar dituzu.
Azalpen teorikoa
Lehengo ikasgaietan itxaron blokea erabili genuen etenaldiak sortzeko. Adibidez, LED bat pizten genuen, segundo bat itxaroten genuen, itzaltzen genuen eta beste segundo bat itxaroten genuen.
Horrek ondo funtzionatzen du programa sinpleetan. Baina, batzuetan, noizean behin zerbait gertatzea nahi izaten dugu, begizta nagusia itxaronaldiz bete gabe. Horretarako, timer bat edo tenporizadore bat erabil dezakegu.
Timer bat behin eta berriz jotzen duen alarma baten antzekoa da. Denbora-tarte bat ezartzen diogu, eta tarte hori igarotzen den bakoitzean bloke batzuk exekutatzen ditu.
Gehiago jakin nahi dut!
Itxarotea eta tenporizadore bat erabiltzea ez dira gauza bera
Itxaron blokea erabiltzen dugunean, programa geldituta geratzen da denbora horretan, hurrengo blokera igaro aurretik. Hau esatearen antzekoa da:
Ez egin ezer 1 segundoz.
Tenporizadoreak, berriz, gertaera baten moduan funtzionatzen du:
Segundo bakoitzean, abisatu eta exekutatu atal hau.
Aurreko ikasgaian sakagailuarekin egin genuenaren antz handia du horrek. Sakagailuak gertaera bat sortzen zuen ON edo OFF egoerara aldatzean. Timer-ak gertaera bat sortzen du programatutako unea iristen denean.
Aldizkako gertaera bat
Timer-a aldizkakoa dela esaten dugu, behin eta berriz errepikatzen delako. Segundo bateko timerra konfiguratzen badugu:
- Segundo 1 igarotzen da → timer-ak salto egiten du.
- Beste segundo 1 igarotzen da → berriz egiten du salto.
- Beste segundo 1 igarotzen da → berriro egiten du salto.
Timer-a aktibatuta dagoen bitartean, gertaerak sortzen jarraituko du.
Aldagaiak eta egoera
Timer batek askotan aldagai bat behar du, azken aldian zer gertatu zen gogoratzeko. Adibidez, LED batek keinu egitea nahi badugu:
- LEDa itzalita bazegoen, piztu egingo dugu.
- Piztuta bazegoen, itzali egingo dugu.
Orain zer egin behar duen jakiteko, programak aurreko egoera gogoratu behar du. Informazio hori aldagai batean gordetzen da.
Sakagailuaren etenen kasuan bezala, komenigarria da timer gertaera baten barruko blokeak argiak izatea eta ez luzeegiak. Timer-ak erritmoa markatzeko balio du; ez da programa luze bat barruan sartzeko.
Atal praktikoa
Material hauek behar dituzu:
- ESP32 garapen-plaka.
- BatSTEM hedapen-plaka.
- USB konexio-kablea.
- Prototipo-plaka.
- LED gorria.
- 100 Ohm-eko erresistentzia.
- Konexio-kableak.
- Sakagailua, bigarren ariketarako.
Eskema elektronikoa
Kanpoko LED bat erabiliko dugu, GPIO4 pinera konektatuta, 100 Ohm-eko babes-erresistentziarekin.

Konexio diagrama
- eta 4. ikasgaietan erabilitako kanpoko LEDaren muntaketa berrerabil dezakezu.
Osagaien konexioa prototipo-plakan
Pausoz pauso
- Konekta ezazu hedapen-plakaren GND konektorea prototipo-plakaren lerro urdinera.
- Konekta ezazu GPIO4 pina prototipo-plakaren erdialdeko lerro libre bateraino.
- Jar ezazu 100 Ohm-eko erresistentzia LEDarekin seriean.
- Konekta ezazu LEDaren katodoa GNDra.
- Konekta ezazu plaka ordenagailura USB kablearekin.
Kodea
Jarri LEDa keinuka timer bat erabiliz
Eraiki eta exekutatu sketch hau:

Pausoz pauso
- Konfigurazioa blokean, gehitu “izena duen LEDa” blokea.
- Idatzi NireLED izena eta hautatu GPIO4 pina.
- Sortu LEDEgoera izeneko aldagai bat, 0 hasierako balioarekin.
- Gehitu “izena duen timer-a” blokea.
- Idatzi Keinua izena.
- Konfiguratu 1 segundo igarotzen den bakoitzean salto egiteko eta automatikoki hasteko.
- Gehitu “Keinua (e)k salto egiten duenean” blokea.
- Gertaeraren barruan, erabili “baldin eta…egin…bestela” blokea:
- Baldin eta LEDEgoera 0 bada, jarri NireLED 100 balioan eta LEDEgoera 1 balioan.
- Bestela, jarri NireLED 0 balioan eta LEDEgoera 0 balioan.
Sketch-a exekutatzen duzunean, LEDaren egoera segundo bakoitzean aldatuko da.
Begizta nagusiak ez du LEDaren keinua kontrolatu behar. Tenporizadoreak markatzen du erritmoa.
Timer bat aktibatu eta desaktibatu
Timer bat aktibo dagoen ere kontrola dezakegu. Adibide honetan, sakagailuak tenporizadorea desaktibatzen du sakatzen dugunean, eta berriz aktibatzen du askatzen dugunean.

Pausoz pauso
- Mantendu aurreko ariketako LEDa, LEDEgoera aldagaia eta Keinua tenporizadorea. Irudiko sketch-a egiteko, aldatu LEDaren konexioa GPIO16 pinera eta hautatu pin hori NireLED konfiguratzeko blokean.
- Gehitu “izena duen sakagailua/etengailua” blokea, NireSakagailua izenarekin eta GPIO4 pinera konektatuta. Konekta ezazu sakagailuaren terminal bat GPIO4 pinera eta bestea GNDra, 8. ikasgaian bezala.
- Gehitu “NireSakagailua ON(e)ra aldatzen denean” gertaera.
- Gertaera horren barruan, erabili “timer Keinua desaktibatuta jarri” blokea.
- Gehitu “NireSakagailua OFF(e)ra aldatzen denean” gertaera.
- Gertaera horren barruan, erabili “timer Keinua aktibatuta jarri” blokea.
Botoia sakatzean, LEDak keinu egiteari uzten dio. Askatzean, berriz hasten da keinu egiten.
Bigarren ariketa hau kanpoko LED batekin egiten baduzu, erabili pin desberdinak LEDarentzat eta sakagailuarentzat. Adibidez, LEDa GPIO16 pinera eta sakagailua GPIO4 pinera.
Gehiago jakin nahi dut!
Zergatik erabiltzen dugu aldagai bat?
Timer-ak segundo bakoitzean salto egiten du, baina ez daki berez LEDa piztuta edo itzalita dagoen. LEDEgoera aldagaiak informazio hori gordetzen du.
Sketch honetan balio hauek erabiltzen ditugu:
- 0, itzalita dagoela adierazteko.
- 1, piztuta dagoela adierazteko.
Timer-ak salto egiten duen bakoitzean, programak aldagaiaren balioa kontsultatzen du, kontrakoa egiten du eta aldagaia eguneratzen du hurrengorako.
Tenporizadoreak eta botoiak
Tenporizadore batek eta botoi batek elkarrekin lan egin dezakete:
- Timer-ak erritmoa markatzen du.
- Botoiak erritmo hori aktibo dagoen edo ez erabakitzen du.
Konbinazio hori proiektu askotan agertzen da: alarmetan, argi-seinaleetan, jokoetan, kontagailuetan eta pausa daitezkeen sistema automatikoetan.
Ariketa gehigarriak edo erronkak
- Aldatu timer-aren denbora 500 milisegundo izateko, LEDak azkarrago keinu egiteko.
- Aldatu timer-aren denbora 2 segundo izateko, LEDak motelago keinu egiteko.
- Gehitu COM ataka eta idatzi LEDEgoera tenporizadoreak salto egiten duen bakoitzean.
- Erabili RGB LED bat eta txandakatu gorria eta urdina timer-aren salto bakoitzean.
- Sortu bi tenporizadore: bata LED baterako eta bestea beste LED baterako, denbora-tarte desberdinekin.
Erronketarako pistak
- Milisegundoak erabili nahi badituzu, hautatu milisegundo tenporizadorearen blokean.
- COM atakan idazteko, konfiguratu lehenik ataka 115200 bps-ra. COM monitoreak abiadura horretan funtzionatzen du beti.
- Koloreak txandakatzeko, LEDEgoera bezalako aldagai bat erabil dezakezu.
- Bi tenporizadore erabiltzen badituzu, jarri izen desberdinak, ez nahasteko.
Ikasitakoaren laburpena
- Ikasi dugu zer den timer bat.
- Tenporizadore bat erabili dugu blokeak denbora-tarte jakin batean behin exekutatzeko.
- Ikusi dugu timer-ak aldizkako gertaera baten moduan funtzionatzen duela.
- Aldagai bat erabili dugu LEDaren egoera gogoratzeko.
- Timer bat aktibatu eta desaktibatu dugu sakagailu baten bidez.
- Itxaron blokearen erabilera eta tenporizadoreen erabilera alderatu ditugu.
Hurrengo urratsak
- Orain sarrerak, irteerak, aldagaiak, COM ataka, etenak eta tenporizadoreak konbina ditzakezu proiektu osatuagoak eraikitzeko.
- Praktikan jarri ikasitakoa P3: Semaforo interaktiboa proiektuan.
Ariketa gehigarrien soluzioak
Erakutsi
Bidali LEDEgoera COM monitorera
Egoera COM monitorean ikusteko:
- Gehitu “konfiguratu COM ataka 115200 bps-ra” blokea konfigurazioa blokean.
- “Keinua (e)k salto egiten duenean” blokearen barruan, gehitu “idatzi LEDEgoera COM atakan” blokea, aldagaia aldatu ondoren.
Horrela, ordenagailuan egiazta dezakezu programa 0 eta 1 balioak txandakatzen ari den.