Teach Urruneko laborategidun ikasgaiak

Teach ikasgaia

STM32 Mbed CodeIDE (4/8): serieko mezuen bidezko arazketa, printf erabiliz

Erabili printf bidezko serie-mezuak STM32 Mbed CodeIDEn, espero den portaera eta benetakoa alderatzeko eta desadostasun bat ebidentziaren arabera zuzentzeko.

  • STM32 Nucleo (Mbed)
  • 55 min
  • Batxilergoa / Elektronikako Lanbide Heziketako hasierako maila
  • eu
  • Embedded systems

Hasi saioa irakasle-kontu batekin klase-saioa prestatzeko. Ikasleak klase-kode batekin sartzen dira.

main.cpp fitxategiko printf-etik Compile eta Upload urratsetara, martxan dagoen STM32ra eta CodeIDEko Console atalera; bertan cycle eta interval_ms eremuak agertzen dira.
STM32 Nucleo (Mbed)

Ikaskuntza-emaitzak

  • printf() erabiltzea martxan dagoen Mbed programa zer egiten ari den aztertzeko.

  • Zenbaki osoak inprimatzea, koma higikorreko formaturik erabili gabe.

  • Serieko irteera erabiltzea erroreak bilatzeko, aldi bakoitzean aldaketa bakarra eginez.

Ikaslearen jardueraren aurrebista

Jardueraren edukia

Aurrebista soilik. Klase-saio batean, ikasleek erantzunak bete eta lana irakasleari bidal diezaiokete.

1

Zertarako balio du serieko irteerak?

8 min

STM32 Mbed CodeIDE ikastaroa · 8 saiotatik 4.a. LED batek ez dizu erakusten kodeak zer balio erabiltzen zituen zerbaitek huts egin duenean. Serie-kontsolak programaren barneko balioak ikusgai jartzen ditu, denboraren edo logikaren desadostasunak aurkitzeko. Inprimatutako denbora benetan behatutakoarekin alderatuko duzu.

Kontrolagailuak ez badu espero bezala jokatzen, serieko irteera lagungarria da: balioak eta programa zein puntutara iritsi den adierazten duten mezuak inprima ditzakezu.

printf("cycle=%d led=%d\n", cycle, led_state);

Mbed programa hauetan, printf() funtzioak martxan dagoen STM32 plakatik CodeIDEko serie-kontsolara bidaltzen du testua. %d bakoitzaren ordez zenbaki oso bat agertzen da, eta \n sekuentziak lerro berria hasten du, irakurketa bakoitza errazago kopiatzeko.

Ikastaro honetan zenbaki osoak erabiliko dituzu serieko irteeran. Laborategiko Mbed konfigurazioak ez du lehenespenez gaitzen printf("%f") bidezko koma higikorreko irteera. Erabili milisegundoak, milivoltak, ehunekoak edo graduak zenbaki oso gisa, dagokion eskala adieraziz.

Serieko irteera CodeIDEko laborategi-ikuspegiaren behealdeko kontsolan agertzen da. CodeIDEk kudeatzen ditu USB serie-konexioa eta komunikazio-abiadura; konpilatu, kargatu eta irakurri inprimatutako lerroak. Programa honetako cycle begiztaren iterazio kopurua da, ez piztu-itzali ziklo osoen kopurua; led, irteerari ezarritako 0/1 balioa; eta interval_ms, mezuak adierazitako tartea milisegundotan. Kopiatu lerroak agertu bezala eta azaldu esanahia euskaraz.

printf mezua CodeIDEko kontsolara iritsi arte

main.cpp fitxategiko printf-etik Compile eta Upload urratsetara, martxan dagoen STM32ra eta CodeIDEko Console atalera; bertan cycle eta interval_ms eremuak agertzen dira.

Compile konpilatzeko da; Upload, plakan kargatzeko. Kargatu ondoren, irakurri CodeIDEren behealdeko Console atala (kontsola): bertan agertzen dira plakak exekutatzen dituen printf() deien mezuak.

Zein egiaztapen da egokiena inprimatutako denbora-balioa benetako portaerarekin bat datorren jakiteko?

2

Erakutsi programak martxan jarraitzen duela

26 min

Aurreikusi bi konpilazio eta laborategiko 22 minutu aktibo inguru: nahita desadostasun bat duen bertsioa eta zuzendutako bertsioa. Ilararik badago, prestatu taula eta bost tarte kronometratzeko metodoa. Ez aldatu 1. bertsioa haren serieko eta kamerako ebidentzia lortu aurretik.

  1. Ireki STM32 Mbed CodeIDE laborategia jarduera honetatik.

  2. Ireki main.cpp.

  3. Ordeztu fitxategia hurrengo programarekin, zehatz-mehatz. Nahita ez datoz bat programatutako itxaronaldia eta haren berri ematen duen mezua; ez zuzendu oraindik.

  4. Gorde, konpilatu okerreko 1. bertsioa eta kargatu.

  5. Ireki edo behatu CodeIDEko serie-kontsola.

  6. Behatu serie-lerroak, eta egiaztatu cycle kontagailua handitzen dela LEDaren egoera aldatzen den bitartean.

  7. Kopiatu gutxienez hiru serie-lerro, programa aldatu aurretik.

  8. Kameran, kronometratu egoera-aldaketen arteko bost tarte jarraian, segundotan: hasi trantsizio batean eta gelditu beste bost trantsizioren ondoren. Zatitu denbora 5ez, tarte bakarraren iraupena estimatzeko.

  9. Mantendu 1. bertsioa taula eta denboraren ebidentzia osatu arte.

Klase-saio batean erabilgarri

#include "mbed.h"

DigitalOut status_led(PB_5, 0);

int main() {
    int cycle = 0;
    const int interval_ms = 500;
    const auto interval = 1000ms;

    printf("STM32 Mbed serial debug start\n");

    while (true) {
        status_led = !status_led.read();
        cycle = cycle + 1;

        printf("cycle=%d led=%d interval_ms=%d\n", cycle, status_led.read(), interval_ms);

        ThisThread::sleep_for(interval);
    }
}

Lehen lerroek honelako itxura izan beharko lukete:

STM32 Mbed serial debug start
cycle=1 led=1 interval_ms=500
cycle=2 led=0 interval_ms=500
cycle=3 led=1 interval_ms=500

Bete hiru errenkada cycle=... lerro desberdinekin; ez erabili hasierako mezua. Itsatsi lerro osoa. Une horretako kamerako portaera eremuan, jaso gutxi gorabehera une berean ikusitako egoera edo aldaketa. Serieko eta kamerako atzerapenak desberdinak izan daitezke; ez aurresuposatu 0/1 balioek beti piztuta/itzalita esan nahi dutenik. Zer adierazten dit eremuan, idatzi ohar labur bat, adibidez «cycle kontagailua bat handitu da» edo «led balioa txandakatu da». Denbora baloratzeko, erabili hurrengo bost tarteen alderaketa. STM32 Mbed serial debug start hasierako mezuak programa abiarazi dela adierazten du.

Serieko ebidentzien taula

Kopiatutako kontsola-lerroa Une horretako kamerako portaera Zer adierazten dit

Okerreko 1. bertsiorako, erantzun hiru lerro hauekin:

  1. Inprimatutako tartea: ... ms
  2. 5 tarterako neurtutako denbora: ... s
  3. Tarte bakarraren kalkulua: (... s / 5) × 1000 = ... ms

Ez proposatu oraindik zuzenketarik.

3

Aurkitu serie-mezuko desadostasuna

13 min

Diagnostikatu 1. bertsioa, serie-lerroa, kamerako neurketa eta kodeko bi denbora-konstanteak erabiliz.

Itsatsi 1. bertsioaren informazio okerra ematen duen serie-lerro bat. Adierazi mezuak dioen tartea eta kameran neurtutakoa, biak unitateekin. Identifikatu bat ez datozen kodeko bi adierazpenak. Ez sartu hemen zuzendutako bertsioaren ebidentzia.

Erantzun ondoren, ordeztu bi denbora-definizioak hurrengo txantiloiarekin. Konpilatzea eragozten duten bi hutsune ditu. Aukeratu 500 ms edo 1000 ms; bi TODOek iraupen bera adierazi behar dute. Bilatu TODO konpilatu aurretik, eta kendu edo berridatzi amaitutako TODO iruzkinak ere.

// 1: serie-lerroan inprimatutako milisegundoak, zenbaki oso gisa.
const int interval_ms = TODO_REPORTED_MS;
// 2: iraupen bera Mbed-en chrono literal gisa, ms atzizkiarekin.
const auto interval = TODO_WAIT_MS;

Gorde, konpilatu 2. bertsioa, kargatu eta errepikatu bost tarteen neurketa metodo berarekin. Zuzendutako ebidentzia jaso ondoren bakarrik, sakatu Marcar práctica como completada (markatu praktika amaitutzat). Kontsolan testurik agertzen ez bada, egiaztatu azken aldaketak gorde, konpilatu eta kargatu dituzula. Mantendu mezu laburrak eta irakurtzeko moduko 500 ms edo 1000 ms-ko erritmoa; ez erabili %f ikastaro honetan.

Zuzendutako 2. bertsiorako, erantzun formatu honekin:

  1. Serie-lerroa: ...
  2. Inprimatutako tartea: ... ms
  3. 5 tarterako neurtutako denbora: ... s
  4. Tarte bakarraren kalkulua: (... s / 5) × 1000 = ... ms
  5. Ondorioa: bat datoz/ez datoz bat kameraren neurketa-ziurgabetasunaren barruan, zeren...
4

Bidali zure kodea

8 min

Erantsi gordetako azken main.cpp fitxategia

Sakatu Comprobar archivos guardados (egiaztatu gordetako fitxategiak), eta ziurtatu main.cpp fitxategiak zuzendu eta kargatu duzun bertsioa duela, TODO markarik gabe. Ondoren, sakatu Adjuntar código guardado (erantsi gordetako kodea) eta Enviar entrega (bidali lana).

Bihurtu aurrebista hau klase-saio batean

Jarraitu LabsLand Teach-era ikasgai hau ikasleekin erabiltzeko eta kontuaren sarbidea berrikusteko.