Teach ikasgaia
STM32 Arduino APIarekin (2/4): sekuentzia eta botoiak
Zabaldu STM32rako Arduino programa: kontrolatu RGB kanalak eta irakurri botoi bat. Azaldu nola eragiten dioten itxaronaldiak eta botoiak argien sekuentziari.
Hasi saioa irakasle-kontu batekin klase-saioa prestatzeko. Ikasleak klase-kode batekin sartzen dira.
Lehen aldia duzu LabsLand-en? Sortu irakasle-kontua
Ikaskuntza-emaitzak
Hainbat pin erabiliz irteera-sekuentzia bat sortzea.
LOW egoeran aktibo dagoen botoia irakurri eta programaren portaera aldatzeko erabiltzea.
Bi egoera probatu eta emaitzak jasotzea, programaren erabakia azaltzeko.
Ikaslearen jardueraren aurrebista
Jardueraren edukia
Aurrebista soilik. Klase-saio batean, ikasleek erantzunak bete eta lana irakasleari bidal diezaiokete.
LOW egoeran aktibo dagoen botoia
8 min
STM32 Arduino ikastaroa · 4 saiotatik 2.a. Oinezkoentzako seinale batean edo egoera-panel batean bezala, argi-sekuentzia bat errepikatu eta botoi baten bidez bizkortuko duzu. Nola erantzun diezaioke hurrengo zikloak sarrera fisiko bati? Hemen behar duzun guztia azaltzen da; ez duzu aurretik beste saiorik egin behar.
Muntaketa honetan, erabiliko dugun botoia PC5 pinera konektatuta dago. LOW egoeran aktiboa da: sakatuta dagoenean, digitalRead(PC5) funtzioak LOW itzultzen du; sakatu gabe dagoenean, HIGH.
Laborategiko interfazean, erabili Botón 1 edo B1 kontrola. Mantendu sakatuta gutxienez sekuentzia oso bat egoera berrian ikusi arte, eta askatu sakatu gabeko proba egin aurretik. Klik labur bat programa botoia irakurtzera iritsi aurretik amai daiteke.
BOTON_1 kodeko izenak B1 botoia adierazten du. Hurrengo konparazioetan izen hori erabiltzen da.
B1 botoia sakatuta dagoenean, zein konparaziok adierazten du LOW egoeran aktibo dagoen sarrera?
Sekuentzia azkarragoa botoia sakatzean
27 min
Programak urruneko muntaketan dagoeneko konektatutako hiru RGB kanal erabiltzen ditu. setup() funtzioak botoia sarrera gisa konfiguratzen du, eta RGB pinak irteera gisa. loop() funtzioak hiru koloreko ziklo bakoitzaren hasieran irakurtzen du botoia, milisegundotako itxaronaldia hautatzen du eta kanalak banan-banan pizten ditu. Zikloaren erdian sakatzen baduzu, programak hurrengo zikloaren hasieran baino ez du aldaketa hautemango, une horretan oraindik sakatuta badago. Horregatik, mantendu B1 sakatuta ziklo berria behatu arte.
apagarTodos() funtzioak hiru kanalak itzaltzeko ekintzak biltzen ditu. pulsado aldagaiak botoia sakatuta dagoen adierazten du; espera aldagaiak, itxaronaldia. RGB_ROJO, RGB_VERDE eta RGB_AZUL izenek kanal gorria, berdea eta urdina adierazten dituzte, hurrenez hurren.
Ilaran itxaron behar baduzu, osatu bi TODO hutsuneak, jarraitu sakatutako eta sakatu gabeko botoiaren kode-bideei eta identifikatu gero berrantolatuko dituzun kolore-blokeak. Gorde kodea ilaran sartu aurretik. Konpilazioak huts egiten badu, zuzendu lehen akatsa kargatu aurretik. Kargak huts egiten badu, egiaztatu erreserbaren eta plakaren egoera eta saiatu berriz behin; gorde fitxategia saioa berreskuratu behar bada. Aurreikuspenek ez dituzte ordezten hasierako bi hardware-behaketak eta aldaketaren ondorengo beste biak.
Botoiak hurrengo RGB zikloaren erritmoa ezartzen du
Programak B1 irakurtzen du loop() hasieran, espera balioa hautatzen du eta balio hori erabiltzen du ziklo horretako hiru RGB kanaletan.
Ireki STM32 Arduino laborategia bloke honetatik, eta CodeIDEn hautatu
main.inoeditore-fitxa.Itsatsi beheko hasierako programa. Osatu TODO 1 «sakatuta» esan nahi duen mailarekin, eta TODO 2 kameran bereiz daitekeen itxaronaldi azkarrago batekin,
100 mseta300 msartekoa. Itxaronaldi arrunta500 msda; lehen probarako, tarte gomendatuaren goiko aldea errazago ikusten da kameran.Bilatu
TODO: osatu hutsune guztiak konpilatu aurretik, eta kendu osatutako TODO iruzkinak. Gorde, konpilatu eta itxaron emaitza zuzena adierazten duen mezua. Gero kargatu plakan, eta itxaron berrespena.1. proba — B1 sakatu gabe: behatu hiru koloreko sekuentzia oso bat eta bete sakatu gabeko errenkada.
2. proba — B1 sakatuta mantenduta: mantendu B1 sakatuta gutxienez sekuentzia oso bat erritmo berrian ikusi arte. Askatu eta bete sakatutako errenkada. Jaso programan erabilitako itxaronaldia
ms-tan eta kameran behatutako erritmoa; ez tratatu kamera denbora-neurgailu zehatz gisa.Ez aldatu sekuentzia hasierako bi errenkadak eta taularen azpiko azalpen-galdera osatu arte.
Klase-saio batean erabilgarri
#include <Arduino.h>
const int RGB_ROJO = PA8;
const int RGB_VERDE = PA9;
const int RGB_AZUL = PA10;
const int BOTON_1 = PC5; // LOW egoeran aktiboa: sakatuta == LOW
void apagarTodos() {
analogWrite(RGB_ROJO, 0);
analogWrite(RGB_VERDE, 0);
analogWrite(RGB_AZUL, 0);
}
void setup() {
pinMode(BOTON_1, INPUT);
pinMode(RGB_ROJO, OUTPUT);
pinMode(RGB_VERDE, OUTPUT);
pinMode(RGB_AZUL, OUTPUT);
}
void loop() {
bool pulsado = digitalRead(BOTON_1) == TODO_NIVEL_PULSADO; // TODO 1: LOW egoeran aktibo dagoen botoiaren konparazio-maila
int espera = 500;
if (pulsado) {
espera = TODO_ESPERA_RAPIDA_MS; // TODO 2: ikus daitekeen tarte azkarra, ms-tan
}
apagarTodos();
analogWrite(RGB_ROJO, 180);
delay(espera);
apagarTodos();
analogWrite(RGB_VERDE, 180);
delay(espera);
apagarTodos();
analogWrite(RGB_AZUL, 180);
delay(espera);
}
Bete taula programa plakan kargatu eta botoia probatu ondoren. Erabili bi errenkada soilik; utzi gainerakoak hutsik TEACHek gehiago erakusten baditu:
- 1. errenkada: botoia sakatu gabe.
- 2. errenkada: botoia sakatuta.
- digitalRead-ren espero den balioa: idatzi
HIGHedoLOW, sarrera LOW egoeran aktiboa dela kontuan hartuta. - Erabilitako itxaronaldia: idatzi programak aplikatzen duen balioa
ms-tan. - Azalpen laburra: lotu botoiaren egoera eta behatutako abiadura.
| Botoiaren egoera | digitalRead-ren espero den balioa | Erabilitako itxaronaldia ms | Behatutako sekuentzia | Azalpen laburra |
|---|---|---|---|---|
Azaldu nola dakizun botoiak programaren portaera aldatu duela. Erabili bi errenkadak ebidentzia gisa. Ez baduzu aldaketarik ikusi, azaldu zer behatu duzun eta zer egiaztatu beharko litzatekeen.
Aldatu sekuentzia hasierako proben ondoren
10 min
Hasierako bi errenkadak osatu ondoren bakarrik, trukatu lehenengo eta azken koloreen blokeak, sekuentzia urdinez hasi eta gorriz amaitzeko. Ez aldatu itxaronaldiak. Gorde, konpilatu, kargatu eta probatu berriz botoiaren bi egoerak. Erronka honek koloreen ordena eta botoiak kontrolatutako erritmoa arau desberdinak direla egiaztatzen du.
Zein bi kode-bloke mugitu dituzu? Adierazi koloreen ordena berria. B1 sakatu gabe eta sakatuta mantenduta egindako behaketa banarekin, egiaztatu abiaduraren arauak funtzionatzen jarraitzen duen.
Entregatu kodea
10 min
Entregatu azken main.ino fitxategia
Gorde main.ino erantsi aurretik. Kode-kopiak azken bertsioa erakutsi behar du, koloreen ordena aldatuta eta TODO hutsunerik eta TODO hitza daukan iruzkinik gabe.
Zergatik izan daiteke hasieran nahasgarria LOW egoeran aktibo dagoen botoia? Idatzi okerrik ez egiten lagunduko lizukeen arau labur bat.
Bihurtu aurrebista hau klase-saio batean
Jarraitu LabsLand Teach-era ikasgai hau ikasleekin erabiltzeko eta kontuaren sarbidea berrikusteko.
Lehen aldia duzu LabsLand-en? Sortu irakasle-kontua