Hello,
Now that I have my program doing exactly what I want it to do I would like to save the state of the LEDS using EEPROM or some other way when the arduino is powered down and when it boots back up it will remember the state of how it was. My programs code is below. Thanks in advanced for the help it has been very useful up to this point.
#include <EEPROM.h>
#include <elapsedMillis.h>
boolean Left, Right;
elapsedMillis Ltimer, Rtimer;
#define HOLDTIME 100
#define LeftSensor 5
#define RightSensor 4
#define LeftSensor2 3
#define RightSensor2 2
#define LeftTrafficLamp 12
#define RightTrafficLamp 11
#define LeftTrafficLamp2 10
#define RightTrafficLamp2 9
void setup() {
pinMode(LeftSensor, INPUT);
pinMode(RightSensor, INPUT);
pinMode(LeftSensor2, INPUT);
pinMode(RightSensor2, INPUT);
pinMode(LeftTrafficLamp, OUTPUT);
pinMode(RightTrafficLamp, OUTPUT);
pinMode(LeftTrafficLamp2, OUTPUT);
pinMode(RightTrafficLamp2, OUTPUT);
digitalWrite(LeftTrafficLamp, HIGH);
digitalWrite(LeftTrafficLamp2, HIGH);
Serial.begin (9600);
while (! Serial);
Serial.println("STARTING...");
Left = 0;
Right = 0;
}
enum { Waiting, TriggerLeft, GoingLeft, TriggerRight, GoingRight };
int getDOT(boolean Left, boolean Right) {
static int state = Waiting;
switch (state) {
case Waiting:
if (Left && !Right) { state = TriggerRight; }
if (!Left && Right) { state = TriggerLeft;
Serial.println("WAITING..."); }
break;
case TriggerRight:
if (!Left) { state = Waiting; }
if (Right) { state = GoingRight;
Serial.println("BLOCK 1 UNOCCUPIED"); }
break;
case TriggerLeft:
if (!Right) { state = Waiting; }
if (Left) { state = GoingLeft;
Serial.println("BLOCK 1 OCCUPIED"); } // DEBUG
break;
case GoingRight:
case GoingLeft:
if (!Left && !Right) { state = Waiting; }
break;
default:
state = Waiting;
}
return state;
}
void loop() {
boolean testLeft = digitalRead(LeftSensor) && digitalRead(LeftSensor2);
boolean testRight = digitalRead(RightSensor) && digitalRead(RightSensor2);
if (Serial.available()) {
char ch = Serial.read();
if (ch == 't') {
Serial.println("STARTING LED TEST");
delay(1000);
digitalWrite(LeftTrafficLamp, HIGH);
digitalWrite(RightTrafficLamp, HIGH);
digitalWrite(LeftTrafficLamp2, HIGH);
digitalWrite(RightTrafficLamp2, HIGH);
Serial.println("GREEN 1: ON, RED 1: ON");
Serial.println("GREEN 2: ON, RED 2: ON");
delay(1000);
digitalWrite(LeftTrafficLamp, LOW);
digitalWrite(RightTrafficLamp, LOW);
digitalWrite(LeftTrafficLamp2, LOW);
digitalWrite(RightTrafficLamp2, LOW);
Serial.println("GREEN 1: OFF, RED 1: OFF");
Serial.println("GREEN 2: OFF, RED 2: OFF");
delay(1000);
digitalWrite(LeftTrafficLamp, HIGH);
digitalWrite(RightTrafficLamp, LOW);
digitalWrite(LeftTrafficLamp2, HIGH);
digitalWrite(RightTrafficLamp2, LOW);
Serial.println("GREEN 1: ON, RED 1: OFF");
Serial.println("GREEN 2: ON, RED 2: OFF");
delay(1000);
digitalWrite(LeftTrafficLamp, LOW);
digitalWrite(RightTrafficLamp, LOW);
digitalWrite(LeftTrafficLamp2, LOW);
digitalWrite(RightTrafficLamp2, LOW);
Serial.println("GREEN 1: OFF, RED 1: OFF");
Serial.println("GREEN 2: OFF, RED 2: OFF");
delay(1000);
digitalWrite(LeftTrafficLamp, LOW);
digitalWrite(RightTrafficLamp, HIGH);
digitalWrite(LeftTrafficLamp2, LOW);
digitalWrite(RightTrafficLamp2, HIGH);
Serial.println("GREEN 1: OFF, RED 1: ON");
Serial.println("GREEN 2: OFF, RED 2: ON");
delay(1000);
digitalWrite(LeftTrafficLamp, LOW);
digitalWrite(RightTrafficLamp, LOW);
digitalWrite(LeftTrafficLamp2, LOW);
digitalWrite(RightTrafficLamp2, LOW);
Serial.println("GREEN 1: OFF, RED 1: OFF");
Serial.println("GREEN 2: OFF, RED 2: OFF");
delay(1000);
digitalWrite(LeftTrafficLamp, HIGH);
digitalWrite(RightTrafficLamp, LOW);
digitalWrite(LeftTrafficLamp2, HIGH);
digitalWrite(RightTrafficLamp2, LOW);
Serial.println("GREEN 1: ON, RED 1: OFF");
Serial.println("GREEN 2: ON, RED 2: OFF");
delay(1000);
Serial.println("LED TEST COMPLETE");
}
}
if (testLeft) {
Ltimer = 0;
Left = 1;
} else if (Ltimer > HOLDTIME) {
Left = 0;
}
if (testRight) {
Rtimer = 0;
Right = 1;
} else if (Rtimer > HOLDTIME) {
Right = 0;
}
int DOT = getDOT(Left, Right);
if (DOT == GoingRight) {
digitalWrite(LeftTrafficLamp, HIGH);
digitalWrite(RightTrafficLamp, LOW);
digitalWrite(LeftTrafficLamp2, LOW);
digitalWrite(RightTrafficLamp2, HIGH);
} else if (DOT == GoingLeft) {
digitalWrite(LeftTrafficLamp, LOW);
digitalWrite(RightTrafficLamp, HIGH);
digitalWrite(LeftTrafficLamp2, HIGH);
digitalWrite(RightTrafficLamp2, LOW);
}
}