Aaron Stevenson / Mbed 2 deprecated Assignment3

Dependencies:   mbed MCP23017 mbed-rtos WattBob_TextLCD

Revision:
0:1580a6dbd6a9
Child:
1:c2c4bd530112
--- /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) {
+    }
+}
+
+
+