RGB 3色フルカラーLEDの明るさと色をランダムに変えながら点灯させる
前回は各色の明るさを 0から255までの256段階を連続的に変化させ
明るさと色を変化させましたが、今回は 0から255の値をランダムに変化
させることにより、色と明るさを変化させてみました。
更に、ランダムに変更される値をシリアル・プリントで確認できるようにしました。
接続図は前回と全く同じです。
スケッチ
/*RGB3色LEDを各色順番に点灯
各色の明るさはランダムに変化する
点灯はフェードイン/フェードアウトで行う
シリアル・プリントでrandNumberの値を読む
*/
const int ledrPin = 9; //ピン9LED赤を接続
const int ledbPin = 10; //ピン10LED青を接続
const int ledgPin = 11; //ピン11LED緑を接続
int randNumber = 0; //LEDの明るさを設定する変数
void setup () {
pinMode(ledrPin, OUTPUT); //LEDピンを出力に設定
pinMode(ledbPin, OUTPUT);
pinMode(ledgPin, OUTPUT);
Serial.begin(9600);
}
void loop () {
//色の選択 0 = 赤: 1 = 青: 2 = 緑
for(int j = 0; j <= 2; j++) {
if( j == 0) {
//赤をフェードインで点灯
randNumber = random(0,110);
Serial.println(randNumber);
for(int i = 0; i <= randNumber; i++) {
analogWrite(ledrPin,i);
delay(30);
}
//色の選択 0 = 赤: 1 = 青: 2 = 緑
}else if( j == 1) {
//青をフェードインで点灯
randNumber = random(40);
Serial.println(randNumber);
for(int i = 0; i <= randNumber; i++) {
analogWrite(ledbPin,i);
delay(30);
}
} else {
//緑をフェードインで点灯
randNumber = random(256);
Serial.println(randNumber);
for(int i = 0; i <= randNumber; i++) {
analogWrite(ledgPin,i);
delay(30);
}
}
}
}
シリアルプリント画面
RGB 3色フルカラーLEDの明るさを半固定抵抗(VR)で調整し点灯させる
アナログ入力端子に半固定抵抗器(VR)を接続し入力された電圧値をanalogRead読み、
それを 0から255の値に変換することによりLEDの明るさを調整する。
各色とも同じ回路、同じスケッチで動作させ3個のVRで明るさと色を自由に変えることができます。
接続図
スケッチ
/*RGB3色LEDを半固定抵抗(VR)で各色の調整をする*/
const int ledrPin = 9; //ピン9LED赤を接続
const int ledbPin = 10; //ピン10LED青を接続
const int ledgPin = 11; //ピン11LED緑を接続
const int vrrPin = 0; //ピン0にVR(赤)を接続
const int vrbPin = 1; //ピン1にVR(青)を接続
const int vrgPin = 2; ///ピン2にVR(緑)を接続
void setup () {
pinMode(ledrPin, OUTPUT); //LEDピンを出力に設定
pinMode(ledbPin, OUTPUT);
pinMode(ledgPin, OUTPUT);
}
void loop () {
//vrrPinの値ををvluerに読み取り
//vluerをmapにより intensityr(0~255)に変換
//intensityrの値でledrを点灯
int valuer = analogRead(vrrPin);
int intensityr = map(valuer, 0, 1023, 0, 255);
analogWrite(ledrPin,intensityr);
//vrbPinの値ををvluebに読み取り
//vluebをmapにより intensityb(0~255)に変換
//intensitybの値でledbを点灯
int valueb = analogRead(vrbPin);
int intensityb = map(valueb, 0, 1023, 0, 255);
analogWrite(ledbPin,intensityb);
//vrgPinの値ををvluegに読み取り
//vluegをmapにより intensityg(0~255)に変換
//intensitygの値でlegrを点灯
int valueg = analogRead(vrgPin);
int intensityg = map(valueg, 0, 1023, 0, 255);
analogWrite(ledgPin,intensityg);
}
ボード