Reguliuojamas RGB LED'as

 

Kuo gi RGB LED'as skiriasi nuo mono LED'ų? Mono tai vienos spalvos LED'ai: raudoni, žali, mėlyni, geltoni, balti ir t.t. RGB LED'as tai tarsi vienas paketas, susidedantis iš viduje esančių 3 skirtingų LED'ų: raudono, žalio ir mėlyno. Reikia atkreipti dėmesį, kad yra LED'ai turintys bendrą katodą ir LED'ai turintys bendrą anodą. Šiuo atveju mes naudosime RGB LED'ą, turintį bendrą anodą. Dabar mes jau žinome kaip valdyti skaitmeninius išėjimus, kaip perskaityti šokinėjančias reikšmes, kaip naudoti PWM LED‘ų ryškumui keisti. Pasinaudodami šiomis žiniomis, galime pasiėmę RGB LED‘ą, surinkti grandinę ir parašyti kodą, kuris galėtų kontroliuoti RGB LED‘o spalvas bei jų ryškumą. Mums reikės šių priemonių:

1. Uno plokštės.

2. 1 x RGB LED'o.

3. 3 x 100 omų varžų.

4. 1 x montažinės plokštės.

5. Laidų.

 

Surinkite grandinę pagal žemiau pateiktą schemą. Šįkart duodu tik schematinį vaizdą.

21

 

Kas gi vyksta šiame kode? Kaip matote cikluose for yra keičiamas kiekvienos spalvos intensyvumas didinant po 25. Tokiu būdu mes gauname daug skirtingų spalvų.

 

Patobulinkime šią grandinę. Pridėkime mygtuką, kurį paspaudus pasikeistų spalva ir lauktų mūsų kito paspaudimo. Naudosime įprastą katodinį LED‘ą. Tai reiškia, kad LED‘as turės 4 kojeles. Katodas šiuo atveju bus tik vienas, nes jo pilnai užtenka visiems 3 diodams. Likusios 3 kojelės yra anodai, priklausantys skirtingų spalvų diodams. Kad galėtume valdyti ryškumą, mums reikia visus anodus prijungti prie PWM išėjimų. Būtinai naudokite varžas, kad nesudegindumėte LED‘o.

3

 

Jūs galite sukonfigūruoti šokinėjančio tipo mygtuko darbo ciklą, kuris keistų spalvas, kiekvieną kartą jį paspaudus. Kad tai daryti būtų patogiau, galite susikurti papildomą funkciją, kuri pakeičia būsenas. Žemiau esanti programa turi 7 spalvų būsenas, plius vieną papildomą. Naudojantis analogWrite() funkcija, jūs galite pasirinkti įvairias spalvų maišymo kombinacijas. Skirtingai nuo praeitos pamokos, čia būsenos skaitliukas yra didinamas kol praeinamos visos spalvų būsenos ir tada jis yra nunulinamas. Nusiuntę šią programą į Arduino, galite stebėti kaip keičiasi spalvos. Kombinacijas galima kurti ir savo, nebūtinai naudoti čia nurodytas.

 

const int BLED=9; //Mėlynas LED'as
const int GLED=10; //Žalias LED'as
const int RLED=11; //Raudonas LED'as
const int BUTTON=2; //Mygtukas
boolean lastButton = LOW; //Paskutinė mygtuko būsena
boolean currentButton = LOW; //Dabartinė būsena
int ledMode = 0; //Ciklo eilė tarp LED'o būsenų


void setup()
{
   pinMode (BLED, OUTPUT);
   pinMode (GLED, OUTPUT);
   pinMode (RLED, OUTPUT);
   pinMode (BUTTON, INPUT);
}

 

/*
* šokinėjimo panaikinimo funkcija
*/

boolean debounce(boolean last)
{
   boolean current = digitalRead(BUTTON); //Skaitom mygtuko būseną
   if (last != current) //jeigu skiriasi...
   {
      delay(5); //wait 5ms
      current = digitalRead(BUTTON); //skaitom vėl
   }
return current; //grąžinam reikšmę
}

 

/*
* LED'o būsenos nustatymas
*/

void setMode(int mode)
{
   //Raudona
   if (mode == 1)
   {
      digitalWrite(RLED, HIGH);
      digitalWrite(GLED, LOW);
      digitalWrite(BLED, LOW);
   }
   //Žalia
   else if (mode == 2)
   {
      digitalWrite(RLED, LOW);
      digitalWrite(GLED, HIGH);
      digitalWrite(BLED, LOW);
   }
   //Mėlyna
   else if (mode == 3)
   {
      digitalWrite(RLED, LOW);
      digitalWrite(GLED, LOW);
      digitalWrite(BLED, HIGH);
   }
   //Raudona + mėlyna
   if (mode == 4)
   {
      analogWrite(RLED, 127);
      analogWrite(GLED, 0);
      analogWrite(BLED, 127);
   }
   //Mėlyna + žalia
   else if (mode == 5)
   {
      analogWrite(RLED, 0);
      analogWrite(GLED, 127);
      analogWrite(BLED, 127);
   }
   //Žalia + raudona
   else if (mode == 6)
   {
      analogWrite(RLED, 127);
      analogWrite(GLED, 127);
      analogWrite(BLED, 0);
   }
   //Visos spalvos = balta
   else if (mode == 7)
   {
      analogWrite(RLED, 85);
      analogWrite(GLED, 85);
      analogWrite(BLED, 85);
   }
   //išjungtos spalvos
   else
   {
      digitalWrite(RLED, LOW);
      digitalWrite(GLED, LOW);
      digitalWrite(BLED, LOW);
   }
}
void loop()
{
   currentButton = debounce(lastButton); //skaitom šokinėjimo būseną
   if (lastButton == LOW && currentButton == HIGH)
   {
      ledMode++; //didinam LED'o reikšmė
   }
   lastButton = currentButton;
   if (ledMode == 8) ledMode = 0; //pasiekus 8 būseną, grąžinam į 0
      setMode(ledMode); //keičiam LED'o būseną
}

 

Gali atrodyti, kad kodas ilgas ir sudėtingas, bet čia nėra nieko naujo ko nebūtume naudoję praeitose pamokose. 

 

 

Add comment

Security code
Refresh