I used your code to make a closer of my own, I put an ethernet board on so that there would be a web server. I created a selector button and LEDs to cycle from 5 to 15(or in my case I changed it to 20), 60 minute and off delays, rather than a dip switch. I hope you don't mind me posting it to this thread.
/* Arduino Garage Door Closer # 4
with ethernet shield and webserver
DIGITAL PINS USED
3 Status LEDs for Door Timer
1 Led for Door Open
1 Led for Door Closed
1 Pushbutton Switch for Door Status
1 Pushbutton Switch for timer selection
1 Relay Board
Total = 8
*/
#include <SPI.h>
#include <Ethernet.h>
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; //physical mac address
byte ip[] = { 192, 168, 1, 177 }; // ip in lan
byte gateway[] = { 192, 168, 1, 1 }; // internet access via router
byte subnet[] = { 255, 255, 255, 0 }; //subnet mask
EthernetServer server(80); //server port
String readString;
int doordelay; // Delay in minutes to close door if open
int doordelayminutes = 1;
const long oneSecond = 1000;
const long oneMinute = oneSecond * 60;
long doorinterval;
int on_off = 2; // on/off switch pin
int status_pin = 7; // open (HIGH) or closed (LOW) pin
int operate_pin = 6; // relay pin to open/close door
int fivemin_led = 9; // (5) Five Minute Timer LED pin
int fifteenmin_led = 8; // (15) Fifteen Minute Timer LED pin
int sixtymin_led = 5; // (60) Sixty Minute Timer LED pin
int open_door = 4; // Open Door LED pin
int closed_door = 3; // Closed Door LED pin
int door_count = 0; // Keep track of how many times the door has been left open.
int door = LOW; // Door Status
int powertog = LOW; // Disable switch status
int buttonPushCounterm = 0;
int buttonStatem = 0;
int lastButtonStatem = 0;
int timer ;
int minutes_1 = 60000; // 1000*60
int minutes_20 = 1200000; // 1000*60*20
int minutes_240 = 14400000; // 1000*60*240
String buffer = "";
unsigned long current_time;
void setup()
{
Ethernet.begin(mac, ip, gateway, subnet);
server.begin();
Serial.begin(9600);
pinMode(status_pin, INPUT);
pinMode(operate_pin, OUTPUT);
digitalWrite(operate_pin, HIGH);
}
void closedoor()
{
digitalWrite(operate_pin, LOW); // Closing the door
analogWrite(fivemin_led, 255);
analogWrite(fifteenmin_led, 255);
analogWrite(sixtymin_led, 255);
delay(100);
digitalWrite(operate_pin, HIGH); // Stop closing door
analogWrite(fivemin_led, 0);
analogWrite(fifteenmin_led, 0);
analogWrite(sixtymin_led, 0);
delay(100);
analogWrite(fivemin_led, 255);
analogWrite(fifteenmin_led, 255);
analogWrite(sixtymin_led, 255);
delay(100);
analogWrite(fivemin_led, 0);
analogWrite(fifteenmin_led, 0);
analogWrite(sixtymin_led, 0);
}
void loop()
{
if(doordelay == 0 )
{
doordelay=doordelayminutes;
}
// 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') {
///////////////
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("<meta name=\"viewport\" content=\"width=device-width; initial-scale=1.0; maximum-scale=1.0;\">");
client.println("<meta name='apple-mobile-web-app-capable' content='yes' />");
client.println("<meta name='apple-mobile-web-app-status-bar-style' content='black-translucent' />");
client.println("<meta http-equiv=\"refresh\" content=\"15;URL='http://192.168.1.177/'\">");
client.println("<link rel='stylesheet' type='text/css' href='http://homeautocss.net84.net/a.css' />");
client.println("<TITLE>Garage Door</TITLE>");
client.println("</HEAD>");
client.println("<BODY>");
client.println("<center>");
client.println("<table style=\"font-family:verdana; margin:auto;\">");
client.println("<tr>");
client.println("<td><H2><font face=\"verdana\">GARAGE DOOR </H2></font></td>");
if(door == LOW )
{
client.print("<td><H2><font face=\"verdana\" color=\"green\">CLOSED</font></H2></td>");
}
else
{
client.print("<td><H2><font face=\"verdana\" color=\"red\">OPEN</font></H2></td>");
}
client.println("</tr>");
client.println("<tr>");
if(buttonPushCounterm == 4 )
{
client.print("<td><H3>CLOSER</td><td><H3>OFF</H3></td>");
}
else
{
client.print("<td><H3>CLOSER</td><td><H3>ON</H3></td>");
}
client.println("</tr>");
client.println("<tr>");
if(buttonPushCounterm == 4 )
{
}
else
{
client.print("<td><H4>Delay</H4></td><td><H4>");
client.print(doordelay);
client.print(" Min</H4></td>");
}
client.println("</tr>");
client.println("<tr>");
client.print("<td><H4>Closings</H4></td><td><H4>");
client.print(door_count);
client.print(" Time(s)</H4></td>");
client.println("</tr>");
client.println("</table>");
client.println("<table style=\"margin:auto;\">");
client.println("<tr>");
client.println("<a href=\"/?5min\"\">5 Min</a>
");
client.println("</tr>");
client.println("<tr>");
client.println("<a href=\"/?20min\"\">20 Min</a>
");
client.println("</tr>");
client.println("<tr>");
client.println("<a href=\"/?60min\"\">60 Min</a>
");
client.println("</tr>");
client.println("<tr>");
client.println("<a href=\"/?999min\"\">Turn Off</a>
");
client.println("</tr>");
client.println("</table>");
client.println("</center>");
client.println("</BODY>");
client.println("</HTML>");
delay(1);
//stopping client
client.stop();
if(readString.indexOf("?5min") >0)
{
doordelay=5;
buttonPushCounterm = 1;
}
if(readString.indexOf("?20min") >0)
{
doordelay=20;
buttonPushCounterm = 2;
}
if(readString.indexOf("?60min") >0)
{
doordelay=60;
buttonPushCounterm = 3;
}
if(readString.indexOf("?999min") >0)
{
doordelay=999;
buttonPushCounterm = 4;
}
//clearing string for next read
readString="";
}
}
}
}
doorinterval = doordelay * oneMinute;
door = digitalRead(status_pin);
powertog = digitalRead(on_off);
if (powertog !=lastButtonStatem)
{
if (powertog == HIGH)
{
buttonPushCounterm++;
if (buttonPushCounterm == 5 )
{
buttonPushCounterm = 1;
}
}
else
{
}
}
lastButtonStatem = powertog;
if(buttonPushCounterm == 0)
{
buttonPushCounterm = 2;
}
if(buttonPushCounterm == 1 )
{
analogWrite(fivemin_led, 255);
analogWrite(fifteenmin_led, 0);
analogWrite(sixtymin_led, 0);
doordelay=5;
}
if(buttonPushCounterm == 2 )
{
analogWrite(fivemin_led, 255);
analogWrite(fifteenmin_led, 255);
analogWrite(sixtymin_led, 0);
doordelay=20;
}
if(buttonPushCounterm == 3 )
{
analogWrite(fivemin_led, 255);
analogWrite(fifteenmin_led, 255);
analogWrite(sixtymin_led, 255);
doordelay=60;
}
if(buttonPushCounterm == 4 )
{
analogWrite(fivemin_led, 0);
analogWrite(fifteenmin_led, 0);
analogWrite(sixtymin_led, 0);
current_time = millis();
}
else
{
}
if(door == LOW )
{
analogWrite(open_door, 0);
analogWrite(closed_door, 255);
current_time = millis();
}
else
{
analogWrite(open_door, 255);
analogWrite(closed_door, 0);
}
if( ((long)(millis() - (doorinterval + current_time)) >= 0) && powertog == LOW) // once has past this condition should set an end for the timer.
{
closedoor();
current_time = millis();
door_count = door_count + 1;
}
else
{
}
}