Skip to content

Instantly share code, notes, and snippets.

@roens
Created November 12, 2009 18:46
Show Gist options
  • Save roens/233161 to your computer and use it in GitHub Desktop.
Save roens/233161 to your computer and use it in GitHub Desktop.
char pinBrakeLight = 6; // brake output pin
char pinRunLight = 5; // running light output pin
char pinBrakeSense = 8; // brake sense pin
boolean didBlink = false;
boolean brakeState; // brakes activated or not?
boolean runLightState = true; // running lights on?
unsigned long remindTimer; // tracking when to blinky remind
boolean dbg = false; // debug or not debug?
void setup()
{
pinMode(pinBrakeLight, OUTPUT);
pinMode(pinRunLight, OUTPUT);
pinMode(pinBrakeSense, INPUT);
// digitalWrite(pinBrakeSense, LOW); // turn on pulldown? resistors
brakeBlink(30);
Serial.begin(9600); // start serial communication at 9600bps
dbgSpew("");
dbgSpew("setup done");
}
void loop()
{
brakeSenseChk();
if (brakeState && !didBlink)
{
dbgSpew("brakes activated: blink then HIGH");
brakeBlink(35);
digitalWrite(pinBrakeLight, HIGH);
}
else if (brakeState && didBlink)
{
dbgSpew("brakes still active: HIGH or remind");
digitalWrite(pinBrakeLight, HIGH); // in case brakes on at powerup
if (remindTimer + 3500 <= millis()) // how long to pause between blinky reminder
{
dbgSpew("brake blinky reminder");
brakeBlink(30);
digitalWrite(pinBrakeLight, HIGH);
remindTimer = millis();
}
}
else
{
dbgSpew("brakes deactivated: LOW");
if (runLightState) analogWrite(pinBrakeLight, 16); // "running" light
if (!runLightState) digitalWrite(pinBrakeLight, LOW);
didBlink = false;
}
// delay(20); // only recheck state of things so often
}
void brakeSenseChk()
{
digitalWrite(pinRunLight, digitalRead(pinBrakeSense));
int x;
x = digitalRead(pinBrakeSense);
delay(10);
if ((x == digitalRead(pinBrakeSense)) && (x == HIGH)) {
dbgSpew("brake debounce HIGH");
brakeState = true;
} else {
dbgSpew("brake debounce LOW");
brakeState = false;
}
}
void brakeBlink(short n)
{
digitalWrite(pinBrakeLight, HIGH);
delay(n);
digitalWrite(pinBrakeLight, LOW);
delay(n);
digitalWrite(pinBrakeLight, HIGH);
delay(n);
digitalWrite(pinBrakeLight, LOW);
delay(n);
didBlink = true;
}
void dbgSpew(char d[])
{
if (dbg) Serial.println(d);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment