Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: mbed MCP23017 mbed-rtos WattBob_TextLCD
Diff: main.cpp
- Revision:
- 0:1580a6dbd6a9
- Child:
- 1:c2c4bd530112
diff -r 000000000000 -r 1580a6dbd6a9 main.cpp
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp Wed Mar 21 11:51:37 2018 +0000
@@ -0,0 +1,125 @@
+#include "mbed.h"
+#include "rtos.h"
+
+#include "MCP23017.h"
+#include "WattBob_TextLCD.h"
+
+#define BACK_LIGHT_ON(INTERFACE) INTERFACE->write_bit(1,BL_BIT)
+#define BACK_LIGHT_OFF(INTERFACE) INTERFACE->write_bit(0,BL_BIT)
+
+MCP23017 *par_port; // pointer to 16-bit parallel I/O object
+WattBob_TextLCD *lcd; // pointer to 2*16 chacater LCD object
+
+AnalogIn accel(p15); // Analog
+AnalogIn brake(p16);
+float speed = 0;
+float acc = 0;
+float br = 0;
+float dif;
+
+Timer tim;
+long int t;
+
+DigitalIn engine(p5);
+DigitalOut engLight(LED4);
+
+DigitalOut brakeLights(p6);
+
+DigitalOut fluxCapacitor(p7);
+
+float distance = 0;
+
+DigitalIn lightSwitch(p8);
+DigitalOut sideLights(LED1);
+
+DigitalOut lIndicator(LED2);
+DigitalOut rIndicator(LED3);
+
+DigitalIn lIndicate(p9);
+DigitalIn rIndicate(p10);
+
+Thread thread;
+
+void acceleration() {//run at 20hz // 1 read brake and accelerator 10
+ acc = accel.read()*3.3;
+ br = brake.read()*3.3;
+}
+void getSpeed(){ // 20Hz
+ dif = acc - br;
+ t = tim.read();
+ if (dif<0) {
+ speed = speed - (dif*t);
+ } else {
+ speed = speed + (dif*t);
+ }
+ speed = speed * 3.6;
+ t = tim.read();
+ distance = speed*t + (0.5*dif*(t*t));
+ distance = distance/1000;
+ return speed;
+}
+void ignition(){ // 2 Read engine on/off show LED 2
+ if (engine == 1) {
+ engLight = 1;
+ }
+}
+void speedo(){ // 3 Average last n speed readings 2
+ for (int i = 0; i<3; i++) {
+ speed = speed + getSpeed();
+ }
+ speed = speed/4;
+}
+void braking(){ // 4 Brake indicated by LED 2
+ if ( br>0){
+ brakeLights = 1;
+ }
+}
+void greatScott(){ // 5 if speed > 88 LED on 1
+ if (speed > 88){
+ fluxCapacitor = 1;
+ }
+}
+void LCD(){ // 6 display odometer and speed 2
+ t = tim.read();
+ distance = speed * (t/3600);
+
+ lcd->locate(0,0);
+ lcd->printf("KM:%0.1f",distance);
+ lcd->locate(1,0);
+ lcd->printf("KMPH:%0.1f",speed);
+}
+// 7 Send speed, acc, brake to 100 0.2
+// element MAIL q MBED RTOS
+// 8 MAIL q to serial PC 0.05
+void lights(){ // 9 side light switch, set lights 1
+ if (lightSwitch == 1){
+ sideLights = 1;
+ }
+}
+void indicators(){ // 10. Read indicator switches, flash
+ if ((lIndicate == 1) && (rIndicate == 1)){ // both LED at 2Hz If both switch on
+ lIndicator = !lIndicator;
+ rIndicator = !rIndicator;
+ Thread::wait(2000);
+ }
+ if ((lIndicate == 1) && (rIndicate == 0)){ // if left switch on
+ lIndicator = !lIndicator; // left LED at 1Hz
+ Thread::wait(1000);
+ }
+ if ((lIndicate == 0) && (rIndicate == 1)){ // if right switch on
+ rIndicator = !rIndicator; // right LED at 1Hz
+ Thread::wait(1000);
+ }
+}
+
+int main()
+{
+ par_port = new MCP23017(p9, p10, 0x40); // initialise 16-bit I/O chip
+ lcd = new WattBob_TextLCD(par_port); // initialise 2*26 char display
+ par_port->write_bit(1,BL_BIT); // turn LCD backlight ON
+ while(1) {
+ }
+}
+
+
+