Simple CAN test based on SKpang's work
Dependencies: CANInterface mbed
Fork of ecu_reader by
main.cpp@7:61b712aa2771, 2014-02-25 (annotated)
- Committer:
- nherriot
- Date:
- Tue Feb 25 14:07:50 2014 +0000
- Revision:
- 7:61b712aa2771
- Parent:
- 6:c91e372617e3
- Child:
- 9:4fbd2f50cf78
simple test for ecu reader.; baud rate was changed.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
pangsk | 0:908be729d27c | 1 | /* |
pangsk | 0:908be729d27c | 2 | |
pangsk | 0:908be729d27c | 3 | mbed Can-Bus demo |
pangsk | 0:908be729d27c | 4 | |
pangsk | 0:908be729d27c | 5 | This program is to demonstrate the CAN-bus capability of the mbed module. |
pangsk | 0:908be729d27c | 6 | |
pangsk | 1:3552a3289608 | 7 | http://www.skpang.co.uk/catalog/product_info.php?products_id=741 |
pangsk | 0:908be729d27c | 8 | |
pangsk | 0:908be729d27c | 9 | v1.0 July 2010 |
pangsk | 0:908be729d27c | 10 | |
pangsk | 0:908be729d27c | 11 | ******************************************************************************** |
pangsk | 0:908be729d27c | 12 | |
pangsk | 0:908be729d27c | 13 | WARNING: Use at your own risk, sadly this software comes with no guarantees. |
pangsk | 0:908be729d27c | 14 | This software is provided 'free' and in good faith, but the author does not |
pangsk | 0:908be729d27c | 15 | accept liability for any damage arising from its use. |
pangsk | 0:908be729d27c | 16 | |
pangsk | 0:908be729d27c | 17 | ******************************************************************************** |
pangsk | 0:908be729d27c | 18 | |
pangsk | 0:908be729d27c | 19 | |
pangsk | 0:908be729d27c | 20 | */ |
pangsk | 0:908be729d27c | 21 | |
pangsk | 0:908be729d27c | 22 | #include "mbed.h" |
pangsk | 0:908be729d27c | 23 | #include "ecu_reader.h" |
pangsk | 0:908be729d27c | 24 | #include "globals.h" |
pangsk | 0:908be729d27c | 25 | #include "TextLCD.h" |
pangsk | 0:908be729d27c | 26 | #include "GPS.h" |
pangsk | 2:e7b3b8da71ff | 27 | #include "SDFileSystem.h" |
pangsk | 0:908be729d27c | 28 | |
pangsk | 0:908be729d27c | 29 | GPS gps(p28, p27); |
nherriot | 7:61b712aa2771 | 30 | TextLCD lcd2(p30, p19, p20, p17, p16, p15, p14); |
pangsk | 0:908be729d27c | 31 | TextLCD lcd(p18, p19, p20, p17, p16, p15, p14); // rs, rw, e, d0, d1, d2, d3 |
pangsk | 2:e7b3b8da71ff | 32 | SDFileSystem sd(p5, p6, p7, p13, "sd"); |
pangsk | 0:908be729d27c | 33 | |
pangsk | 0:908be729d27c | 34 | DigitalIn click(p21); // Joystick inputs |
pangsk | 0:908be729d27c | 35 | DigitalIn right(p22); |
pangsk | 0:908be729d27c | 36 | DigitalIn down(p23); |
pangsk | 0:908be729d27c | 37 | DigitalIn left(p24); |
pangsk | 0:908be729d27c | 38 | DigitalIn up(p25); |
pangsk | 3:05bb8f0bd7a4 | 39 | Serial pc(USBTX, USBRX); |
pangsk | 3:05bb8f0bd7a4 | 40 | |
pangsk | 0:908be729d27c | 41 | |
nherriot | 6:c91e372617e3 | 42 | |
pangsk | 0:908be729d27c | 43 | ecu_reader obdii(CANSPEED_500); //Create object and set CAN speed |
nherriot | 6:c91e372617e3 | 44 | void can_demo(void); |
pangsk | 0:908be729d27c | 45 | void gps_demo(void); |
pangsk | 0:908be729d27c | 46 | void sd_demo(void); |
nherriot | 6:c91e372617e3 | 47 | void home(void); // Function to set the screen on a home position |
pangsk | 0:908be729d27c | 48 | |
nherriot | 6:c91e372617e3 | 49 | int main() |
nherriot | 6:c91e372617e3 | 50 | { |
pangsk | 3:05bb8f0bd7a4 | 51 | pc.baud(115200); |
pangsk | 0:908be729d27c | 52 | char buffer[20]; |
pangsk | 3:05bb8f0bd7a4 | 53 | |
pangsk | 3:05bb8f0bd7a4 | 54 | //Enable Pullup |
pangsk | 3:05bb8f0bd7a4 | 55 | click.mode(PullUp); |
pangsk | 3:05bb8f0bd7a4 | 56 | right.mode(PullUp); |
pangsk | 3:05bb8f0bd7a4 | 57 | down.mode(PullUp); |
pangsk | 3:05bb8f0bd7a4 | 58 | left.mode(PullUp); |
pangsk | 3:05bb8f0bd7a4 | 59 | up.mode(PullUp); |
pangsk | 3:05bb8f0bd7a4 | 60 | |
nherriot | 6:c91e372617e3 | 61 | // Display splash screen |
nherriot | 6:c91e372617e3 | 62 | printf("Vodafone UBI Prototype \n"); |
pangsk | 2:e7b3b8da71ff | 63 | lcd.locate(0,0); // Set LCD cursor position |
nherriot | 7:61b712aa2771 | 64 | lcd.printf("Voda UBI Proto"); |
pangsk | 0:908be729d27c | 65 | lcd.locate(0,1); |
nherriot | 6:c91e372617e3 | 66 | lcd.printf("www.vodafone.com"); |
nherriot | 6:c91e372617e3 | 67 | // Wait and clear screen |
pangsk | 0:908be729d27c | 68 | wait(3); |
pangsk | 0:908be729d27c | 69 | lcd.cls(); |
pangsk | 0:908be729d27c | 70 | |
nherriot | 6:c91e372617e3 | 71 | // Call up the home menu |
nherriot | 6:c91e372617e3 | 72 | home(); |
nherriot | 6:c91e372617e3 | 73 | } |
nherriot | 6:c91e372617e3 | 74 | |
pangsk | 0:908be729d27c | 75 | |
nherriot | 6:c91e372617e3 | 76 | void can_demo(void) |
nherriot | 6:c91e372617e3 | 77 | { |
nherriot | 6:c91e372617e3 | 78 | char buffer[20]; |
pangsk | 0:908be729d27c | 79 | lcd.cls(); |
nherriot | 6:c91e372617e3 | 80 | pc.printf("\nVodafone CAN selelected:"); |
nherriot | 6:c91e372617e3 | 81 | |
nherriot | 6:c91e372617e3 | 82 | lcd.locate(0,0); // Set LCD cursor position |
nherriot | 6:c91e372617e3 | 83 | lcd.printf("Voda Car Connect"); |
nherriot | 6:c91e372617e3 | 84 | lcd.locate(0,1); |
nherriot | 6:c91e372617e3 | 85 | lcd.printf("CAN bus selected"); |
pangsk | 0:908be729d27c | 86 | |
nherriot | 6:c91e372617e3 | 87 | while(1) |
nherriot | 6:c91e372617e3 | 88 | { // Main CAN loop |
nherriot | 6:c91e372617e3 | 89 | if(click == 0) home(); |
pangsk | 0:908be729d27c | 90 | led2 = 1; |
pangsk | 0:908be729d27c | 91 | wait(0.1); |
pangsk | 0:908be729d27c | 92 | led2 = 0; |
pangsk | 0:908be729d27c | 93 | wait(0.1); |
pangsk | 0:908be729d27c | 94 | |
pangsk | 0:908be729d27c | 95 | if(obdii.request(ENGINE_RPM,buffer) == 1) // Get engine rpm and display on LCD |
pangsk | 0:908be729d27c | 96 | { |
pangsk | 0:908be729d27c | 97 | lcd.locate(0,0); |
pangsk | 0:908be729d27c | 98 | lcd.printf(buffer); |
pangsk | 3:05bb8f0bd7a4 | 99 | pc.printf(buffer); |
pangsk | 0:908be729d27c | 100 | } |
pangsk | 0:908be729d27c | 101 | |
pangsk | 0:908be729d27c | 102 | if(obdii.request(ENGINE_COOLANT_TEMP,buffer) == 1) |
pangsk | 0:908be729d27c | 103 | { |
pangsk | 0:908be729d27c | 104 | lcd.locate(9,0); |
pangsk | 0:908be729d27c | 105 | lcd.printf(buffer); |
pangsk | 0:908be729d27c | 106 | } |
pangsk | 0:908be729d27c | 107 | |
pangsk | 0:908be729d27c | 108 | if(obdii.request(VEHICLE_SPEED,buffer) == 1) |
pangsk | 0:908be729d27c | 109 | { |
pangsk | 0:908be729d27c | 110 | lcd.locate(0,1); |
pangsk | 0:908be729d27c | 111 | lcd.printf(buffer); |
pangsk | 0:908be729d27c | 112 | } |
pangsk | 0:908be729d27c | 113 | |
pangsk | 0:908be729d27c | 114 | if(obdii.request(THROTTLE,buffer) ==1 ) |
pangsk | 0:908be729d27c | 115 | { |
pangsk | 0:908be729d27c | 116 | lcd.locate(9,1); |
pangsk | 0:908be729d27c | 117 | lcd.printf(buffer); |
pangsk | 0:908be729d27c | 118 | } |
pangsk | 0:908be729d27c | 119 | |
pangsk | 0:908be729d27c | 120 | } |
nherriot | 6:c91e372617e3 | 121 | |
pangsk | 0:908be729d27c | 122 | } |
pangsk | 0:908be729d27c | 123 | |
nherriot | 6:c91e372617e3 | 124 | |
nherriot | 6:c91e372617e3 | 125 | |
nherriot | 6:c91e372617e3 | 126 | void home(void) |
nherriot | 6:c91e372617e3 | 127 | { |
nherriot | 6:c91e372617e3 | 128 | pc.printf("\nVodafone Home Menu"); |
nherriot | 6:c91e372617e3 | 129 | lcd.cls(); |
nherriot | 6:c91e372617e3 | 130 | lcd.locate(0,0); |
nherriot | 7:61b712aa2771 | 131 | lcd.printf("Home - menu"); |
nherriot | 6:c91e372617e3 | 132 | lcd.locate(0,1); |
nherriot | 7:61b712aa2771 | 133 | lcd.printf("select option..."); |
nherriot | 6:c91e372617e3 | 134 | wait(2); |
nherriot | 6:c91e372617e3 | 135 | lcd.cls(); |
nherriot | 6:c91e372617e3 | 136 | lcd.locate(0,0); |
nherriot | 6:c91e372617e3 | 137 | lcd.printf("Use joystick"); |
nherriot | 6:c91e372617e3 | 138 | lcd.locate(0,1); |
nherriot | 7:61b712aa2771 | 139 | lcd.printf("U-CAN:D-GPS:P-Ho"); |
nherriot | 6:c91e372617e3 | 140 | pc.printf("\nUse the joystick to select an option - hold down the joystick to get back to home"); |
nherriot | 6:c91e372617e3 | 141 | pc.printf("\nUp = CAN buss demo:Down = GPS demo:Left = SD demo: Press = Home"); |
nherriot | 6:c91e372617e3 | 142 | |
nherriot | 6:c91e372617e3 | 143 | while(1) // Wait until option is selected by the joystick |
nherriot | 6:c91e372617e3 | 144 | { |
nherriot | 6:c91e372617e3 | 145 | |
nherriot | 6:c91e372617e3 | 146 | if(down == 0) gps_demo(); |
nherriot | 6:c91e372617e3 | 147 | if(left == 0) sd_demo(); |
nherriot | 6:c91e372617e3 | 148 | if(up == 0) can_demo(); |
nherriot | 6:c91e372617e3 | 149 | } |
nherriot | 6:c91e372617e3 | 150 | |
nherriot | 6:c91e372617e3 | 151 | } |
nherriot | 6:c91e372617e3 | 152 | |
nherriot | 6:c91e372617e3 | 153 | |
pangsk | 0:908be729d27c | 154 | void gps_demo(void) |
pangsk | 0:908be729d27c | 155 | { |
nherriot | 6:c91e372617e3 | 156 | |
pangsk | 0:908be729d27c | 157 | lcd.cls(); |
pangsk | 0:908be729d27c | 158 | lcd.printf("GPS demo"); |
pangsk | 0:908be729d27c | 159 | lcd.locate(0,1); |
pangsk | 0:908be729d27c | 160 | lcd.printf("Waiting for lock"); |
nherriot | 6:c91e372617e3 | 161 | pc.printf("\nVodafone Ublox GPS initiated"); |
nherriot | 6:c91e372617e3 | 162 | pc.printf("\nGPS Sampling starting....\n"); |
nherriot | 6:c91e372617e3 | 163 | |
pangsk | 0:908be729d27c | 164 | while(1) |
pangsk | 0:908be729d27c | 165 | { |
nherriot | 6:c91e372617e3 | 166 | if(click == 0) home(); |
nherriot | 6:c91e372617e3 | 167 | if(gps.sample()) |
nherriot | 6:c91e372617e3 | 168 | { |
nherriot | 6:c91e372617e3 | 169 | lcd.cls(); |
pangsk | 0:908be729d27c | 170 | lcd.printf("Long:%f", gps.longitude); |
nherriot | 6:c91e372617e3 | 171 | lcd.locate(0,1); |
pangsk | 0:908be729d27c | 172 | lcd.printf("Lat:%f", gps.latitude); |
nherriot | 6:c91e372617e3 | 173 | pc.printf("I'm at Latitude: %f, Longitude: %f\n", gps.latitude, gps.longitude); |
nherriot | 6:c91e372617e3 | 174 | } |
nherriot | 6:c91e372617e3 | 175 | else |
nherriot | 6:c91e372617e3 | 176 | { |
nherriot | 6:c91e372617e3 | 177 | pc.printf("Oh Dear! No lock :(\n"); |
nherriot | 6:c91e372617e3 | 178 | lcd.cls(); |
nherriot | 6:c91e372617e3 | 179 | lcd.printf("Waiting for lock"); |
nherriot | 6:c91e372617e3 | 180 | } |
pangsk | 0:908be729d27c | 181 | } |
nherriot | 6:c91e372617e3 | 182 | |
nherriot | 6:c91e372617e3 | 183 | } |
pangsk | 0:908be729d27c | 184 | |
pangsk | 0:908be729d27c | 185 | void sd_demo(void) |
pangsk | 0:908be729d27c | 186 | { |
pangsk | 2:e7b3b8da71ff | 187 | lcd.cls(); |
pangsk | 3:05bb8f0bd7a4 | 188 | printf("\nSD demo"); |
pangsk | 2:e7b3b8da71ff | 189 | lcd.printf("SD demo"); |
pangsk | 2:e7b3b8da71ff | 190 | wait(2); |
pangsk | 0:908be729d27c | 191 | lcd.cls(); |
pangsk | 2:e7b3b8da71ff | 192 | |
pangsk | 2:e7b3b8da71ff | 193 | FILE *fp = fopen("/sd/sdtest2.txt", "w"); |
pangsk | 2:e7b3b8da71ff | 194 | if(fp == NULL) { |
pangsk | 2:e7b3b8da71ff | 195 | lcd.cls(); |
pangsk | 2:e7b3b8da71ff | 196 | lcd.printf("Could not open file for write\n"); |
pangsk | 3:05bb8f0bd7a4 | 197 | pc.printf("\nCould not open file for write"); |
pangsk | 2:e7b3b8da71ff | 198 | } |
pangsk | 2:e7b3b8da71ff | 199 | fprintf(fp, "Hello fun SD Card World! testing 1234"); |
pangsk | 2:e7b3b8da71ff | 200 | fclose(fp); |
pangsk | 2:e7b3b8da71ff | 201 | lcd.locate(0,1); |
pangsk | 2:e7b3b8da71ff | 202 | lcd.printf("Writtern to SD card"); |
pangsk | 3:05bb8f0bd7a4 | 203 | pc.printf("\nWrittern to SD card"); |
pangsk | 2:e7b3b8da71ff | 204 | |
pangsk | 0:908be729d27c | 205 | while(1) |
pangsk | 0:908be729d27c | 206 | { |
nherriot | 6:c91e372617e3 | 207 | if(click == 0) home(); |
pangsk | 2:e7b3b8da71ff | 208 | led2 = 1; |
pangsk | 2:e7b3b8da71ff | 209 | wait(0.1); |
pangsk | 2:e7b3b8da71ff | 210 | led2 = 0; |
pangsk | 2:e7b3b8da71ff | 211 | wait(0.1); |
pangsk | 2:e7b3b8da71ff | 212 | |
pangsk | 0:908be729d27c | 213 | } |
pangsk | 0:908be729d27c | 214 | |
pangsk | 0:908be729d27c | 215 | } |