Add LCD panel to show stats

This commit is contained in:
Arctic Code 2015-02-08 15:38:26 -06:00
parent e523caf8e1
commit 43438997ab

View File

@ -1,4 +1,7 @@
/* Bike Computer V1 /* Bike Computer V1.1
Using the serial functions signifigantly increases compiled size, use this if you have a problem in execution or are testing.
Use the version without diagnostics in production (once you work out the bugs of course)
Provides controls to basic functions on a bike, such as turning on and off lights, Provides controls to basic functions on a bike, such as turning on and off lights,
Measuring distance traveled, average speed, and logs to a microSD card. Measuring distance traveled, average speed, and logs to a microSD card.
@ -13,11 +16,16 @@
*/ */
#include <SoftwareSerial.h>
SoftwareSerial lcd(2, 8); // This is required, to start an instance of an LCD
const int dispSw = A3;
// D4 and D5 are reserved for I2C // D4 and D5 are reserved for I2C
// Headlight // Headlight
const int ambientIn = A0; // Analog input pin that the potentiometer is attached to const int ambientIn = A0; // Analog input pin that the potentiometer is attached to
const int headlight = 3; // Analog output pin that the LED is attached to const int headlight = 3; // Digital output pin that the LED is attached to
const int incrBy = 5; // Amount to increase or decrease LED brightness by const int incrBy = 5; // Amount to increase or decrease LED brightness by
int sensorValue = 0; // value read from the pot int sensorValue = 0; // value read from the pot
int outputValue = 0; // value output to the PWM (analog out) int outputValue = 0; // value output to the PWM (analog out)
@ -34,8 +42,11 @@ int lBnkSwSt = 0;
int rBnkSwSt = 0; int rBnkSwSt = 0;
unsigned long previousMillis = 0; unsigned long previousMillis = 0;
void setup() { void setup() {
lcd.begin(9600); // Start the LCD at 9600 baud
clearDisplay(); // Clear the display
setBacklight(20);
// Set out outputs // Set out outputs
pinMode(headlight, OUTPUT); pinMode(headlight, OUTPUT);
pinMode(lBnk, OUTPUT); pinMode(lBnk, OUTPUT);
@ -45,6 +56,12 @@ void setup() {
pinMode(ambientIn, INPUT); pinMode(ambientIn, INPUT);
pinMode(lBnkSw, INPUT); pinMode(lBnkSw, INPUT);
pinMode(rBnkSw, INPUT); pinMode(rBnkSw, INPUT);
pinMode(dispSw, INPUT);
setLCDCursor(0);
lcd.print("c0defox.es BCPU");
setLCDCursor(18);
lcd.print("Bike Computer");
} }
void headLight(){ // Main function for determining whether or not to ramp up or ramp down the headlight and taillight. Uses ambient light sensor for that void headLight(){ // Main function for determining whether or not to ramp up or ramp down the headlight and taillight. Uses ambient light sensor for that
@ -58,6 +75,13 @@ void headLight(){ // Main function for determining whether or not to ramp up or
outputValue = outputValue - incrBy; outputValue = outputValue - incrBy;
} }
analogWrite(headlight, outputValue); analogWrite(headlight, outputValue);
if(outputValue >= 20){ // Ramp up/down lcd brightness with headlight - anything lower than 20 is too hard to read
setBacklight(outputValue);
setLCDCursor(16);
lcd.print("*"); // Headlight indicator on lcd
lcd.print(outputValue); // Brightness level of headlight
}
} }
void blinker(){ // Controls the blinkers void blinker(){ // Controls the blinkers
@ -75,31 +99,68 @@ void blinker(){ // Controls the blinkers
if(currentMillis - previousMillis >= bnkSpeed){ if(currentMillis - previousMillis >= bnkSpeed){
previousMillis = currentMillis; previousMillis = currentMillis;
if(lBnkSt == LOW) if(lBnkSt == LOW){
lBnkSt = HIGH; lBnkSt = HIGH;
else
setLCDCursor(0);
lcd.print("<");
}else{
lBnkSt = LOW; lBnkSt = LOW;
setLCDCursor(0);
lcd.print(" ");
}
digitalWrite(lBnk, lBnkSt); // Begin blinking digitalWrite(lBnk, lBnkSt); // Begin blinking
} }
} }
if(rBnkSwSt == HIGH){ // Test if right blinker is on if(rBnkSwSt == HIGH){ // Test if right blinker is on
echo("rBlinkSw", "ON");
if(currentMillis - previousMillis >= bnkSpeed){ if(currentMillis - previousMillis >= bnkSpeed){
previousMillis = currentMillis; previousMillis = currentMillis;
if(rBnkSt == LOW) if(rBnkSt == LOW){
rBnkSt = HIGH; rBnkSt = HIGH;
else
setLCDCursor(15);
lcd.print(">");
}else{
rBnkSt = LOW; rBnkSt = LOW;
setLCDCursor(15);
lcd.print(" ");
}
digitalWrite(rBnk, rBnkSt); // Begin blinking digitalWrite(rBnk, rBnkSt); // Begin blinking
} }
} }
} }
void setBacklight(byte brightness){
lcd.write(0x80); // send the backlight command
lcd.write(brightness); // send the brightness value
}
void clearDisplay(){
lcd.write(0xFE); // send the special command
lcd.write(0x01); // send the clear screen command
}
void setLCDCursor(byte cursor_position){
lcd.write(0xFE); // send the special command
lcd.write(0x80); // send the set cursor command
lcd.write(cursor_position); // send the cursor position
}
void loop(){ void loop(){
delay(500);
clearDisplay();
setLCDCursor(4);
lcd.print("MPH: 7.5");
headLight(); headLight();
blinker(); blinker();
} }