Simple CAN test based on SKpang's work

Dependencies:   CANInterface mbed

Fork of ecu_reader by Nicholas Herriot

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?

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);
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 }