Hello, For school we are working with Arduino. I have little to no experience coding with Arduino, but so far i am enjoying it.
For the project we are doing, we need to build a traffic light. I want to have diffrent modes for the traffic lights, i want to implement diffrent modes, and can switch to with a remote controller.
Right now, i have everything coded out, but I cant switch what mode im on. it just runs it as one continuous loop.
my end goal is for this project to have diffrent loops i can switch to, and have them stay at that loop untill i push a diffrent button on my remote. Right now, i can switch to diffrent parts of the loop, but it will just continue from that point forward in the loop. It isn't staying on the part of loop i want it to run.
my code is as following:
[code]
#include <IRremote.h>
// variables
int GREENNS = 2;
int GREENEW = 5;
int YELLOWNS = 3;
int YELLOWEW = 6;
int REDNS = 4;
int REDEW = 7;
int DELAY = 2000;
int DELAY2 = 1000;
const int RECV_PIN = 8;
IRrecv irrecv(RECV_PIN);
decode_results results;
double commando;
byte situation;
void green_lightNS()
{
digitalWrite(GREENNS, HIGH);
digitalWrite (GREENEW, LOW);
digitalWrite(YELLOWNS, LOW);
digitalWrite (YELLOWEW, LOW);
digitalWrite(REDNS, LOW);
digitalWrite(REDEW, HIGH);
Serial.println("NS:GREEN");
}
void yellow_lightNS()
{
digitalWrite(GREENNS, LOW);
digitalWrite(GREENEW, LOW);
digitalWrite(YELLOWNS, HIGH);
digitalWrite (YELLOWEW, LOW);
digitalWrite(REDNS, LOW);
digitalWrite (REDEW, HIGH);
Serial.println("NS:YELLOW");
}
void red_lightNS()
{
digitalWrite(GREENNS, LOW);
digitalWrite(GREENEW, HIGH);
digitalWrite(YELLOWNS, LOW);
digitalWrite (YELLOWEW, LOW);
digitalWrite(REDNS, HIGH);
digitalWrite(REDEW, LOW);
Serial.println("NS:RED");
}
void green_lightEW ()
{
digitalWrite (GREENNS, LOW);
digitalWrite (GREENEW, HIGH);
digitalWrite (YELLOWEW, LOW);
digitalWrite (YELLOWNS, LOW);
digitalWrite (REDEW, LOW);
digitalWrite (REDNS, HIGH);
Serial.println ("EW:GREEN");
}
void yellow_lightEW ()
{
digitalWrite (GREENNS, LOW);
digitalWrite (GREENEW, LOW);
digitalWrite (YELLOWEW, HIGH);
digitalWrite (YELLOWNS, LOW);
digitalWrite (REDNS, HIGH);
digitalWrite (REDEW, LOW);
Serial.println ("EW:YELLOW");
}
void red_lightEW ()
{
digitalWrite (GREENNS, HIGH);
digitalWrite (GREENEW, LOW);
digitalWrite (YELLOWEW, LOW);
digitalWrite (YELLOWNS, LOW);
digitalWrite (REDNS, LOW);
digitalWrite (REDEW, HIGH);
Serial.println ("EW:RED");
}
void all_off ()
{
digitalWrite (REDEW, LOW);
digitalWrite (REDNS, LOW);
digitalWrite (YELLOWEW, LOW);
digitalWrite (YELLOWNS, LOW);
digitalWrite (GREENEW, LOW);
digitalWrite (GREENNS, LOW);
Serial.println("EVERYTHING OFF");
}
void NS_green ()
{
digitalWrite (REDEW, HIGH);
digitalWrite (REDNS, LOW);
digitalWrite (YELLOWEW, LOW);
digitalWrite (YELLOWNS, LOW);
digitalWrite (GREENEW, LOW);
digitalWrite (GREENNS, HIGH);
Serial.println("NS: EMERGENCY green");
}
void EW_green ()
{
digitalWrite (REDEW, LOW);
digitalWrite (REDNS, HIGH);
digitalWrite (YELLOWEW, LOW);
digitalWrite (YELLOWNS, LOW);
digitalWrite (GREENEW, HIGH);
digitalWrite (GREENNS, LOW);
Serial.println("EW: EMERGENCY green");
}
void yellow_flash ()
{
digitalWrite (GREENNS, LOW);
digitalWrite (GREENEW, LOW);
digitalWrite (YELLOWEW, HIGH);
digitalWrite (YELLOWNS, HIGH);
digitalWrite (REDNS, LOW);
digitalWrite (REDEW, LOW);
Serial.println ("YELLOW FLASH");
}
void setup() {
Serial.begin(9600);
irrecv.enableIRIn();
irrecv.blink13(true);
pinMode(GREENNS, OUTPUT);
pinMode(GREENEW, OUTPUT) ;
pinMode(YELLOWNS, OUTPUT);
pinMode(YELLOWEW, OUTPUT);
pinMode(REDNS, OUTPUT);
pinMode(REDEW, OUTPUT);
}
void loop() {
if (irrecv.decode(&results))
{
commando = results.value;
irrecv.resume();
}
//if commando for translating remote to signal, situation for defining the actual command
if (commando = 16738455) {
situation = 0;
}
if (commando = 16724175) {
situation = 1;
}
if (commando = 16743045) {
situation = 2;
}
if (commando = 16716015) {
situation = 3;
}
if (commando = 16716015) {
situation = 4;
}
if (commando = 16726215) {
situation = 5;
}
//All Off
if (situation = 0) {
all_off ();
}
//Day or Normal situation
if (situation = 1) {
green_lightNS();
delay(DELAY);
yellow_lightNS();
delay(DELAY);
red_lightNS();
delay(DELAY);
green_lightEW();
delay (DELAY);
yellow_lightEW();
delay(DELAY);
red_lightEW();
}
//Yellow Flashing
if (situation = 2) {
{
all_off ();
delay (DELAY2);
yellow_flash();
delay (DELAY2);
all_off ();
delay (DELAY2);
yellow_flash();
all_off ();
delay (DELAY2);
yellow_flash();
all_off ();
delay (DELAY2);
yellow_flash();
all_off ();
delay (DELAY2);
yellow_flash();
all_off ();
delay (DELAY2);
yellow_flash();
}
}
//green for North and South
if (situation = 3) {
NS_green ();
delay(DELAY);
}
//green for East & West
if (situation = 4) {
EW_green ();
delay(DELAY);
}
}
[/code]
Some things you will see often in this code are NS, and EW
those stand for North/South and East/West.
English isn't my main language, and i am not really sure if i fully understand my own code, since my teacher wrote some of it. so please go easy on me ![]()
Greets from Holland and thanks in advance!
PS. Any other criticism or tips are well apreciated!