Simple CAN test based on SKpang's work

Dependencies:   CANInterface mbed

Fork of ecu_reader by Nicholas Herriot

Committer:
nherriot
Date:
Tue Jul 23 13:32:24 2013 +0000
Revision:
6:c91e372617e3
Parent:
3:05bb8f0bd7a4
Child:
7:61b712aa2771
Adding a 'home' menu

Who changed what in which revision?

UserRevisionLine numberNew 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);
pangsk 0:908be729d27c 30 TextLCD lcd(p18, p19, p20, p17, p16, p15, p14); // rs, rw, e, d0, d1, d2, d3
pangsk 2:e7b3b8da71ff 31 SDFileSystem sd(p5, p6, p7, p13, "sd");
pangsk 0:908be729d27c 32
pangsk 0:908be729d27c 33 DigitalIn click(p21); // Joystick inputs
pangsk 0:908be729d27c 34 DigitalIn right(p22);
pangsk 0:908be729d27c 35 DigitalIn down(p23);
pangsk 0:908be729d27c 36 DigitalIn left(p24);
pangsk 0:908be729d27c 37 DigitalIn up(p25);
pangsk 3:05bb8f0bd7a4 38 Serial pc(USBTX, USBRX);
pangsk 3:05bb8f0bd7a4 39
pangsk 0:908be729d27c 40
nherriot 6:c91e372617e3 41
pangsk 0:908be729d27c 42 ecu_reader obdii(CANSPEED_500); //Create object and set CAN speed
nherriot 6:c91e372617e3 43 void can_demo(void);
pangsk 0:908be729d27c 44 void gps_demo(void);
pangsk 0:908be729d27c 45 void sd_demo(void);
nherriot 6:c91e372617e3 46 void home(void); // Function to set the screen on a home position
pangsk 0:908be729d27c 47
nherriot 6:c91e372617e3 48 int main()
nherriot 6:c91e372617e3 49 {
pangsk 3:05bb8f0bd7a4 50 pc.baud(115200);
pangsk 0:908be729d27c 51 char buffer[20];
pangsk 3:05bb8f0bd7a4 52
pangsk 3:05bb8f0bd7a4 53 //Enable Pullup
pangsk 3:05bb8f0bd7a4 54 click.mode(PullUp);
pangsk 3:05bb8f0bd7a4 55 right.mode(PullUp);
pangsk 3:05bb8f0bd7a4 56 down.mode(PullUp);
pangsk 3:05bb8f0bd7a4 57 left.mode(PullUp);
pangsk 3:05bb8f0bd7a4 58 up.mode(PullUp);
pangsk 3:05bb8f0bd7a4 59
nherriot 6:c91e372617e3 60 // Display splash screen
nherriot 6:c91e372617e3 61 printf("Vodafone UBI Prototype \n");
pangsk 2:e7b3b8da71ff 62 lcd.locate(0,0); // Set LCD cursor position
nherriot 6:c91e372617e3 63 lcd.printf("Voda UBI Prototype");
pangsk 0:908be729d27c 64 lcd.locate(0,1);
nherriot 6:c91e372617e3 65 lcd.printf("www.vodafone.com");
nherriot 6:c91e372617e3 66 // Wait and clear screen
pangsk 0:908be729d27c 67 wait(3);
pangsk 0:908be729d27c 68 lcd.cls();
pangsk 0:908be729d27c 69
nherriot 6:c91e372617e3 70 // Call up the home menu
nherriot 6:c91e372617e3 71 home();
nherriot 6:c91e372617e3 72 }
nherriot 6:c91e372617e3 73
pangsk 0:908be729d27c 74
nherriot 6:c91e372617e3 75 void can_demo(void)
nherriot 6:c91e372617e3 76 {
nherriot 6:c91e372617e3 77 char buffer[20];
pangsk 0:908be729d27c 78 lcd.cls();
nherriot 6:c91e372617e3 79 pc.printf("\nVodafone CAN selelected:");
nherriot 6:c91e372617e3 80
nherriot 6:c91e372617e3 81 lcd.locate(0,0); // Set LCD cursor position
nherriot 6:c91e372617e3 82 lcd.printf("Voda Car Connect");
nherriot 6:c91e372617e3 83 lcd.locate(0,1);
nherriot 6:c91e372617e3 84 lcd.printf("CAN bus selected");
pangsk 0:908be729d27c 85
nherriot 6:c91e372617e3 86 while(1)
nherriot 6:c91e372617e3 87 { // Main CAN loop
nherriot 6:c91e372617e3 88 if(click == 0) home();
pangsk 0:908be729d27c 89 led2 = 1;
pangsk 0:908be729d27c 90 wait(0.1);
pangsk 0:908be729d27c 91 led2 = 0;
pangsk 0:908be729d27c 92 wait(0.1);
pangsk 0:908be729d27c 93
pangsk 0:908be729d27c 94 if(obdii.request(ENGINE_RPM,buffer) == 1) // Get engine rpm and display on LCD
pangsk 0:908be729d27c 95 {
pangsk 0:908be729d27c 96 lcd.locate(0,0);
pangsk 0:908be729d27c 97 lcd.printf(buffer);
pangsk 3:05bb8f0bd7a4 98 pc.printf(buffer);
pangsk 0:908be729d27c 99 }
pangsk 0:908be729d27c 100
pangsk 0:908be729d27c 101 if(obdii.request(ENGINE_COOLANT_TEMP,buffer) == 1)
pangsk 0:908be729d27c 102 {
pangsk 0:908be729d27c 103 lcd.locate(9,0);
pangsk 0:908be729d27c 104 lcd.printf(buffer);
pangsk 0:908be729d27c 105 }
pangsk 0:908be729d27c 106
pangsk 0:908be729d27c 107 if(obdii.request(VEHICLE_SPEED,buffer) == 1)
pangsk 0:908be729d27c 108 {
pangsk 0:908be729d27c 109 lcd.locate(0,1);
pangsk 0:908be729d27c 110 lcd.printf(buffer);
pangsk 0:908be729d27c 111 }
pangsk 0:908be729d27c 112
pangsk 0:908be729d27c 113 if(obdii.request(THROTTLE,buffer) ==1 )
pangsk 0:908be729d27c 114 {
pangsk 0:908be729d27c 115 lcd.locate(9,1);
pangsk 0:908be729d27c 116 lcd.printf(buffer);
pangsk 0:908be729d27c 117 }
pangsk 0:908be729d27c 118
pangsk 0:908be729d27c 119 }
nherriot 6:c91e372617e3 120
pangsk 0:908be729d27c 121 }
pangsk 0:908be729d27c 122
nherriot 6:c91e372617e3 123
nherriot 6:c91e372617e3 124
nherriot 6:c91e372617e3 125 void home(void)
nherriot 6:c91e372617e3 126 {
nherriot 6:c91e372617e3 127 pc.printf("\nVodafone Home Menu");
nherriot 6:c91e372617e3 128 lcd.cls();
nherriot 6:c91e372617e3 129 lcd.locate(0,0);
nherriot 6:c91e372617e3 130 lcd.printf("Home - use joystick");
nherriot 6:c91e372617e3 131 lcd.locate(0,1);
nherriot 6:c91e372617e3 132 lcd.printf("to select option...");
nherriot 6:c91e372617e3 133 wait(2);
nherriot 6:c91e372617e3 134 lcd.cls();
nherriot 6:c91e372617e3 135 lcd.locate(0,0);
nherriot 6:c91e372617e3 136 lcd.printf("Use joystick");
nherriot 6:c91e372617e3 137 lcd.locate(0,1);
nherriot 6:c91e372617e3 138 lcd.printf("U-CAN:D-GPS:L-SD:P-Ho");
nherriot 6:c91e372617e3 139 pc.printf("\nUse the joystick to select an option - hold down the joystick to get back to home");
nherriot 6:c91e372617e3 140 pc.printf("\nUp = CAN buss demo:Down = GPS demo:Left = SD demo: Press = Home");
nherriot 6:c91e372617e3 141
nherriot 6:c91e372617e3 142 while(1) // Wait until option is selected by the joystick
nherriot 6:c91e372617e3 143 {
nherriot 6:c91e372617e3 144
nherriot 6:c91e372617e3 145 if(down == 0) gps_demo();
nherriot 6:c91e372617e3 146 if(left == 0) sd_demo();
nherriot 6:c91e372617e3 147 if(up == 0) can_demo();
nherriot 6:c91e372617e3 148 }
nherriot 6:c91e372617e3 149
nherriot 6:c91e372617e3 150 }
nherriot 6:c91e372617e3 151
nherriot 6:c91e372617e3 152
pangsk 0:908be729d27c 153 void gps_demo(void)
pangsk 0:908be729d27c 154 {
nherriot 6:c91e372617e3 155
pangsk 0:908be729d27c 156 lcd.cls();
pangsk 0:908be729d27c 157 lcd.printf("GPS demo");
pangsk 0:908be729d27c 158 lcd.locate(0,1);
pangsk 0:908be729d27c 159 lcd.printf("Waiting for lock");
nherriot 6:c91e372617e3 160 pc.printf("\nVodafone Ublox GPS initiated");
nherriot 6:c91e372617e3 161 pc.printf("\nGPS Sampling starting....\n");
nherriot 6:c91e372617e3 162
pangsk 0:908be729d27c 163 while(1)
pangsk 0:908be729d27c 164 {
nherriot 6:c91e372617e3 165 if(click == 0) home();
nherriot 6:c91e372617e3 166 if(gps.sample())
nherriot 6:c91e372617e3 167 {
nherriot 6:c91e372617e3 168 lcd.cls();
pangsk 0:908be729d27c 169 lcd.printf("Long:%f", gps.longitude);
nherriot 6:c91e372617e3 170 lcd.locate(0,1);
pangsk 0:908be729d27c 171 lcd.printf("Lat:%f", gps.latitude);
nherriot 6:c91e372617e3 172 pc.printf("I'm at Latitude: %f, Longitude: %f\n", gps.latitude, gps.longitude);
nherriot 6:c91e372617e3 173 }
nherriot 6:c91e372617e3 174 else
nherriot 6:c91e372617e3 175 {
nherriot 6:c91e372617e3 176 pc.printf("Oh Dear! No lock :(\n");
nherriot 6:c91e372617e3 177 lcd.cls();
nherriot 6:c91e372617e3 178 lcd.printf("Waiting for lock");
nherriot 6:c91e372617e3 179 }
pangsk 0:908be729d27c 180 }
nherriot 6:c91e372617e3 181
nherriot 6:c91e372617e3 182 }
pangsk 0:908be729d27c 183
pangsk 0:908be729d27c 184 void sd_demo(void)
pangsk 0:908be729d27c 185 {
pangsk 2:e7b3b8da71ff 186 lcd.cls();
pangsk 3:05bb8f0bd7a4 187 printf("\nSD demo");
pangsk 2:e7b3b8da71ff 188 lcd.printf("SD demo");
pangsk 2:e7b3b8da71ff 189 wait(2);
pangsk 0:908be729d27c 190 lcd.cls();
pangsk 2:e7b3b8da71ff 191
pangsk 2:e7b3b8da71ff 192 FILE *fp = fopen("/sd/sdtest2.txt", "w");
pangsk 2:e7b3b8da71ff 193 if(fp == NULL) {
pangsk 2:e7b3b8da71ff 194 lcd.cls();
pangsk 2:e7b3b8da71ff 195 lcd.printf("Could not open file for write\n");
pangsk 3:05bb8f0bd7a4 196 pc.printf("\nCould not open file for write");
pangsk 2:e7b3b8da71ff 197 }
pangsk 2:e7b3b8da71ff 198 fprintf(fp, "Hello fun SD Card World! testing 1234");
pangsk 2:e7b3b8da71ff 199 fclose(fp);
pangsk 2:e7b3b8da71ff 200 lcd.locate(0,1);
pangsk 2:e7b3b8da71ff 201 lcd.printf("Writtern to SD card");
pangsk 3:05bb8f0bd7a4 202 pc.printf("\nWrittern to SD card");
pangsk 2:e7b3b8da71ff 203
pangsk 0:908be729d27c 204 while(1)
pangsk 0:908be729d27c 205 {
nherriot 6:c91e372617e3 206 if(click == 0) home();
pangsk 2:e7b3b8da71ff 207 led2 = 1;
pangsk 2:e7b3b8da71ff 208 wait(0.1);
pangsk 2:e7b3b8da71ff 209 led2 = 0;
pangsk 2:e7b3b8da71ff 210 wait(0.1);
pangsk 2:e7b3b8da71ff 211
pangsk 0:908be729d27c 212 }
pangsk 0:908be729d27c 213
pangsk 0:908be729d27c 214 }