This 'Hello World' program uses many of the SEEED_CAN library functions to display the VIN number stored in a GMLAN ECU then display all CAN messages on the CAN-BUS.

Dependencies:   SEEED_CAN mbed

Fork of Seeed_CAN_Hello_World by Sophie Dexter

Files at this revision

API Documentation at this revision

Comitter:
Just4pLeisure
Date:
Tue Nov 05 23:00:35 2013 +0000
Child:
1:d31ce42d53a1
Commit message:
Simple Demo for my Seeed Studios' CAN-BUS Shield library

Changed in this revision

SEEED_CAN.lib Show annotated file Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
mbed.bld Show annotated file Show diff for this revision Revisions of this file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/SEEED_CAN.lib	Tue Nov 05 23:00:35 2013 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/Just4pLeisure/code/SEEED_CAN/#f5d099885d3d
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Tue Nov 05 23:00:35 2013 +0000
@@ -0,0 +1,52 @@
+#include "mbed.h"
+#include "seeed_can.h"
+
+SEEED_CAN CAN(SEEED_CAN_CS);                                            // Seeed Studios' CAN-BUS Shield
+Serial pc(USBTX, USBRX);                                                // USB serial port TTYACM0
+
+Ticker minute;
+Timer timestamp;
+
+void resetTimestamp()
+{
+    timestamp.reset();
+}
+
+int main()
+{
+    SEEED_CANMessage canMsg;
+
+    printf("Seeed Studios CAN-BUS Shield 'Hello World' program :-)\r\n");
+    timestamp.start();
+    minute.attach(&resetTimestamp, 60.0);                               // Reset the 'Timestamp' timer every minute
+    CAN.frequency(500000);                                              // init can bus, baudrate: 500k
+    CAN.Mask(0, 0x7FF);                                                 // init Masks
+    CAN.Mask(1, 0x7FF, CANStandard);                                    // init Masks
+    CAN.Filter(0, 0x7E8);                                               // init filters - 0x7E8 T8 ECU id
+    while (CAN.read(canMsg));                                           // Empty any unfiltered messages in the receive buffers
+// Read and Display the VIN code stored in a GMLAN ECU
+    char VIN[18] = {NULL};
+// Request VIN using ReadDataByIdentifier method using DID
+    char reqvin[] = {0x02,0x1A,0x90,0x00,0x00,0x00,0x00,0x00};
+    CAN.write(SEEED_CANMessage(0x7E0, reqvin));
+    while (!(CAN.read(canMsg) && (canMsg.id == 0x7E8)));
+    memcpy(VIN+0, canMsg.data+4, 4);
+// Send Trionic8 a "Flow Control Message to get the rest of the VIN
+    char floctl[] = {0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
+    CAN.write(SEEED_CANMessage(0x7E0, floctl));
+    while (!(CAN.read(canMsg) && (canMsg.id == 0x7E8)));
+    memcpy(VIN+4, canMsg.data+1, 7);
+    while (!(CAN.read(canMsg) && (canMsg.id == 0x7E8)));
+    memcpy(VIN+11, canMsg.data+1, 6);
+    printf("VIN code: %s\r\n",VIN);
+// Display all messages on the CAN-BUS
+    CAN.Mask(0, NULL);                                                  // Clear the mask to accept all meassages
+    while (1) {
+        if (CAN.read(canMsg)) {
+            printf("*** T%05dI%03xL%dD", timestamp.read_ms(), canMsg.id, canMsg.len);
+            for (uint32_t i=0; i<canMsg.len; i++)
+                printf("%02x", canMsg.data[i]);
+            printf(" ***\r");
+        }
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed.bld	Tue Nov 05 23:00:35 2013 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/mbed_official/code/mbed/builds/a9913a65894f
\ No newline at end of file