//https://techexplorations.com/blog/arduino/inline-assembly-in-arduino-sketches/
// bit5 = Pin13
// bit4 = Pin12
// bit3 = Pin11
// bit2 = Pin10
// bit1 = Pin9
// bit0 = Pin8
#define red1 13
#define amber1 12
#define green1 11
#define green2 10
#define red2 9
#define amber2 8
#define pedestrianGreen1 0
#define pedestrianGreen2 0
void setup(){
Serial.begin(9600);
updateStatus();
}
void loop(){
asm volatile(
"ldi r24,0b00100100 ; Green light\n"
"sts 0x25, r24\n"
);updateStatus();
delay(5000); //wait 5 seconds
TrafficLightSequence(); //change to red light
}
void TrafficLightSequence(){
asm volatile(
"ldi r24,0b00100101; green orange \n"
"sts 0x25, r24 \n"
);delay(1000);updateStatus();
asm volatile(
"ldi r24,0b00100010; red \n"
"sts 0x25, r24 \n"
);delay(500);updateStatus();
asm volatile(
"ldi r24,0b00110010; red orange \n"
"sts 0x25, r24 \n"
);delay(1000);updateStatus();
asm volatile(
"ldi r24,0b00001010; green \n"
"sts 0x25, r24 \n"
);delay(5000);updateStatus();
asm volatile(
"ldi r24,0b00011010; green orange \n"
"sts 0x25, r24 \n"
);delay(1000);updateStatus();
asm volatile(
"ldi r24,0b00100010; red \n"
"sts 0x25, r24 \n"
);delay(1000);updateStatus();
asm volatile(
"ldi r24,0b00100011; red orange \n"
"sts 0x25, r24 \n"
);delay(1000);updateStatus();
}
void updateStatus(){
//check status of traffic light 1
if (digitalRead(red1)==HIGH){
Serial.write("\nL1=ON,");
}
else{
Serial.write("\nL1=OFF,");
}
if (digitalRead(amber1)==HIGH){
Serial.write("ON,");
}
else{
Serial.write("OFF,");
}
if (digitalRead(green1)==HIGH){
Serial.write("ON,PED1=");
}
else{
Serial.write("OFF,PED1=");
}
if (digitalRead(pedestrianGreen1)==HIGH){
Serial.write("ON.\n");
}
else{
Serial.write("OFF.\n");
}
//check status of traffic light 2
if (digitalRead(red2)==HIGH){
Serial.write("L2=ON,");
}
else{
Serial.write("L2=OFF,");
}
if (digitalRead(amber2)==HIGH){
Serial.write("ON,");
}
else{
Serial.write("OFF,");
}
if (digitalRead(green2)==HIGH){
Serial.write("ON,PED2=");
}
else{
Serial.write("OFF,PED2=");
}
if (digitalRead(pedestrianGreen2)==HIGH){
Serial.write("ON.\n");
}
else{
Serial.write("OFF.\n");
}
}