Aaron Stevenson / Mbed 2 deprecated Assignment3

Dependencies:   mbed MCP23017 mbed-rtos WattBob_TextLCD

Committer:
Steaar
Date:
Wed Mar 21 11:51:37 2018 +0000
Revision:
0:1580a6dbd6a9
Child:
1:c2c4bd530112
All tasks added except for mail queue. Timing needs implemented

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Steaar 0:1580a6dbd6a9 1 #include "mbed.h"
Steaar 0:1580a6dbd6a9 2 #include "rtos.h"
Steaar 0:1580a6dbd6a9 3
Steaar 0:1580a6dbd6a9 4 #include "MCP23017.h"
Steaar 0:1580a6dbd6a9 5 #include "WattBob_TextLCD.h"
Steaar 0:1580a6dbd6a9 6
Steaar 0:1580a6dbd6a9 7 #define BACK_LIGHT_ON(INTERFACE) INTERFACE->write_bit(1,BL_BIT)
Steaar 0:1580a6dbd6a9 8 #define BACK_LIGHT_OFF(INTERFACE) INTERFACE->write_bit(0,BL_BIT)
Steaar 0:1580a6dbd6a9 9
Steaar 0:1580a6dbd6a9 10 MCP23017 *par_port; // pointer to 16-bit parallel I/O object
Steaar 0:1580a6dbd6a9 11 WattBob_TextLCD *lcd; // pointer to 2*16 chacater LCD object
Steaar 0:1580a6dbd6a9 12
Steaar 0:1580a6dbd6a9 13 AnalogIn accel(p15); // Analog
Steaar 0:1580a6dbd6a9 14 AnalogIn brake(p16);
Steaar 0:1580a6dbd6a9 15 float speed = 0;
Steaar 0:1580a6dbd6a9 16 float acc = 0;
Steaar 0:1580a6dbd6a9 17 float br = 0;
Steaar 0:1580a6dbd6a9 18 float dif;
Steaar 0:1580a6dbd6a9 19
Steaar 0:1580a6dbd6a9 20 Timer tim;
Steaar 0:1580a6dbd6a9 21 long int t;
Steaar 0:1580a6dbd6a9 22
Steaar 0:1580a6dbd6a9 23 DigitalIn engine(p5);
Steaar 0:1580a6dbd6a9 24 DigitalOut engLight(LED4);
Steaar 0:1580a6dbd6a9 25
Steaar 0:1580a6dbd6a9 26 DigitalOut brakeLights(p6);
Steaar 0:1580a6dbd6a9 27
Steaar 0:1580a6dbd6a9 28 DigitalOut fluxCapacitor(p7);
Steaar 0:1580a6dbd6a9 29
Steaar 0:1580a6dbd6a9 30 float distance = 0;
Steaar 0:1580a6dbd6a9 31
Steaar 0:1580a6dbd6a9 32 DigitalIn lightSwitch(p8);
Steaar 0:1580a6dbd6a9 33 DigitalOut sideLights(LED1);
Steaar 0:1580a6dbd6a9 34
Steaar 0:1580a6dbd6a9 35 DigitalOut lIndicator(LED2);
Steaar 0:1580a6dbd6a9 36 DigitalOut rIndicator(LED3);
Steaar 0:1580a6dbd6a9 37
Steaar 0:1580a6dbd6a9 38 DigitalIn lIndicate(p9);
Steaar 0:1580a6dbd6a9 39 DigitalIn rIndicate(p10);
Steaar 0:1580a6dbd6a9 40
Steaar 0:1580a6dbd6a9 41 Thread thread;
Steaar 0:1580a6dbd6a9 42
Steaar 0:1580a6dbd6a9 43 void acceleration() {//run at 20hz // 1 read brake and accelerator 10
Steaar 0:1580a6dbd6a9 44 acc = accel.read()*3.3;
Steaar 0:1580a6dbd6a9 45 br = brake.read()*3.3;
Steaar 0:1580a6dbd6a9 46 }
Steaar 0:1580a6dbd6a9 47 void getSpeed(){ // 20Hz
Steaar 0:1580a6dbd6a9 48 dif = acc - br;
Steaar 0:1580a6dbd6a9 49 t = tim.read();
Steaar 0:1580a6dbd6a9 50 if (dif<0) {
Steaar 0:1580a6dbd6a9 51 speed = speed - (dif*t);
Steaar 0:1580a6dbd6a9 52 } else {
Steaar 0:1580a6dbd6a9 53 speed = speed + (dif*t);
Steaar 0:1580a6dbd6a9 54 }
Steaar 0:1580a6dbd6a9 55 speed = speed * 3.6;
Steaar 0:1580a6dbd6a9 56 t = tim.read();
Steaar 0:1580a6dbd6a9 57 distance = speed*t + (0.5*dif*(t*t));
Steaar 0:1580a6dbd6a9 58 distance = distance/1000;
Steaar 0:1580a6dbd6a9 59 return speed;
Steaar 0:1580a6dbd6a9 60 }
Steaar 0:1580a6dbd6a9 61 void ignition(){ // 2 Read engine on/off show LED 2
Steaar 0:1580a6dbd6a9 62 if (engine == 1) {
Steaar 0:1580a6dbd6a9 63 engLight = 1;
Steaar 0:1580a6dbd6a9 64 }
Steaar 0:1580a6dbd6a9 65 }
Steaar 0:1580a6dbd6a9 66 void speedo(){ // 3 Average last n speed readings 2
Steaar 0:1580a6dbd6a9 67 for (int i = 0; i<3; i++) {
Steaar 0:1580a6dbd6a9 68 speed = speed + getSpeed();
Steaar 0:1580a6dbd6a9 69 }
Steaar 0:1580a6dbd6a9 70 speed = speed/4;
Steaar 0:1580a6dbd6a9 71 }
Steaar 0:1580a6dbd6a9 72 void braking(){ // 4 Brake indicated by LED 2
Steaar 0:1580a6dbd6a9 73 if ( br>0){
Steaar 0:1580a6dbd6a9 74 brakeLights = 1;
Steaar 0:1580a6dbd6a9 75 }
Steaar 0:1580a6dbd6a9 76 }
Steaar 0:1580a6dbd6a9 77 void greatScott(){ // 5 if speed > 88 LED on 1
Steaar 0:1580a6dbd6a9 78 if (speed > 88){
Steaar 0:1580a6dbd6a9 79 fluxCapacitor = 1;
Steaar 0:1580a6dbd6a9 80 }
Steaar 0:1580a6dbd6a9 81 }
Steaar 0:1580a6dbd6a9 82 void LCD(){ // 6 display odometer and speed 2
Steaar 0:1580a6dbd6a9 83 t = tim.read();
Steaar 0:1580a6dbd6a9 84 distance = speed * (t/3600);
Steaar 0:1580a6dbd6a9 85
Steaar 0:1580a6dbd6a9 86 lcd->locate(0,0);
Steaar 0:1580a6dbd6a9 87 lcd->printf("KM:%0.1f",distance);
Steaar 0:1580a6dbd6a9 88 lcd->locate(1,0);
Steaar 0:1580a6dbd6a9 89 lcd->printf("KMPH:%0.1f",speed);
Steaar 0:1580a6dbd6a9 90 }
Steaar 0:1580a6dbd6a9 91 // 7 Send speed, acc, brake to 100 0.2
Steaar 0:1580a6dbd6a9 92 // element MAIL q MBED RTOS
Steaar 0:1580a6dbd6a9 93 // 8 MAIL q to serial PC 0.05
Steaar 0:1580a6dbd6a9 94 void lights(){ // 9 side light switch, set lights 1
Steaar 0:1580a6dbd6a9 95 if (lightSwitch == 1){
Steaar 0:1580a6dbd6a9 96 sideLights = 1;
Steaar 0:1580a6dbd6a9 97 }
Steaar 0:1580a6dbd6a9 98 }
Steaar 0:1580a6dbd6a9 99 void indicators(){ // 10. Read indicator switches, flash
Steaar 0:1580a6dbd6a9 100 if ((lIndicate == 1) && (rIndicate == 1)){ // both LED at 2Hz If both switch on
Steaar 0:1580a6dbd6a9 101 lIndicator = !lIndicator;
Steaar 0:1580a6dbd6a9 102 rIndicator = !rIndicator;
Steaar 0:1580a6dbd6a9 103 Thread::wait(2000);
Steaar 0:1580a6dbd6a9 104 }
Steaar 0:1580a6dbd6a9 105 if ((lIndicate == 1) && (rIndicate == 0)){ // if left switch on
Steaar 0:1580a6dbd6a9 106 lIndicator = !lIndicator; // left LED at 1Hz
Steaar 0:1580a6dbd6a9 107 Thread::wait(1000);
Steaar 0:1580a6dbd6a9 108 }
Steaar 0:1580a6dbd6a9 109 if ((lIndicate == 0) && (rIndicate == 1)){ // if right switch on
Steaar 0:1580a6dbd6a9 110 rIndicator = !rIndicator; // right LED at 1Hz
Steaar 0:1580a6dbd6a9 111 Thread::wait(1000);
Steaar 0:1580a6dbd6a9 112 }
Steaar 0:1580a6dbd6a9 113 }
Steaar 0:1580a6dbd6a9 114
Steaar 0:1580a6dbd6a9 115 int main()
Steaar 0:1580a6dbd6a9 116 {
Steaar 0:1580a6dbd6a9 117 par_port = new MCP23017(p9, p10, 0x40); // initialise 16-bit I/O chip
Steaar 0:1580a6dbd6a9 118 lcd = new WattBob_TextLCD(par_port); // initialise 2*26 char display
Steaar 0:1580a6dbd6a9 119 par_port->write_bit(1,BL_BIT); // turn LCD backlight ON
Steaar 0:1580a6dbd6a9 120 while(1) {
Steaar 0:1580a6dbd6a9 121 }
Steaar 0:1580a6dbd6a9 122 }
Steaar 0:1580a6dbd6a9 123
Steaar 0:1580a6dbd6a9 124
Steaar 0:1580a6dbd6a9 125