Aaron Stevenson / Mbed 2 deprecated Assignment3

Dependencies:   mbed MCP23017 mbed-rtos WattBob_TextLCD

Committer:
Steaar
Date:
Wed Mar 21 12:50:48 2018 +0000
Revision:
1:c2c4bd530112
Parent:
0:1580a6dbd6a9
Child:
2:51a06b9a52d1
Threads added, need to test time taken for each. 7 and 8 still need added

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 1:c2c4bd530112 16 float aveSpeed;
Steaar 0:1580a6dbd6a9 17 float acc = 0;
Steaar 0:1580a6dbd6a9 18 float br = 0;
Steaar 0:1580a6dbd6a9 19 float dif;
Steaar 1:c2c4bd530112 20 float distance = 0;
Steaar 0:1580a6dbd6a9 21
Steaar 0:1580a6dbd6a9 22 Timer tim;
Steaar 0:1580a6dbd6a9 23 long int t;
Steaar 0:1580a6dbd6a9 24
Steaar 1:c2c4bd530112 25 DigitalOut sideLights(LED1);
Steaar 1:c2c4bd530112 26 DigitalOut lIndicator(LED2);
Steaar 1:c2c4bd530112 27 DigitalOut rIndicator(LED3);
Steaar 0:1580a6dbd6a9 28 DigitalOut engLight(LED4);
Steaar 0:1580a6dbd6a9 29
Steaar 0:1580a6dbd6a9 30 DigitalOut brakeLights(p6);
Steaar 0:1580a6dbd6a9 31 DigitalOut fluxCapacitor(p7);
Steaar 0:1580a6dbd6a9 32
Steaar 0:1580a6dbd6a9 33 DigitalIn lightSwitch(p8);
Steaar 0:1580a6dbd6a9 34 DigitalIn lIndicate(p9);
Steaar 0:1580a6dbd6a9 35 DigitalIn rIndicate(p10);
Steaar 1:c2c4bd530112 36 DigitalIn engine(p5);
Steaar 0:1580a6dbd6a9 37
Steaar 1:c2c4bd530112 38 Thread sp;
Steaar 1:c2c4bd530112 39 Thread task1;
Steaar 1:c2c4bd530112 40 Thread task2;
Steaar 1:c2c4bd530112 41 Thread task3;
Steaar 1:c2c4bd530112 42 Thread task4;
Steaar 1:c2c4bd530112 43 Thread task5;
Steaar 1:c2c4bd530112 44 Thread task6;
Steaar 1:c2c4bd530112 45 Thread task7;
Steaar 1:c2c4bd530112 46 Thread task8;
Steaar 1:c2c4bd530112 47 Thread task9;
Steaar 1:c2c4bd530112 48 Thread task10;
Steaar 1:c2c4bd530112 49
Steaar 1:c2c4bd530112 50
Steaar 1:c2c4bd530112 51 void acceleration() //run at 20hz // 1 read brake and accelerator 10
Steaar 1:c2c4bd530112 52 {
Steaar 1:c2c4bd530112 53 while (1) {
Steaar 1:c2c4bd530112 54 acc = accel.read()*3.3;
Steaar 1:c2c4bd530112 55 br = brake.read()*3.3;
Steaar 1:c2c4bd530112 56 Thread::wait(500);
Steaar 1:c2c4bd530112 57 }
Steaar 0:1580a6dbd6a9 58 }
Steaar 1:c2c4bd530112 59 void getSpeed() // 20Hz
Steaar 1:c2c4bd530112 60 {
Steaar 1:c2c4bd530112 61 while (1) {
Steaar 1:c2c4bd530112 62 dif = acc - br;
Steaar 1:c2c4bd530112 63 t = tim.read();
Steaar 1:c2c4bd530112 64 speed = speed + (dif*t*3.6);
Steaar 1:c2c4bd530112 65 if (speed < 0) {
Steaar 1:c2c4bd530112 66 speed = 0;
Steaar 1:c2c4bd530112 67 }
Steaar 1:c2c4bd530112 68 distance = distance + (speed*t + (0.5*dif*(t*t)))/1000;
Steaar 1:c2c4bd530112 69 tim.reset();
Steaar 1:c2c4bd530112 70
Steaar 1:c2c4bd530112 71 Thread::wait(100);
Steaar 0:1580a6dbd6a9 72 }
Steaar 0:1580a6dbd6a9 73 }
Steaar 1:c2c4bd530112 74 void ignition() // 2 Read engine on/off show LED 2
Steaar 1:c2c4bd530112 75 {
Steaar 1:c2c4bd530112 76 while (1) {
Steaar 1:c2c4bd530112 77 if (engine == 1) {
Steaar 1:c2c4bd530112 78 engLight = 1;
Steaar 1:c2c4bd530112 79 }
Steaar 1:c2c4bd530112 80
Steaar 1:c2c4bd530112 81 Thread::wait(500);
Steaar 0:1580a6dbd6a9 82 }
Steaar 0:1580a6dbd6a9 83 }
Steaar 1:c2c4bd530112 84 void speedo() // 3 Average last n speed readings 2
Steaar 1:c2c4bd530112 85 {
Steaar 1:c2c4bd530112 86 while (1) {
Steaar 1:c2c4bd530112 87 for (int i = 0; i<3; i++) {
Steaar 1:c2c4bd530112 88 aveSpeed = speed + aveSpeed;
Steaar 1:c2c4bd530112 89 }
Steaar 1:c2c4bd530112 90 speed = speed/4;
Steaar 1:c2c4bd530112 91
Steaar 1:c2c4bd530112 92 Thread::wait(200);
Steaar 0:1580a6dbd6a9 93 }
Steaar 0:1580a6dbd6a9 94 }
Steaar 1:c2c4bd530112 95 void braking() // 4 Brake indicated by LED 2
Steaar 1:c2c4bd530112 96 {
Steaar 1:c2c4bd530112 97 while (1) {
Steaar 1:c2c4bd530112 98 if ( br>0) {
Steaar 1:c2c4bd530112 99 brakeLights = 1;
Steaar 1:c2c4bd530112 100 }
Steaar 1:c2c4bd530112 101
Steaar 1:c2c4bd530112 102 Thread::wait(500);
Steaar 0:1580a6dbd6a9 103 }
Steaar 0:1580a6dbd6a9 104 }
Steaar 1:c2c4bd530112 105 void greatScott() // 5 if speed > 88 LED on 1
Steaar 1:c2c4bd530112 106 {
Steaar 1:c2c4bd530112 107 while (1) {
Steaar 1:c2c4bd530112 108 if (speed > 88) {
Steaar 1:c2c4bd530112 109 fluxCapacitor = 1;
Steaar 1:c2c4bd530112 110 }
Steaar 1:c2c4bd530112 111
Steaar 1:c2c4bd530112 112 Thread::wait(1000);
Steaar 1:c2c4bd530112 113 }
Steaar 1:c2c4bd530112 114 }
Steaar 1:c2c4bd530112 115 void LCD() // 6 display odometer and speed 2
Steaar 1:c2c4bd530112 116 {
Steaar 1:c2c4bd530112 117 while (1) {
Steaar 1:c2c4bd530112 118 t = tim.read();
Steaar 1:c2c4bd530112 119 distance = speed * (t/3600);
Steaar 1:c2c4bd530112 120
Steaar 1:c2c4bd530112 121 lcd->locate(0,0);
Steaar 1:c2c4bd530112 122 lcd->printf("KM:%0.1f",distance);
Steaar 1:c2c4bd530112 123 lcd->locate(1,0);
Steaar 1:c2c4bd530112 124 lcd->printf("KMPH:%0.1f",speed);
Steaar 1:c2c4bd530112 125
Steaar 1:c2c4bd530112 126 Thread::wait(500);
Steaar 1:c2c4bd530112 127 }
Steaar 0:1580a6dbd6a9 128 }
Steaar 0:1580a6dbd6a9 129 // 7 Send speed, acc, brake to 100 0.2
Steaar 0:1580a6dbd6a9 130 // element MAIL q MBED RTOS
Steaar 0:1580a6dbd6a9 131 // 8 MAIL q to serial PC 0.05
Steaar 1:c2c4bd530112 132 void lights() // 9 side light switch, set lights 1
Steaar 1:c2c4bd530112 133 {
Steaar 1:c2c4bd530112 134 while (1) {
Steaar 1:c2c4bd530112 135 if (lightSwitch == 1) {
Steaar 1:c2c4bd530112 136 sideLights = 1;
Steaar 1:c2c4bd530112 137 }
Steaar 1:c2c4bd530112 138 else{
Steaar 1:c2c4bd530112 139 sideLights = 0;
Steaar 1:c2c4bd530112 140 }
Steaar 1:c2c4bd530112 141
Steaar 1:c2c4bd530112 142 Thread::wait(1000);
Steaar 0:1580a6dbd6a9 143 }
Steaar 0:1580a6dbd6a9 144 }
Steaar 1:c2c4bd530112 145 void indicators() // 10. Read indicator switches, flash
Steaar 1:c2c4bd530112 146 {
Steaar 1:c2c4bd530112 147 while (1) {
Steaar 1:c2c4bd530112 148 if ((lIndicate == 1) && (rIndicate == 1)) { // both LED at 2Hz If both switch on
Steaar 0:1580a6dbd6a9 149 lIndicator = !lIndicator;
Steaar 0:1580a6dbd6a9 150 rIndicator = !rIndicator;
Steaar 1:c2c4bd530112 151 // Thread::wait(2000);
Steaar 1:c2c4bd530112 152 }
Steaar 1:c2c4bd530112 153 if ((lIndicate == 1) && (rIndicate == 0)) { // if left switch on
Steaar 0:1580a6dbd6a9 154 lIndicator = !lIndicator; // left LED at 1Hz
Steaar 1:c2c4bd530112 155 // Thread::wait(1000);
Steaar 1:c2c4bd530112 156 }
Steaar 1:c2c4bd530112 157 if ((lIndicate == 0) && (rIndicate == 1)) { // if right switch on
Steaar 0:1580a6dbd6a9 158 rIndicator = !rIndicator; // right LED at 1Hz
Steaar 1:c2c4bd530112 159 // Thread::wait(1000);
Steaar 1:c2c4bd530112 160 }
Steaar 1:c2c4bd530112 161
Steaar 1:c2c4bd530112 162 Thread::wait(2000);
Steaar 0:1580a6dbd6a9 163 }
Steaar 0:1580a6dbd6a9 164 }
Steaar 0:1580a6dbd6a9 165
Steaar 0:1580a6dbd6a9 166 int main()
Steaar 0:1580a6dbd6a9 167 {
Steaar 0:1580a6dbd6a9 168 par_port = new MCP23017(p9, p10, 0x40); // initialise 16-bit I/O chip
Steaar 0:1580a6dbd6a9 169 lcd = new WattBob_TextLCD(par_port); // initialise 2*26 char display
Steaar 0:1580a6dbd6a9 170 par_port->write_bit(1,BL_BIT); // turn LCD backlight ON
Steaar 1:c2c4bd530112 171
Steaar 1:c2c4bd530112 172 sp.start(getSpeed);
Steaar 1:c2c4bd530112 173 task1.start(acceleration);
Steaar 1:c2c4bd530112 174 task2.start(ignition);
Steaar 1:c2c4bd530112 175 task3.start(speedo);
Steaar 1:c2c4bd530112 176 task4.start(braking);
Steaar 1:c2c4bd530112 177 task5.start(greatScott);
Steaar 1:c2c4bd530112 178 task6.start(LCD);
Steaar 1:c2c4bd530112 179 //task7.start();
Steaar 1:c2c4bd530112 180 //task8.start();
Steaar 1:c2c4bd530112 181 task9.start(lights);
Steaar 1:c2c4bd530112 182 task10.start(indicators);
Steaar 1:c2c4bd530112 183
Steaar 0:1580a6dbd6a9 184 }
Steaar 0:1580a6dbd6a9 185
Steaar 0:1580a6dbd6a9 186
Steaar 1:c2c4bd530112 187