drti

Prvi koraki v Arduino – semafor za pešce s stikalom

Ko se kot pešec približamo prehodu za pešce, običajno pritisnemo tipko. S tem sprožimo časovnik, ki čez čas izklopi rdečo in vklopi zeleno luč. Ta sveti nekaj časa, nato pa se ponovno zasveti rdeča luč. V prispevku bomo s pomočjo krmilnika Arduino sestavili tako vezje in napisali program, da bo oponašal delovanje pravega semaforja. Še več, lahko bomo celo nastavili, koliko časa po pritisku tipke naj še sveti rdeča ter koliko časa zelena luč.

Programi za okolje Arduino IDE, ki so sestavni del v članku revije TIM, avtorja Milan Gaberšek in Slavko Kocijančič.

__________________________________________________________________________________________________________________

//
// Program Arduino semafor s tipko za pešce - TEST
//
 
// Rdeča LED bo na nožici D2
const int ledRdeca = 2;
// Tipka bo na nožici D5
const int tipka = 5;
 
 
void setup() {
  pinMode(ledRdeca, OUTPUT);
  // Uporabili bomo notranji upornik pull-up,
  // zato ne potrebujemo zunanjega upora,
  // s čimer je vezava enostavnejša
  pinMode(tipka, INPUT_PULLUP);
}
 
void loop() {
  // Zaradi uporabe pull-up upora
  // je tipka ob pritisku v stanju LOW,
  // drugače HIGH, kar je nenavadno
  if (digitalRead(tipka)) {
    // Izklopi LED
    digitalWrite(ledRdeca, LOW);
  } else {
    // Vklopi LED
    digitalWrite(ledRdeca, HIGH);
  }
} //konec programa
 

 

//
// Program Arduino semafor s tipko za pešce z ukazom NOT
//
 
// Rdeča LED bo na nožici D2
const int ledRdeca = 2;
// Tipka bo na nožici D5
const int tipka = 5;
 
 
void setup() {
  pinMode(ledRdeca, OUTPUT);
  pinMode(tipka, INPUT_PULLUP);
}
 
void loop() {
  // Z ukazom "not" poenostavimo programiranje 
  // tipke z notranjim prilagoditvenim pull-up uporom
  if ( not( digitalRead(tipka) ) ) {
    digitalWrite(ledRdeca, HIGH);
  } else {
    digitalWrite(ledRdeca, LOW);
  }
} //konec programa
 

 

// Program Arduino semafor  s tipko za pešce
//
 
// Rdeča LED bo na nožici D2
const int ledRdeca = 2;
// Zelena LED bo na nožici D3
const int ledZelena = 3;
// Tipka bo na nožici D5
const int tipka = 5;
 
 
void setup() {
  pinMode(ledRdeca, OUTPUT);
  pinMode(ledZelena, OUTPUT);
  pinMode(tipka, INPUT_PULLUP);
}
 
void loop() {
  if ( not( digitalRead(tipka) ) ) {
    // Po pritisku tipke počakaj 4 sekunde
    delay(4000);
    // Vklopi zeleno luč in počakaj 8 sekund
    digitalWrite(ledRdeca, LOW);
    digitalWrite(ledZelena, HIGH);
    delay(8000);
  } else {
    // Vklopljena rdeča luč (tipka izklopljena)
    digitalWrite(ledRdeca, HIGH);
    digitalWrite(ledZelena, LOW);
  }
} //konec programa