4180 Electric Bike
Dependencies: mbed mbed-rtos 4DGL-uLCD-SE
main.cpp
- Committer:
- ZellofisH
- Date:
- 2019-04-29
- Revision:
- 0:0344add43397
File content as of revision 0:0344add43397:
#include "mbed.h" #include "uLCD_4DGL.h" #include "rtos.h" //DigitalOut myled(LED1); DigitalIn brakeSwitch(p5); DigitalIn blinkerSwitchL(p7); DigitalIn blinkerSwitchR(p6); //AnalogIn throttleIn(p15); AnalogIn battVoltIn(p15); AnalogIn photoresistIn(p16); AnalogIn rpmIn(p17); uLCD_4DGL uLCD(p9,p10,p11); //PwmOut throttleOut(p21); DigitalOut leftBlinker(p22); DigitalOut rightBlinker(p23); DigitalOut brakeLight(p24); DigitalOut headlight(p25); int brakeRunningLight = 0; Ticker left; Ticker right; int blinked = 0; //double speed = 0; double batteryPercent = .5; double throttlePercent = 0; double battMax = .55; //double throttleMin = 0.86; //double throttleMax = 3.29; double rpm = 0; int offOnL = 0; int offOnR = 0; double photo = photoresistIn; void Brake(void const *args) { while(true) { if (!brakeRunningLight) { if (brakeSwitch == 1) { //throttleOut = 0; if (blinked == 0) { //int i = 0; for (int i = 0; i < 6; i++){ brakeLight = !brakeLight; wait(.1); } blinked = 1; } //stay on brakeLight = 1; //switch off throttle } else { //brake light off blinked = 0; brakeLight = 0; } } else { if (brakeSwitch == 1) { //throttleOut = 0; if (blinked == 0) { //int i = 0; for (int i = 0; i < 6; i++){ leftBlinker = !leftBlinker; rightBlinker = !rightBlinker; wait(.1); } blinked = 1; } //stay on leftBlinker = 1; rightBlinker = 1; //switch off throttle } else { //brake light off blinked = 0; leftBlinker = 0; rightBlinker = 0; } } Thread::wait(200); } } //void Throttle(void const *args) //{ // while(true) { // if (brakeSwitch == 1) { // //throttleOut = 0; // } else { // //throttleOut = throttleIn; // //throttlePercent = (double)throttleIn / throttleMax; // } // Thread::wait(100); // } //} void lights(void const *args) { while(true) { if (photoresistIn <= .15) { headlight = 1; brakeRunningLight = 1; } else if (photoresistIn >= .35){ headlight = 0; brakeRunningLight = 0; } Thread::wait(200); } } void battery(void const *args) { while(1) { batteryPercent = (double)((double)battVoltIn / battMax); Thread::wait(5000); } } void RPM(void const *args) { rpm = (float(rpmIn) / 2.3); } void blinker(void const *args) { if (offOnL) { if (leftBlinker) { leftBlinker = 0; } else { leftBlinker = 1; } } else { leftBlinker = 0; } if (offOnR) { if (rightBlinker) { rightBlinker = 0; } else { rightBlinker = 1; } } else { rightBlinker = 0; } Thread::wait(500); } int main() { uLCD.locate(0,0); uLCD.printf("Speed: "); uLCD.locate(0,3); uLCD.printf("Battery:"); blinkerSwitchL.mode(PullUp); blinkerSwitchR.mode(PullUp); brakeSwitch.mode(PullDown); brakeLight = 1; Thread t1(Brake); Thread t2(RPM); Thread t3(lights); Thread t4(battery); while(1) { photo = photoresistIn; //start threads Thread t5(blinker); if (!blinkerSwitchL) { if (offOnL) { offOnL = 0; } else { offOnL = 1; } } if (!blinkerSwitchR) { if (offOnR) { offOnR = 0; } else { offOnR = 1; } } uLCD.locate(8,0); uLCD.printf("%f", photo);//rpm*100); uLCD.rectangle(0,8, 127, 16, WHITE); uLCD.filled_rectangle(1,9, 126, 15, BLACK); uLCD.filled_rectangle(1,9, rpm*127, 15, BLUE); uLCD.locate(8,3); uLCD.printf("%f", batteryPercent); uLCD.rectangle(0,33, 127, 41, WHITE); uLCD.filled_rectangle(1,34, 126, 40, BLACK); uLCD.filled_rectangle(1,34, batteryPercent*127, 40, BLUE); uLCD.locate(11,3); Thread::wait(.1); } }