Upravljanje bojama tipkalima

Što ćemo naučiti:

– Kako koristiti ugnježdene if uvjete
– Kako koristiti varijable za postavljanje stanja izvoda

Zadatak

Nadogradite primjer „PROMJENA BOJA“ tako da na Arduino spojite 3 tipkala kojima ćete moći uključivati i isključivati svaki segment RGB diode. Svako tipkalo upravlja jednim segmentom. Pritiskom na tipkalo pojedini segment se uključuje ako je bio isključen i obratno.

Prikaz spajanja

Arduino kod


int LedCrvena = 6;
int LedZelena = 7;
int LedPlava = 8;
int TipkaloCrvena = 10;
int TipkaloZelena = 11;
int TipkaloPlava = 12;

int StanjeCrvena = LOW;
int StanjeZelena = LOW;
int StanjePlava = LOW;


void setup() {
  pinMode(LedCrvena, OUTPUT);             //postavi izvod LedCrvena (6) kao izlazni
  pinMode(LedZelena, OUTPUT);             //postavi izvod LedZelena (7) kao izlazni
  pinMode(LedPlava, OUTPUT);              //postavi izvod LedPlava (8) kao izlazni
  pinMode(TipkaloCrvena, INPUT_PULLUP);   //postavi izvod TipkaloCrvena (10) kao ulazni
  //i aktiviraj pull-up
  pinMode(TipkaloZelena, INPUT_PULLUP);   //postavi izvod TipkaloZelena (11) kao ulazni
  //i aktiviraj pull-up
  pinMode(TipkaloPlava, INPUT_PULLUP);    //postavi izvod TipkaloPlava (12) kao ulazni
  //i aktiviraj pull-up
}

void loop() {
  //promjena stanja za crveni segment
  if (digitalRead(TipkaloCrvena) == LOW) { //ukoliko je pritisnuto TipkaloCrvena
    if (StanjeCrvena == LOW) {          //ukoliko je prethodno crveni segment bio
      //isključen
      StanjeCrvena = HIGH;              //uključi crveni segment
    } else {                            //inače
      StanjeCrvena = LOW;               //isključi crveni segment
    }
  }

  //promjena stanja za zeleni segment
  if (digitalRead(TipkaloZelena) == LOW) { //ukoliko je pritisnuto TipkaloZelena
    if (StanjeZelena == LOW) {          //ukoliko je prethodno zeleni segment bio
      //isključen
      StanjeZelena = HIGH;              //uključi zeleni segment
    } else {                            //inače
      StanjeZelena = LOW;               //isključi zeleni segment
    }
  }

  //promjena stanja za plavi segment
  if (digitalRead(TipkaloPlava) == LOW) { //ukoliko je pritisnuto TipkaloPlava
    if (StanjePlava == LOW) {           //ukoliko je prethodno plavi segment bio
      //isključen
      StanjePlava = HIGH;               //uključi plavi segment
    } else {                            //inače
      StanjePlava = LOW;                //isključi plavi segment
    }
  }

  //postavljanje stanja na segmente
  digitalWrite(LedCrvena, StanjeCrvena);  //postavi crveni segment u stanje LedCrvena
  digitalWrite(LedZelena, StanjeZelena);  //postavi zeleni segment u stanje LedZelena
  digitalWrite(LedPlava, StanjePlava);    //postavi plavi segment u stanje LedPlava
}