Go Down

Topic: Bicycle Lights sketch for HolidayV (Read 383 times) previous topic - next topic

PaulRB

My completed sketch for this thread. I did not want to post it there as that would have spoiled HolidayV's fun, he was still working on it at the time.
Code: [Select]
//////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 = A0; //Set Pin 8 as Brake Switch
byte Right_Turn_Switch= A1; //Set Pin 4 as Switch
byte LED_RIGHT_REAR = 11;  //Right Rear Set Pin 11 as LED
byte LED_RIGHT_FRONT = 6;  //Right Front Set Pin 7 as LED
byte LEFT_TURN_SWITCH = A1 ; //Set Pin 5 as Switch
byte LED_LEFT_REAR = 10;  //Left Rear Set Pin 10 as LED
byte LED_LEFT_FRONT = 5;  //Left Front Set Pin 6 as LED
byte FADE_TOGGLE_SWITCH = A2; //Toggle Fades set Pin 3
boolean buttonState_Left_Turn; //Integer variable named buttonState_Left_Turn Left Turn Switch
boolean buttonState_Right_Turn; //Integer variable named buttonState_Right_Turn Right Turn Switch
boolean buttonState_Brake_Switch; //Integer variable named buttonState_Brake_Switch Brake Switch

// Delay time: sets the time in milliseconds between loop iterations.
// Make this value large for slower transitions.
unsigned long delayTime = 10;
unsigned long lastPatternUpdate = 0;
unsigned long lastTurnUpdate = 0;

int currentPattern = 7;
int patternbuttonState = HIGH;

// The initial values of each color.
int rightRearLED = 175;
int leftRearLED = 175;

// Indicates whether a color is incRighttRearementing (1) or decrementing (0).
int incRighttRear = 1;
int incLefttRear = 1;

int turnLevel = 0;

void setup()
{
  pinMode(FADE_TOGGLE_SWITCH, INPUT_PULLUP);
  pinMode(LEFT_TURN_SWITCH, INPUT);
  pinMode(LED_LEFT_REAR, OUTPUT);
  pinMode(LED_LEFT_FRONT, OUTPUT);
  pinMode(Right_Turn_Switch, INPUT);
  pinMode(LED_RIGHT_REAR, OUTPUT);
  pinMode(LED_RIGHT_FRONT, OUTPUT);
  pinMode(BRAKE_SWITCH, INPUT);

}

// Smoothly changes the color values
void transition()
{
  if (millis() - lastPatternUpdate >= delayTime) {
    lastPatternUpdate = millis();
   
    if (rightRearLED >= 175)
      incRighttRear = 0;
    else if (rightRearLED <= 20)
      incRighttRear = 1;
    if (leftRearLED >= 175)
      incLefttRear = 0;
    else if (leftRearLED <= 20)
      incLefttRear = 1;

    if (incRighttRear)
      rightRearLED++;
    else
      rightRearLED--;
    if(incLefttRear)
      leftRearLED++;
    else
      leftRearLED--;
  }
}

void turnTransition()
{
  if (millis() - lastTurnUpdate >= 100) {
    lastTurnUpdate = millis();
   
    if (turnLevel == 0)
      turnLevel = 255;
    else
      turnLevel = 0;
  }
}

// Sets the output voltage on the LED pins.
void setColor()
{
  analogWrite(LED_RIGHT_REAR, rightRearLED);
  analogWrite(LED_LEFT_REAR, leftRearLED);
}

void turnLeft()//turnLeft function
{
  analogWrite(LED_LEFT_REAR, turnLevel); //Set the Rear Right LED to maximum brightness
  analogWrite(LED_LEFT_FRONT, turnLevel); //Set the Front Right LED to maximum brightness
  turnTransition();
}

void turnRight()//turnRight function
{
  analogWrite(LED_RIGHT_REAR, turnLevel); //Set the Rear Right LED to maximum brightness
  analogWrite(LED_RIGHT_FRONT, turnLevel); //Set the Front Right LED to maximum brightness
  turnTransition();
}

