I am working on a home light control using a arduino uno and ethernet shield. I have successfully managed to turn on and off the lights in my house on a webpage generated by the arduino and using the boards and some relays. So turning on and off the lights remotely is not the problem but I would like to add a schedule function (if possible) so that on the webpage it will come up with select a time, maybe even a date and I can tell it when to turn on and off the lights (or certain pins), while still having the ability to select a on or off button on the site. I'm not sure if the arduino uno itself is capable of this function or if I have to add in another device to help out with this function. Any thoughts?
Post your code
Read this before posting a programming question ...
Sorry, here is the code I have been working with, in which I have received the basic sketch from a guy on here and modified it a little bit.
#include <SPI.h>
#include <Ethernet.h>
#include <Servo.h>
Servo myservo; // create servo object to control a servo
byte mac[] = { 0x90, 0xA2, 0xDA, 0x00, 0xD7, 0xD8 }; //physical mac address
byte ip[] = { 192, 168, 2, 8 }; // ip in lan
byte gateway[] = { 192, 168, 2, 1 }; // internet access via router
byte subnet[] = { 255, 255, 255, 0 }; //subnet mask
EthernetServer server(84); //server port
String readString;
//////////////////////
void setup(){
pinMode(5, OUTPUT);
pinMode(6, OUTPUT); //pins selected to control
//start Ethernet
Ethernet.begin(mac, ip, gateway, gateway, subnet);
server.begin();
//enable serial data print
Serial.begin(9600);
}
void loop(){
// Create a client connection
EthernetClient client = server.available();
if (client) {
while (client.connected()) {
if (client.available()) {
char c = client.read();
//read char by char HTTP request
if (readString.length() < 100) {
//store characters to string
readString += c;
//Serial.print(c);
}
//if HTTP request has ended
if (c == '\n') {
///////////////
Serial.println(readString); //print to serial monitor for debuging
client.println("HTTP/1.1 200 OK"); //send new page
client.println("Content-Type: text/html");
client.println();
client.println("<HTML>");
client.println("<HEAD>");
client.println("<TITLE>Home Lighting Control</TITLE>");
client.println("</HEAD>");
client.println("<BODY>");
client.println("<H1>2 Channel Lighting Control</H1>");
client.println("<p><a href=http://www.website.com/myaccount.php><input type='submit' value='Return To Your Account'></a></p>");
client.println("<a href=\"/?1on\"><input type='submit' value='Station 1 On'></a>");
client.println("<a href=\"/?1off\"><input type='submit' value='Station 1 OFF'></a>");
client.println("<p><a href=\"/?2on\"><input type='submit' value='Station 2 ON'></a>");
client.println("<a href=\"/?2off\"><input type='submit' value='Station 2 OFF'></a></p>");
client.println("</BODY>");
client.println("</HTML>");
delay(1);
//stopping client
client.stop();
///////////////////// control arduino pin
if(readString.indexOf("1on") >0)//checks for on
{
digitalWrite(5, HIGH); // set pin 5 high
Serial.println("Led On");
}
if(readString.indexOf("1off") >0)//checks for off
{
digitalWrite(5, LOW); // set pin 5 low
Serial.println("Led Off");
}
if(readString.indexOf("2on") >0)//checks for on
{
digitalWrite(6, HIGH); // set pin 6 high
Serial.println("Led On");
}
if(readString.indexOf("2off") >0)//checks for off
{
digitalWrite(6, LOW); // set pin 6 low
Serial.println("Led Off");
}
//clearing string for next read
readString="";
}
}
}
}
}
You probably want to look at a real-time-clock (RTC) chip.
The ds1307 is popular. It works fine when powered, but I found them to lose track of time when run on battery backup.
My favorite is the DS3231 because it is very very stable.
Both work with the Arduino Time library, which will keep track of time without a RTC. It just won't be as accurate and, obviously, not remember what time it is when the board is reset (or power cycled.)
Now that you're starting to develop more complex functions, it might be a good time to put your management logic on a PC and just use the Arduno as an I/O device. You can use the existing web service for communication from the PC to the Arduino, if you want.