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
main.cpp@0:1580a6dbd6a9, 2018-03-21 (annotated)
- 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?
| User | Revision | Line number | New 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 |