It WORKS!!! HOORAY!!!
Here's the working code if anybody wants it:
//////Bicycle Light System v1.0////////////
/////Author: Christopher Valentine 2014
/////Special Thanks to: PaulRB of the Arduino support forum!!!
////This is a full blown bicyle light system with
////headlights, turn signals (front and back),
////brakelights, and multi-function flashing tail lights
////Although this set up is designed for a bike,
////with the use of a wireless remote control it could
////Also be used on a remote control car or other things
byte BRAKE_SWITCH = 8; //Set Pin 8 as Brake Switch
byte Right_Turn= 4; //Set Pin 4 as Switch
byte PIN_RED = 11; //Right Rear Set Pin 11 as LED
byte PIN_FR = 7; //Right Front Set Pin 7 as LED
byte Left_Turn = 5 ; //Set Pin 5 as Switch
byte PIN_RED2 = 10; //Left Rear Set Pin 10 as LED
byte PIN_FL = 6; //Left Front Set Pin 6 as LED
byte PIN_TOGG = 3; //Toggle Fades set Pin 3
boolean buttonstate; //Integer variable named buttonstate Left Turn Switch
boolean button_state; //Integer variable named button_state Right Turn Switch
boolean button__state; //Integer variable named button__state Brake Switch
// Delay time: sets the time in milliseconds between loop iterations.
// Make this value large for slower transitions.
unsigned long delayTime = 10;
int currentPattern = 7;
int patternButtonState = HIGH;
// The initial values of each color.
int red = 175;
int red2 = 175;
// Indicates whether a color is incrementing (1) or decrementing (0).
int incR = 1;
int incR2 = 1;
void setup()
{
pinMode(PIN_TOGG, INPUT);
pinMode(Left_Turn, INPUT);
pinMode(PIN_RED2, OUTPUT);
pinMode(PIN_FL, OUTPUT);
pinMode(Right_Turn, INPUT);
pinMode(PIN_RED, OUTPUT);
pinMode(PIN_FR, OUTPUT);
pinMode(BRAKE_SWITCH, INPUT);
}
void turnLeft()//turnLeft function
{
analogWrite(PIN_FR, 255);
analogWrite(PIN_RED, 125);
analogWrite(PIN_RED2, 125);
buttonstate = HIGH; //the micro the switch is now HIGH
while (buttonstate == HIGH) //While the switch is NOT pressed do the following
{
buttonstate = digitalRead(Left_Turn); //Continually look at the switch to see if its pressed
analogWrite(PIN_RED2, 255); //Set the Rear Left LED to maximum brightness
analogWrite(PIN_FL, 255); //Set the Front Left LED to maximum brightness
delay(100);
analogWrite(PIN_RED2, 0); //turn the LED off for a blinking effect
analogWrite(PIN_FL, 0); //turn the LED off for a blinking effect
delay(100);
}
//Once the switch is pressed again, break out of the loop above and then break out of the function completely and go back to our main loop
buttonstate = LOW; //First we tell the micro the switch is now LOW
analogWrite(PIN_RED2, 0); //We turn the LED off before leaving our custom function
analogWrite(PIN_FL, 0); //We turn the LED off before leaving our custom function
}
void turnRight()//turnRight function
{
analogWrite(PIN_FL, 255);
analogWrite(PIN_RED, 125);
analogWrite(PIN_RED2, 125);
button_state = HIGH; //the micro the switch is now HIGH
while (button_state == HIGH) //While the switch is NOT pressed do the following
{
button_state = digitalRead(Right_Turn); //Continually look at the switch to see if its pressed
analogWrite(PIN_RED, 255); //Set the Rear Right LED to maximum brightness
analogWrite(PIN_FR, 255); //Set the Front Right LED to maximum brightness
delay(100);
analogWrite(PIN_RED, 0); //turn the LED off for a blinking effect
analogWrite(PIN_FR, 0); //turn the LED off for a blinking effect
delay(100);
}
//Once the switch is pressed again, break out of the loop above and then break out of the function completely and go back to our main loop
button_state = LOW; //First we tell the micro the switch is now LOW
analogWrite(PIN_RED, 0); //We turn the LED off before leaving our custom function
analogWrite(PIN_FR, 0); //We turn the LED off before leaving our custom function
}
void brakelights()
{
analogWrite(PIN_FL, 255);
analogWrite(PIN_FR, 255);
button__state = HIGH; //the micro switch is now HIGH
while (button__state == HIGH) //While the switch is NOT pressed do the following
{
button__state = digitalRead(BRAKE_SWITCH); //Continually look at the switch to see if its pressed
analogWrite(PIN_RED, 255); //Set the Rear Right LED to maximum brightness
analogWrite(PIN_RED2, 255); //Set the Rear Left LED to maximum brightness
}
//Once the switch is pressed again, break out of the loop above and then break out of the function completely and go back to our main loop
button_state = LOW; //First we tell the micro the switch is now LOW
analogWrite(PIN_RED, 125); //We turn the LED off before leaving our custom function
analogWrite(PIN_RED2, 125); //We turn the LED off before leaving our custom function
}
// Smoothly changes the color values
void transition()
{
if (red >= 175)
incR = 0;
else if (red <= 20)
incR = 1;
if (red2 >= 175)
incR2 = 0;
else if (red2 <= 20)
incR2 = 1;
if (incR)
red++;
else
red--;
if(incR2)
red2++;
else
red2--;
}
// Sets the output voltage on the LED pins.
void setColor()
{
analogWrite(PIN_RED, red);
analogWrite(PIN_RED2, red2);
}
void loop()
{
analogWrite(PIN_FR, 255);
analogWrite(PIN_FL, 255);
transition();
setColor();
delay(delayTime);
button__state = digitalRead(BRAKE_SWITCH); //Continually look at the switch to see if its pressed
if (button__state == HIGH) //If the switch goes HIGH, act on it
{
brakelights(); //new function called brakelights
}
buttonstate = digitalRead(Left_Turn); //Continually look at the switch to see if its pressed
if (buttonstate == HIGH) //If the switch goes HIGH, act on it
{
turnLeft(); //new function called turnLeft
}
button_state = digitalRead(Right_Turn); //Continually look at the switch to see if its pressed
if (button_state == HIGH) //If the switch goes HIGH, act on it
{
turnRight(); //new function called turnRight
}
digitalRead(PIN_TOGG);
if (digitalRead(PIN_TOGG) != patternButtonState) { //the button state has changed
if (patternButtonState == LOW) { //the button state must have just gone high
patternButtonState = HIGH; //record that button has just been pressed but do nothing for now, wait for release
}
else { //it was high, so the button must have just been released
//record the fact that be button has now gone low ie. not pressed
patternButtonState = LOW;
switch (currentPattern) {
case 1: //Pattern 1 has been running
//set up pattern 2
currentPattern = 2;
red = 175;
red2 = 175;
incR = 1;
incR2 = 1;
delayTime = 5;
break;
case 2://Pattern 2 has been running
//set up pattern 3
currentPattern = 3;
red = 175;
red2 = 175;
incR = 1;
incR2 = 1;
delayTime = 1;
break;
case 3://Pattern 3 has been running
//set up pattern 4
currentPattern = 4;
red = 175;
red2 = 20;
incR = 1;
incR2 = 1;
delayTime = 10;
break;
case 4://Pattern 4 has been running
//set up pattern 5
currentPattern = 5;
red = 175;
red2 = 20;
incR = 1;
incR2 = 1;
delayTime = 5;
break;
case 5://Pattern 5 has been running
//set up pattern 6
currentPattern = 6;
red = 175;
red2 = 20;
incR = 1;
incR2 = 1;
delayTime = 1;
break;
case 6://Pattern 6 has been running
//set up pattern 7
currentPattern = 7;
red = 175;
red2 = 175;
incR = 0;
incR2 = 0;
delayTime = 0;
break;
case 7:
//set up pattern 1
currentPattern = 1;
red = 175;
red2 = 175;
incR = 1;
incR2 = 1;
delayTime = 10;
break;
}
}
}
}