Created
December 12, 2014 03:31
-
-
Save jasonhejna/9554d707cbac6b60f9af to your computer and use it in GitHub Desktop.
smart nightlight
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
//#include <EEPROM.h> | |
int LDR_Pin = A6; //analog pin 0 | |
int PWM_Pin = 4; | |
void setup(){ | |
//Serial.begin(9600); | |
pinMode(PWM_Pin, OUTPUT); | |
//EEPROM.write(0, 250); | |
//EEPROM.write(1, 15); | |
} | |
//float Stored_Light_On = EEPROM.read(0); | |
unsigned long maintime; | |
unsigned long time; | |
float AVG_Light_On = 340; | |
float AVG_Light_Off = 10; | |
float Light_On_Check; | |
float Light_Off_Check; | |
float AVG_Light_Diff = ((AVG_Light_On - AVG_Light_Off) / 1500) * .50; | |
void loop(){ | |
float LDRReading = analogRead(LDR_Pin); | |
float LDRReading_Low = LDRReading; | |
float LDRReading_High = LDRReading; | |
float Orig_LDRReading = LDRReading * 1.1; | |
maintime = millis() + 1410; | |
while ( millis() < maintime ) { | |
delay(20); | |
float LDRReading = analogRead(LDR_Pin); | |
if(LDRReading < LDRReading_Low){ | |
LDRReading_Low = LDRReading; | |
}else if(LDRReading > LDRReading_High){ | |
LDRReading_High = LDRReading; | |
} | |
float Big_LDRReading_Offset = LDRReading_Low * 1.6; | |
if(LDRReading_High > Big_LDRReading_Offset){ | |
} | |
float Light_Diff = (LDRReading_High - LDRReading_Low) / 1500; | |
if(Light_Diff > 0 && Orig_LDRReading > LDRReading && AVG_Light_Diff < Light_Diff){ | |
TurnOn(); | |
break; | |
} | |
} | |
float LDRReading_Offset = LDRReading_Low * 1.1; | |
float LDRReading_Diff = LDRReading_High - LDRReading_Low; | |
if(LDRReading_Diff > 0 && LDRReading_Offset > LDRReading_High){ //means the value of light hasn't change more than 10% in 1.5 seconds | |
float tmp_AVG_LDRReading = (LDRReading_High + LDRReading_Low) / 2; | |
Serial.println("tmp_avg"); | |
Serial.println(tmp_AVG_LDRReading); | |
//add some code to an inverse of this if statement (runs when we get both low, and high), so we know if the light level is low or high | |
} | |
} | |
void TurnOn(){//MOVE THE LIGHT AND READ THE NEW VALUE ON SERIAL | |
float LDRReading_Before = analogRead(LDR_Pin); | |
//Serial.println(LDRReading_Before); | |
digitalWrite(PWM_Pin, HIGH); | |
float Light_BreakPoint = AVG_Light_On * 0.83; | |
time = millis() + 300000; | |
unsigned long start_time = millis(); | |
while(millis() < time){ | |
delay(20); | |
float three_seconds = millis() - start_time / 3000; | |
if(three_seconds > 1 && three_seconds <= 1.013){ | |
float LDRReading_SOMETHING = analogRead(LDR_Pin); | |
} | |
float LDRReading_On = analogRead(LDR_Pin); | |
if(LDRReading_On > Light_BreakPoint){ | |
break; | |
} | |
} | |
digitalWrite(PWM_Pin, LOW); | |
delay(700); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment