Ručno upravljanje promjenom boja RGB diode

Što ćemo naučiti:

– Mijenjati intezitet boja RGB diode pomoću tipkala

Zadatak

Na izvode mikrokontrolera s mogućnošću pulsno-širinske modulacije spojite RGB svjetleću diodu. Na mikrokontroler također spojite šest tipkala. Napišite program koji će s prvim i drugim tipkalom upravljati jačinom svjetlosti crvenog segmenta RGB diode. Kada korisnik pritisne prvo tipkalo intenzitet se povećava za 5, a kada pritisne drugo tipkalo intenzitet se smanjuje za 5. Pomoću trećeg i četvrtog tipkala na isti se način upravlja sa jačinom svjetlosti zelenog segmenta, dok se pomoću petog i šestog tipkala upravlja jačinom svjetlosti plavog segmenta RGB diode.

Prikaz spajanja

Arduino kod


int ledR = 3;                            //definiraj ledR = 3
int ledG = 4;                           //definiraj ledG = 4
int ledB = 5;                           //definiraj ledB = 5
int tpk1 = 6;                     //definiraj tpk1 = 6
int tpk2 = 7;                     //definiraj tpk2 = 7
int tpk3 = 8;                   //definiraj tpk3 = 8
int tpk4 = 9;                   //definiraj tpk4 = 9
int tpk5 = 10;                    //definiraj tpk5 = 10
int tpk6 = 11;                    //definiraj tpk6 = 11
int jacinaR = 0;                  //definiraj jacinaR = 0
int jacinaG = 0;                  //definiraj jacinaG = 0
int jacinaB = 0;                  //definiraj jacinaB = 0

void setup() {
  pinMode(ledR, OUTPUT);          //postavi izvod ledR kao izlazni
  pinMode(ledG, OUTPUT);                //postavi izvod ledG kao izlazni
  pinMode(ledB, OUTPUT);                //postavi izvod ledB kao izlazni
  pinMode(tpk1, INPUT_PULLUP);    //postavi izvod tpk1 kao ulazni
  pinMode(tpk2, INPUT_PULLUP);    //postavi izvod tpk2 kao ulazni
  pinMode(tpk3, INPUT_PULLUP);    //postavi izvod tpk3 kao ulazni
  pinMode(tpk4, INPUT_PULLUP);    //postavi izvod tpk4 kao ulazni
  pinMode(tpk5, INPUT_PULLUP);    //postavi izvod tpk5 kao ulazni
  pinMode(tpk6, INPUT_PULLUP);    //postavi izvod tpk6 kao ulazni
  digitalWrite(ledR, HIGH);             //isključi crveni segment-početno stanje
  digitalWrite(ledG, HIGH);             //isključi zeleni segment-početno stanje
  digitalWrite(ledB, HIGH);             //isključi plavi segment-početno stanje
}

void loop() {
  if (digitalRead(tpk1) == LOW) { //ukoliko je pritisnuto tipkalo 1
    if (jacinaR >= 5) {           //ukoliko je jacinaR veća ili jednaka 5
      jacinaR = jacinaR - 5;      //smanji jačinu za 5
    }
  }
  if (digitalRead(tpk2) == LOW) { //ukoliko je pritisnuto tipkalo 2
    if (jacinaR <= 250) {         //ukoliko je jacinaR manja ili jednaka 5
      jacinaR = jacinaR + 5;      //pojačaj jačinu za 5
    }
  }

  if (digitalRead(tpk3) == LOW) { //ukoliko je pritisnuto tipkalo 3
    if (jacinaG >= 5) {           //ukoliko je jacinaG veća ili jednaka 5
      jacinaG = jacinaG - 5;      //smanji jačinu za 5
    }
  }
  if (digitalRead(tpk4) == LOW) { //ukoliko je pritisnuto tipkalo 4
    if (jacinaG <= 250) {         //ukoliko je jacinaR manja ili jednaka 5
      jacinaG = jacinaG + 5;      //pojačaj jačinu za 5
    }
  }

  if (digitalRead(tpk5) == LOW) { //ukoliko je pritisnuto tipkalo 5
    if (jacinaB >= 5) {           //ukoliko je jacinaB veća ili jednaka 5
      jacinaB = jacinaB - 5;      //smanji jačinu za 5
    }
  }
  if (digitalRead(tpk6) == LOW) { //ukoliko je pritisnuto tipkalo 6
    if (jacinaB <= 250) {         //ukoliko je jacinaB manja ili jednaka 5
      jacinaB = jacinaB + 5;      //pojačaj jačinu za 5
    }
  }

  analogWrite(ledR, 255 - jacinaR); //postavi crveni segment na 255-jacinaR
  analogWrite(ledG, 255 - jacinaG); //postavi zeleni segment na 255-jacinaG
  analogWrite(ledB, 255 - jacinaB); //postavi plavi  segment na 255-jacinaB

  delay(100);                       //čekaj 100 ms
}