- Removed : TIP120
- Removed : LED Ring
- Added : 4 Super bright LED
- Added : A USB connector
To reduce size and cost, I removed the LED Ring and use 4 LED instead. Since this doesn't need too much power I removed the TIP120.
I added a USB connector so they can charge a MP3 player on it.
How it works:
- Red button activate the reading time and the LEDs
- After 15 minutes the LEDs blink and the buzzer alert that it's time to stop reading
- The 4 LEDs slowly fade until Off (set to 90 minutes)
- The blue button reset the Fade Off to 90 minutes.
Next steps :
- Modification to the USB connector to help charging devices (some need the data line)
- Code modification
- Maybe a reset switch or I will use the 2 buttons at the same time.....
Code:
/*
TimedFader
Will wait for X minutes before fading the Output
Nicolas Gravel
nicgravel@gmail.com
V. 1.0.2
July 3rd, 2011
*/
// constants won't change. They're used here to
// Use only ATtiny85 or Arduino pins initialisation
// set pin numbers: ATtiny85
const int MainLED = 0; // Main LED + TIP120 for External light
const int Buzzer = 1; // Piezo
const int Button1 = 2; // Main button Start the waiting time before Fading Time
const int StatusLED = 3; // Heartbeat LED
const int Button2 = 4; // Start or Reset the Fading Timer.
// Set pin number : Arduino
/*
const int MainLED = 11; // Main LED + TIP120 for External light
const int Buzzer = 12; // Piezo
const int Button1 = 7; // Main button Start the waiting time before Fading Time
const int StatusLED = 13; // Heartbeat LED
const int Button2 = 8; // Start or Reset the Fading Timer.
*/
// 5minutes=300, 15 minutes=900, 60 minutes=3600, 90minutes=5400, 120minutes=7200
// variables will change:
int TimeToWait = 900; // -> How many seconds before the FadeOut will start <- Can be adjust
int TimeFade = 5400; // -> On how many seconds the FadeOut will be <- Can be adjust
int TimeWait = -5; // Waiting Timer
int TimeFadeLeft = 0; // Time Left in the FadeOut process
int Interval = 5000; // HeartBeat delay
long PreviousMillis = 0; // will store last time we enter the Loop ( each second)
int Ledstate = LOW; // Used for the Hartbeat LED. This help for blink from Mostly ON or OFF
void setup() {
// initialize the OUTPUT pin:
pinMode(MainLED, OUTPUT);
pinMode(StatusLED,OUTPUT);
pinMode(Buzzer,OUTPUT);
// initialize the pushbutton pin as an input:
pinMode(Button1, INPUT);
pinMode(Button2,INPUT);
//Serial.begin(9600);
}
void loop(){
// read the state of the pushbutton value:
if(digitalRead(Button2)==LOW) //I have a NC button instead of a NO
{ // Button2 will only reset FadceOut Timer
TimeWait = -2;
StartFadeOut();
}
if(digitalRead(Button1)==HIGH)
{ //Button1 Start Waiting Time before FadeOut Timer
TimeWait = TimeToWait;
digitalWrite(Buzzer,HIGH);
StartFadeOut();
}
else
{ // Turn Buzzer Off
digitalWrite(Buzzer,LOW);
}
unsigned long currentMillis = millis();
if(currentMillis - PreviousMillis > Interval)
{
PreviousMillis = currentMillis;
//Serial.println(TimeWait);
if(Ledstate==LOW)
{ // Blink Status LED. StatusLED will be mostly ON When in Waiting time
// or mostly off when Fading or when done.
digitalWrite(StatusLED,HIGH);
delay(50);
digitalWrite(StatusLED,LOW);
}
else
{
digitalWrite(StatusLED,LOW);
delay(50);
digitalWrite(StatusLED,HIGH);
}
if(TimeWait == 0)
{
// Mostly Done waiting. Turn StatusLED Off
Ledstate=(LOW);
digitalWrite(StatusLED,LOW);
TimeWait--;
}
else if(TimeWait > 0)
{
//Waiting ....
TimeWait--;
}
else if(TimeWait == -1)
{
//Done Waiting.
TimeWait--;
MainFlash();
}
else if (TimeWait == -5)
{
//Startup State do nothing please
}
else
{
//Fading OUT Started
Ledstate=LOW;
if(TimeFadeLeft > -1)
{
int x;
x = map(TimeFadeLeft, 0, TimeFade, 0, 255); //Map the LED value (0-255) to the TimeFade (0-xx)
//Serial.print("Fade X now is : ");
//Serial.println(x);
//Serial.print("Fade Left is : ");
//Serial.println(TimeFadeLeft);
analogWrite(MainLED,x);
TimeFadeLeft--;
}
else
{
//All done ! StatusLED blink only every 5 sec.
Interval=5000;
}
}
}
}
void StartFadeOut()
{
//FadeOut initialization
Ledstate = HIGH;
TimeFadeLeft=TimeFade;
analogWrite(MainLED,255);
digitalWrite(StatusLED,HIGH);
Interval = 1000;
}
void MainFlash()
{
// Flash MainLED and Buzzer 3 Times.
for (int i=0; i <= 2; i++)
{
analogWrite(MainLED, 0); // set the LED OFF
digitalWrite(Buzzer,HIGH);
delay(100); // wait
analogWrite(MainLED, 255); // set the LED ON
digitalWrite(Buzzer,LOW);
delay(100);
}
}


No comments:
Post a Comment
Note: Only a member of this blog may post a comment.