›_ ebskola.lv
← 2.4

2.5 Noslēguma projekts: Reakcijas spēle

Stundas uzdevums: Izveidot Arduino reakcijas spēli, apvienojot iepriekš apgūto LED izvadi, pogas ievadi, if/else, mainīgos un Serial Monitor rezultātu izvadi.

D.7.1.1. Sintakse un mainīgie D.7.2.1. Elektriskā ķēde D.7.3.1. Signāli un loģika D.7.6.1. Komponenšu integrācija

Priekšzināšanu robeža: uzdevumos izmanto tikai iepriekš apgūto un šīs lapas teorijas/koda piemēros parādīto. Ja parādās jauna komanda vai rīks, vispirms atrod tās paraugu teorijas blokā.

Teorija: reakcijas spēle no LED, pogas un laika mērījuma

Spēle sākas, kad spēlētājs ar pirmo pogas piespiedienu signalizē "esmu gatavs". LED diode pēc nejauša laika (1–4 sekundes) iedegas zaļa. Spēlētājam jānospiež otra poga pēc iespējas ātrāk. Mikrokontrolieris izmēra reakcijas laiku milisekundēs un pārraida to caur sērijas portu (Serial Monitor). Pēc 3 raundiem tiek aprēķināts vidējais reakcijas laiks. Ja spēlētājs nospiež pogu pirms LED iedegas - fiksēts false start.

unsigned long sakums = millis();

if (digitalRead(POGA_REAGE) == LOW) {
  unsigned long reakcija = millis() - sakums;
  Serial.println(reakcija);
}
Jaunais fragments ir skaidrots pirms uzdevuma: millis() atgriež laiku kopš programmas palaišanas.

70 min plāns: shēma un mainīgie ~20 min, spēles loģika ~30 min, rezultātu aprēķins un tests ~20 min.

Darba uzdevuma gaita

1. solis: Shēma un mainīgie (1. līmenis)

  1. Saslēdz uz maketo plates: zaļo LED ar 220Ω rezistoru pie pin 9, divas spiedpogas pie pin 2 un pin 3 (ar INPUT_PULLUP).
  2. Pirmajā setup() daļā nodefinē mainīgos: const int LED = 9;, const int POGA_START = 2;, const int POGA_REAGE = 3;.
  3. Pievieno Serial.begin(9600);, lai varētu redzēt rezultātus datorā.
  4. Izveido funkciju iededz_led() un nodzes_led() - abas tiek izsauktas no loop().

2. solis: Spēles loģika ar nejaušību (2. līmenis)

  1. Funkcijā loop() gaidi, līdz tiek nospiesta START poga (LOW signāls).
  2. Pievieno nejaušu pauzi: delay(random(1000, 4001)); - Arduino gaidīs no 1 līdz 4 sekundēm.
  3. Iededz LED un saglabā laiku ar unsigned long sakums = millis();.
  4. Gaidi otrās pogas nospiešanu un aprēķini reakciju: laiks = millis() - sakums;.
  5. Izvadi rezultātu: Serial.print("Reakcija: "); Serial.print(laiks); Serial.println(" ms");.

3. solis: Vidējais rezultāts un false start (3. līmenis)

  1. Pievieno for ciklu, kas izpilda 3 raundus.
  2. Saglabā katra raunda laiku masīvā int laiki[3];.
  3. Pēc cikla aprēķini vidējo: summa / 3 un izvadi to.
  4. Pievieno pārbaudi: ja spēlētājs nospiež pogu, kamēr LED vēl nav iedegusies - paziņo "FALSE START!" un sāc raundu no jauna.
  5. Pārbaudi visus iespējamos scenārijus.

Papildus uzdevums: skaņas signāls

Pievieno buzzer elementu, kas īsi nopīkst pie starta vai false start. Šis uzdevums nav nepieciešams pamata vērtējumam.

Biežākās kļūdas (un kā tās labot)

Vērtēšanas kritēriji

Kritērijs Sācis (1-3) Turpina (4-6) Apguvis (7-8) Padziļināti (9-10)
Shēma Pieslēgumi nestabili vai īssavienojumā. Shēma darbojas, bet vadi haotiski. Stabila shēma, loģisks vadu izkārtojums. Izcils kabeļu menedžments, krāsu kodējums (sarkans/melns).
Programmēšana un mainīgie Sintakses kļūdas, kods nekompilējas. Kods strādā, bet bez mainīgajiem (cietkodēti skaitļi). Lieto mainīgos un funkcijas, kods bez kļūdām. Patstāvīgi izveidotas papildu funkcijas, kods optimizēts.
Spēles loģika Reakcija netiek mērīta. Mēra laiku, bet rezultāti neuzkrājas. 3 raundi un vidējais aprēķins darbojas. Pievienota false-start pārbaude un papildu uzlabojumi.
Izpratne Nespēj paskaidrot koda darbību. Pamatkomandas paskaidrojamas, bet loģika apjucīga. Pilnībā izprot savu kodu un shēmu. Brīvi modificē kodu pēc lūguma, palīdz citiem.

Pašpārbaudes saraksts

⬅ Iepriekšējā stunda Tēmas apkopojums ➡