Prvi koraki v Arduino – kdo bo hitrejši?
Milan
Gaberšek in Slavko Kocijančič
Predstavljena je napravica, s pomočjo katere boste ugotovili, kdo je hitrejši oziroma kdo ima hitrejši refleks. Igra se začne tako, da nekdo od dveh tekmovalcev, še bolje kdo tretji, pridrži tipko za začetek. Na tri, štiri, zdaj tipko izpusti, in vklopi se časovnik, ki čaka naključno dolgo časa. Ko obe lučki zasvetita, se tekma začne. Zmaga tisti, ki prvi pritisne tipko in s tem ugasne lučko. Tudi tokrat bomo nalogo rešili s krmilnikom Arduino, tipkami in svetlečimi diodami.
Programsko kodo si lahko preko kopiraj/prilepi prenesete v Arduino IDE, da vam ne bo treba pretipkavati kode.
// // Program Arduino - Kdo bo hitrejši //
// Nastavitev spremenljivk na ustrezne // pine D3, D5, D6, D7 in D8 // za tipke in svetleči diodi const int tipkaZ = 3; const int tipka1 = 5; const int led1 = 6; const int tipka2 = 7; const int led2 = 8;
// Spremenljivke boolean // lahko postavimo na true boolean bNobenaTipka = true; // Privzeto so vrednosti false boolean bIgralec1; boolean bIgralec2;
// Ob vklopu nastavimo krmilnik Arduino void setup() { pinMode(led1, OUTPUT); pinMode(led2, OUTPUT); pinMode(tipkaZ, INPUT_PULLUP); pinMode(tipka1, INPUT_PULLUP); pinMode(tipka2, INPUT_PULLUP); }
// Spremljaj krmilnik Arduino void loop() { // Z zanko while čakamo, da nekdo // pritisne na tipko tipkaZ, // torej da ni več HIGH while ( digitalRead(tipkaZ) == HIGH){}; // LEDici izklopimo digitalWrite(led1, LOW); digitalWrite(led2, LOW); // Z zanko while čakamo, da je tipkaZ // izpuščena, torej da ni več v stanju LOW while ( digitalRead(tipkaZ) == LOW) {}; // Izberi naključno število med 3000 in 6000 // ter čakaj izbrano milisekund delay( random(3000,6000) ); // Vklopimo LEDici digitalWrite(led1, HIGH); digitalWrite(led2, HIGH); // Ponavljaj, dokler je bNobenaTipka true while (bNobenaTipka == true) { // Preberi stanje tipk obeh igralcev, // pri čemer je ta ob pritisku false, // drugače true bIgralec1 = digitalRead(tipka1); bIgralec2 = digitalRead(tipka2); // Ob prisitku tipke kateregakoli igralca // postane bNobenaTipka false (logični in) bNobenaTipka = bIgralec1 && bIgralec2; }
// Glede na stanje spremenljivk bIgralec1 // in bIgralec2 določimo zmagovalca digitalWrite(led1, bIgralec1); digitalWrite(led2, bIgralec2); // Pripravimo se za novo igro bNobenaTipka = true; } //konec Loop
|