mirror of
https://github.com/c0de-archive/bikecpu.git
synced 2024-12-22 03:32:39 +00:00
Add LCD panel to show stats
This commit is contained in:
parent
e523caf8e1
commit
43438997ab
@ -1,23 +1,31 @@
|
|||||||
/* 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.
|
||||||
|
|
||||||
Future versions will also be able to communicate to other
|
Future versions will also be able to communicate to other
|
||||||
microcontrollers through the serial interface.
|
microcontrollers through the serial interface.
|
||||||
|
|
||||||
Version 1 (This version) will be responsible for detecting ambiant light and ramping
|
Version 1 (This version) will be responsible for detecting ambiant light and ramping
|
||||||
up/down the front and rear LED brightness once light levels reach a certain level.
|
up/down the front and rear LED brightness once light levels reach a certain level.
|
||||||
Other responsibilities will be blinking pairs of LEDs (front and back) on either side
|
Other responsibilities will be blinking pairs of LEDs (front and back) on either side
|
||||||
of the bike to indicate turning.
|
of the bike to indicate turning.
|
||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#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,22 +42,31 @@ int lBnkSwSt = 0;
|
|||||||
int rBnkSwSt = 0;
|
int rBnkSwSt = 0;
|
||||||
unsigned long previousMillis = 0;
|
unsigned long previousMillis = 0;
|
||||||
|
|
||||||
|
void setup() {
|
||||||
|
lcd.begin(9600); // Start the LCD at 9600 baud
|
||||||
|
clearDisplay(); // Clear the display
|
||||||
|
setBacklight(20);
|
||||||
|
|
||||||
void setup() {
|
|
||||||
// Set out outputs
|
// Set out outputs
|
||||||
pinMode(headlight, OUTPUT);
|
pinMode(headlight, OUTPUT);
|
||||||
pinMode(lBnk, OUTPUT);
|
pinMode(lBnk, OUTPUT);
|
||||||
pinMode(rBnk, OUTPUT);
|
pinMode(rBnk, OUTPUT);
|
||||||
|
|
||||||
// Set our inputs
|
// Set our inputs
|
||||||
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
|
||||||
sensorValue = analogRead(ambientIn);
|
sensorValue = analogRead(ambientIn);
|
||||||
|
|
||||||
if(sensorValue <= 45 && outputValue <= 250){
|
if(sensorValue <= 45 && outputValue <= 250){
|
||||||
outputValue = outputValue + incrBy;
|
outputValue = outputValue + incrBy;
|
||||||
}
|
}
|
||||||
@ -58,48 +75,92 @@ 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
|
||||||
unsigned long currentMillis = millis();
|
unsigned long currentMillis = millis();
|
||||||
|
|
||||||
// Get info from switches
|
// Get info from switches
|
||||||
lBnkSwSt = digitalRead(lBnkSw);
|
lBnkSwSt = digitalRead(lBnkSw);
|
||||||
rBnkSwSt = digitalRead(rBnkSw);
|
rBnkSwSt = digitalRead(rBnkSw);
|
||||||
|
|
||||||
// Automatically turn off LEDs if switch is off
|
// Automatically turn off LEDs if switch is off
|
||||||
if(lBnkSwSt == LOW){ digitalWrite(lBnk, LOW); }
|
if(lBnkSwSt == LOW){ digitalWrite(lBnk, LOW); }
|
||||||
if(rBnkSwSt == LOW){ digitalWrite(rBnk, LOW); }
|
if(rBnkSwSt == LOW){ digitalWrite(rBnk, LOW); }
|
||||||
|
|
||||||
if(lBnkSwSt == HIGH){ // Test if left blinker switch is on
|
if(lBnkSwSt == HIGH){ // Test if left blinker switch is on
|
||||||
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(){
|
||||||
|
|
||||||
|
delay(500);
|
||||||
|
clearDisplay();
|
||||||
|
|
||||||
|
setLCDCursor(4);
|
||||||
|
lcd.print("MPH: 7.5");
|
||||||
|
|
||||||
void loop() {
|
|
||||||
headLight();
|
headLight();
|
||||||
blinker();
|
blinker();
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user