void brakelights()
{
  analogWrite(LED_RIGHT_REAR, 255); //Set the Rear Right LED to maximum brightness
  analogWrite(LED_LEFT_REAR, 255); //Set the Rear Left LED to maximum brightness
}

void frontlights()
{
  analogWrite(LED_LEFT_FRONT, 255);
  analogWrite(LED_RIGHT_FRONT, 255);
}


void loop()
{
  buttonState_Brake_Switch = analogRead(BRAKE_SWITCH)<256 ? HIGH:LOW; //Continually look at the switch to see if its pressed
  buttonState_Left_Turn = analogRead(LEFT_TURN_SWITCH)<256 ? HIGH:LOW; //Continually look at the switch to see if its pressed
  buttonState_Right_Turn = analogRead(Right_Turn_Switch)>768 ? HIGH:LOW; //Continually look at the switch to see if its pressed

  if (buttonState_Brake_Switch == HIGH && buttonState_Left_Turn == HIGH) //If the switch goes HIGH, act on it
  {
    brakelights();
    turnLeft();
  }
  else if (buttonState_Brake_Switch == HIGH && buttonState_Right_Turn == HIGH) //If the switch goes HIGH, act on it
  {
    brakelights();
    turnRight();
  }
  else if (buttonState_Brake_Switch == HIGH) //If the switch goes HIGH, act on it
  {
    brakelights();
    frontlights();
  }
  else if (buttonState_Right_Turn == HIGH) //If the switch goes HIGH, act on it
  {
    transition();
    setColor();
    turnRight();
  }
  else if (buttonState_Left_Turn == HIGH) //If the switch goes HIGH, act on it
  {
    transition();
    setColor();
    turnLeft();
  }
  else //Normal mode, no buttons pressed
  {
    frontlights();
    transition();
    setColor();
  }
   
  if (digitalRead(FADE_TOGGLE_SWITCH) != 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;
        rightRearLED = 175;
        leftRearLED = 175;
        incRighttRear = 1;
        incLefttRear = 1;
        delayTime = 5;
        break;

      case 2://Pattern 2 has been running
        //set up pattern 3
        currentPattern = 3;
        rightRearLED = 175;
        leftRearLED = 175;
        incRighttRear = 1;
        incLefttRear = 1;
        delayTime = 1;
        break;

      case 3://Pattern 3 has been running
        //set up pattern 4
        currentPattern = 4;
        rightRearLED = 175;
        leftRearLED = 20;
        incRighttRear = 1;
        incLefttRear = 1;
        delayTime = 10;
        break;

      case 4://Pattern 4 has been running
        //set up pattern 5
        currentPattern = 5;
        rightRearLED = 175;
        leftRearLED = 20;
        incRighttRear = 1;
        incLefttRear = 1;
        delayTime = 5;
        break;

      case 5://Pattern 5 has been running
        //set up pattern 6
        currentPattern = 6;
        rightRearLED = 175;
        leftRearLED = 20;
        incRighttRear = 1;
        incLefttRear = 1;
        delayTime = 1;
        break;

      case 6://Pattern 6 has been running
        //set up pattern 7
        currentPattern = 7;
        rightRearLED = 175;
        leftRearLED = 175;
        incRighttRear = 0;
        incLefttRear = 0;
        delayTime = 0;
        break;

      case 7:
        //set up pattern 1
        currentPattern = 1;
        rightRearLED = 175;
        leftRearLED = 175;
        incRighttRear = 1;
        incLefttRear = 1;
        delayTime = 10;
        break;

      }
    }
  }
}


Go Up
 


Please enter a valid email to subscribe

Confirm your email address

We need to confirm your email address.
To complete the subscription, please click the link in the email we just sent you.

Thank you for subscribing!

Arduino
via Egeo 16
Torino, 10131
Italy