#define rLedPin 6
#define gLedPin 5
#define bLedPin 3
#define irSensorPin 8
#define lightSensorPin A0
int ledR=0;
int ledG=0;
int ledB=0;
bool irReaded;
int LDRReaded;
int maxRVal=125;
int maxGVal=200;
int maxBVal=33;
int minRVal=39;
int minGVal=95;
int minBVal=11;
int breathStep=10;
int breathStepDelay=18;
bool breatheOnOff=0;
bool onOffState;
bool debugOn=0;
void setup() {
pinMode(rLedPin,OUTPUT);
pinMode(gLedPin,OUTPUT);
pinMode(bLedPin,OUTPUT);
pinMode(irSensorPin, INPUT);
if(debugOn){
Serial.begin(9600);
Serial.println("Welcome to Taichi-Maker RGB led Night-Light");
}
if(minRVal>maxRVal , minGVal>maxGVal , minBVal>maxBVal){
while(true){
analogWrite(rLedPin,255);
delay(500);
analogWrite(rLedPin,0);
delay(500);
Serial.begin(9600);
Serial.println("BadLED Settings!!!");
}
}
}
void loop() {
LDRReaded = analogRead(lightSensorPin);
irReaded = digitalRead(irSensorPin);
if(LDRReaded >= 880 && irReaded == HIGH)
{
if(onOffState==0)fadeUp(maxRVal,maxGVal,maxBVal);
onOffState=1;
if(breatheOnOff==1)ledBreathe();
}
else
{
if(onOffState==1)fadeDown(0,0,0);
onOffState=0;
}
if(debugOn)
{
Serial.print("irSensorPin");Serial.println(irReaded);
Serial.print("lightSensorPin");Serial.println(LDRReaded);
delay(100);
}
}
void fadeUp(int rTopVal,int gTopVal,int bTopVal){
while(ledR<rTopVal , ledG<gTopVal , ledB<bTopVal){
if(ledR+breathStep<rTopVal){
ledR+=breathStep;
analogWrite(rLedPin,ledR);
}else{
ledR=rTopVal;
analogWrite(rLedPin,ledR);
}
if(ledG+breathStep<gTopVal){
ledG+=breathStep;
analogWrite(gLedPin,ledG);
}else{
ledG=gTopVal;
analogWrite(gLedPin,ledG);
}
if(ledB+breathStep<bTopVal){
ledB+=breathStep;
analogWrite(bLedPin,ledB);
}else{
ledB=bTopVal;
analogWrite(bLedPin,ledB);
}
delay(breathStepDelay);
if(debugOn){
Serial.print("rVal=");Serial.println(ledR);
Serial.print("gVal=");Serial.println(ledG);
Serial.print("bVal=");Serial.println(ledB);
}
}
}
void fadeDown(int rBottomVal,int gBottomVal,int bBottomVal){
while(ledR<rBottomVal , ledG<gBottomVal , ledB<bBottomVal){
if(ledR-breathStep>rBottomVal){
ledR-=breathStep;
analogWrite(rLedPin,ledR);
}else{
ledR=rBottomVal;
analogWrite(rLedPin,ledR);
}
if(ledG-breathStep>gBottomVal){
ledG-=breathStep;
analogWrite(gLedPin,ledG);
}else{
ledG=gBottomVal;
analogWrite(gLedPin,ledG);
}
if(ledB-breathStep>bBottomVal){
ledB-=breathStep;
analogWrite(bLedPin,ledB);
}else{
ledB=bBottomVal;
analogWrite(bLedPin,ledB);
}
delay(breathStepDelay);
if(debugOn){
Serial.print("rVal=");Serial.println(ledR);
Serial.print("gVal=");Serial.println(ledG);
Serial.print("bVal=");Serial.println(ledB);
}
}
}
void ledBreathe(){
fadeDown(minRVal,minGVal,minBVal);
fadeUp(maxRVal,maxGVal,maxBVal);
}