drti

Prvi koraki v Arduino – kdo bo hitrejši?

 

Milan Gaberšek in Slavko Kocijančič , članek v reviji TIM, številka 4, letnik 2019/20

 

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