Kontrollerbar RGB diod
Jag har byggt en krets där man kan vrida tre reglage som kontrollerar respektive färg på en RGB diod (Red, Green, Blue).
Varje potentiometer (de tre runda reglagen) styr en färg på RGB dioden. En potentiometer är en typ av motstånd (som en resistor). Skillnaden mellan potentiometer och en resistor är att en potentiometer är ett reglerbart motstånd dvs. det går att ändra på hur mycket motstånd den gör.
I det här fallet läser jag av pinnen på potentiometern för motståndet och matar in det i en analog pin på min arduino.
Ett RGB värde kan bara vara mellan 0 och 255., min potentiometer ger ett värde mellan 0 och 1023. Det blir lite problematiskt. När potentiometern har blivit vriden 1/4 är jag redan uppe i 255. Det blir ganska besvärligt. Som tur var kan jag “reglera” värdet mellan två andra världen med hjälp av min arduino.
map(analogRead(A0), 0, 1023, 255, 0);
Det här blocket “kartlägger” värdet av min potentiometer mellan 255 och 0. Anledningen till varför jag har skrivit in mellan 255 och 0 istället för tvärtom är för att värdet av potentiometern ska gå upp när jag vrider den åt höger istället för nedåt.
Nu har jag ett värde jag kan ge min RGB diod utan problem! Jag börjar med att sätta variabeln “redValue” till värdet av mitt map block.
Sen är det bara att skicka värdet till en PWM (Power Width Modulation) pin, i mitt fall har jag valt pin ~11.
Varje iteration av min loop ger nu potentiometerns värde till RGB diodens pin för den röda delen. Allt jag behöver göra nu är att repetera det här för alla tre färger.
Block kod:
C kod:
int redValue = 0;
int greenValue = 0;
int blueValue = 0;
void setup() {
pinMode(A2, INPUT);
pinMode(A1, INPUT);
pinMode(A0, INPUT);
pinMode(11, OUTPUT);
pinMode(10, OUTPUT);
pinMode(9, OUTPUT);
}
void loop() {
/*
* Reads the values from the analog pins
* for R, G and B.
* Then it maps each value between 0 and 255 since
* RGB values are 8-bit values.
*/
redValue = map(analogRead(A2), 0, 1023, 255, 0);
greenValue = map(analogRead(A1), 0, 1023, 255, 0);
blueValue = map(analogRead(A0), 0, 1023, 255, 0);
/*
* Writes R,G,B values to corresponding pin.
* pin 11 - R
* pin 10 - G
* pin 9 - B
*/
analogWrite(11, redValue);
analogWrite(10, greenValue);
analogWrite(9, blueValue);
delay(10); // Delay a little bit to improve simulation performance (Tinkercad)
}