RGB ledi ühendamine ja RGB koodide katsetamine analogWrite abil
Käesolevas juhendis näidatakse, kuidas ühendada värvimuutvat RGB valgusdioodi ning värvide muutmist, kasutades selleks ise defineeritud abifunktsiooni ja analogWrite käsku.
Projekti koostamiseks läheb vaja:
- 1 x UNO mikrokontroller
- 1 x USB kaabel
- 1 x maketeerimislaud
- 1 x RGB LED
- 4 x tavalised üksikud isane-isane juhtmed
- 3 x 330 Ω takisti
Enne komponentide ühendamist tuleb veenduda, et arendusplaat oleks arvuti küljest (ja muudest toidetest) lahti ühendatud.
Algus sarnaneb LED-ide vilgutamise projektile ainult seekord tuleb ühendada LED-i kolm lühemat jalga sarnaselt üksikutele valgusdioodidele, kuna need tähtistavadki ükskuid põhivärvidega LED-e (värviselgitused näidatud eelneval joonisel 64), mille üheaegsel erineva heledusega näitamisel saame luua erinevad värvikombinatsioone. Pesadena tuleb kasutada digitaalpesasid, kus juures on # või ~ märgistus, need pesad võimaldavad pinge muutmist analogWrite käsu abil, selles näites võtame kasutusele 9, 10 ja 11. Kuna tegemist on ühise anoodiga tüüpi RBG LED-iga siis tuleb anood (kõige pikem jalg) ühendada toitega (5 V). Ühendused peaksid sarnanema järgneval joonisel 65 kujutatule.
Nüüd saab avada arenduskeskkonna ja hakata katsetama analogWrite käsu abil värvimängude loomist. Ideid värvide kombineerimiseks saab näiteks leheküljelt: http://www.rapidtables.com/web/color/RGB_Color.htm .
Järgnevas koodiplokis võib näha näidiskoodi, kus defineeritakse abifunktsioon, mis võtab argumentideks põhivärvide tugevused ning segab neid analogWrite käsu abil RGB valgusdioodil. Abifunktsiooni kutsutakse iga sekundi tagant välja erinevate argumentidega, mille tulemuseks on RGB LED-i värvi muutumine 1 sekundi tagant.
//defineerime pesad LED-i jalale vastava värvi järgi int punanepesa = 11; int rohelinepesa = 10; int sininepesa = 9; int sekund = 1000; //defineerime sekundi millisekundites void setup() { //seadistame väljundina pinMode(punanepesa, OUTPUT); pinMode(sininepesa, OUTPUT); pinMode(rohelinepesa, OUTPUT); } void loop() { //kutsume välja abifunktsiooni ning punase/sinise/rohelise tugevust reguleerides katsetame eri värve segaV2rve(255, 0, 0); //punane delay(sekund); //ootame sekundi segaV2rve(0, 255, 0); //roheline delay(sekund); segaV2rve(0, 0, 255); //sinine delay(sekund); segaV2rve(255,255,0); //kollane delay(sekund); segaV2rve(0,255,255); //aqua delay(sekund); segaV2rve(255,0,255); //fuksiaroosa delay(sekund); segaV2rve(0,128,128); //sinakasroheline delay(sekund); segaV2rve(255,255,255); //valge delay(sekund); } //abifunktsioon, millele anname argumendiks punase, rohelise ja sinise tugevuse vastavalt RGB tabelile void segaV2rve(int punane, int roheline, int sinine) { //kuna tegu ühise anoodiga RGB LED-iga, siis tuleb RGB värvikoodide abil soovitud värvi saamiseks argumentide väärtused vastupidiseks muuta punane = 255 - punane; roheline = 255 - roheline; sinine = 255 - sinine; //erinevate värvide saamiseks määrame milline LED millise tugevusega põleb, kasutades analogWrite käsku analogWrite(punanepesa, punane); analogWrite(rohelinepesa, roheline); analogWrite(sininepesa, sinine); }
Parema ettekujutuse parajasti põlevast värvist saab, kui LED-ile ümber panna valgest õhukesest A4 paberist toru.