Luis Silvio Cordova Rivadeneira
/
CAN_SPI_modulo
CAN_SPI_modulo_Seed_Studio
main.cpp@0:d3e39839c3e3, 2013-11-05 (annotated)
- Committer:
- Just4pLeisure
- Date:
- Tue Nov 05 23:00:35 2013 +0000
- Revision:
- 0:d3e39839c3e3
- Child:
- 1:d31ce42d53a1
Simple Demo for my Seeed Studios' CAN-BUS Shield library
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
Just4pLeisure | 0:d3e39839c3e3 | 1 | #include "mbed.h" |
Just4pLeisure | 0:d3e39839c3e3 | 2 | #include "seeed_can.h" |
Just4pLeisure | 0:d3e39839c3e3 | 3 | |
Just4pLeisure | 0:d3e39839c3e3 | 4 | SEEED_CAN CAN(SEEED_CAN_CS); // Seeed Studios' CAN-BUS Shield |
Just4pLeisure | 0:d3e39839c3e3 | 5 | Serial pc(USBTX, USBRX); // USB serial port TTYACM0 |
Just4pLeisure | 0:d3e39839c3e3 | 6 | |
Just4pLeisure | 0:d3e39839c3e3 | 7 | Ticker minute; |
Just4pLeisure | 0:d3e39839c3e3 | 8 | Timer timestamp; |
Just4pLeisure | 0:d3e39839c3e3 | 9 | |
Just4pLeisure | 0:d3e39839c3e3 | 10 | void resetTimestamp() |
Just4pLeisure | 0:d3e39839c3e3 | 11 | { |
Just4pLeisure | 0:d3e39839c3e3 | 12 | timestamp.reset(); |
Just4pLeisure | 0:d3e39839c3e3 | 13 | } |
Just4pLeisure | 0:d3e39839c3e3 | 14 | |
Just4pLeisure | 0:d3e39839c3e3 | 15 | int main() |
Just4pLeisure | 0:d3e39839c3e3 | 16 | { |
Just4pLeisure | 0:d3e39839c3e3 | 17 | SEEED_CANMessage canMsg; |
Just4pLeisure | 0:d3e39839c3e3 | 18 | |
Just4pLeisure | 0:d3e39839c3e3 | 19 | printf("Seeed Studios CAN-BUS Shield 'Hello World' program :-)\r\n"); |
Just4pLeisure | 0:d3e39839c3e3 | 20 | timestamp.start(); |
Just4pLeisure | 0:d3e39839c3e3 | 21 | minute.attach(&resetTimestamp, 60.0); // Reset the 'Timestamp' timer every minute |
Just4pLeisure | 0:d3e39839c3e3 | 22 | CAN.frequency(500000); // init can bus, baudrate: 500k |
Just4pLeisure | 0:d3e39839c3e3 | 23 | CAN.Mask(0, 0x7FF); // init Masks |
Just4pLeisure | 0:d3e39839c3e3 | 24 | CAN.Mask(1, 0x7FF, CANStandard); // init Masks |
Just4pLeisure | 0:d3e39839c3e3 | 25 | CAN.Filter(0, 0x7E8); // init filters - 0x7E8 T8 ECU id |
Just4pLeisure | 0:d3e39839c3e3 | 26 | while (CAN.read(canMsg)); // Empty any unfiltered messages in the receive buffers |
Just4pLeisure | 0:d3e39839c3e3 | 27 | // Read and Display the VIN code stored in a GMLAN ECU |
Just4pLeisure | 0:d3e39839c3e3 | 28 | char VIN[18] = {NULL}; |
Just4pLeisure | 0:d3e39839c3e3 | 29 | // Request VIN using ReadDataByIdentifier method using DID |
Just4pLeisure | 0:d3e39839c3e3 | 30 | char reqvin[] = {0x02,0x1A,0x90,0x00,0x00,0x00,0x00,0x00}; |
Just4pLeisure | 0:d3e39839c3e3 | 31 | CAN.write(SEEED_CANMessage(0x7E0, reqvin)); |
Just4pLeisure | 0:d3e39839c3e3 | 32 | while (!(CAN.read(canMsg) && (canMsg.id == 0x7E8))); |
Just4pLeisure | 0:d3e39839c3e3 | 33 | memcpy(VIN+0, canMsg.data+4, 4); |
Just4pLeisure | 0:d3e39839c3e3 | 34 | // Send Trionic8 a "Flow Control Message to get the rest of the VIN |
Just4pLeisure | 0:d3e39839c3e3 | 35 | char floctl[] = {0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00}; |
Just4pLeisure | 0:d3e39839c3e3 | 36 | CAN.write(SEEED_CANMessage(0x7E0, floctl)); |
Just4pLeisure | 0:d3e39839c3e3 | 37 | while (!(CAN.read(canMsg) && (canMsg.id == 0x7E8))); |
Just4pLeisure | 0:d3e39839c3e3 | 38 | memcpy(VIN+4, canMsg.data+1, 7); |
Just4pLeisure | 0:d3e39839c3e3 | 39 | while (!(CAN.read(canMsg) && (canMsg.id == 0x7E8))); |
Just4pLeisure | 0:d3e39839c3e3 | 40 | memcpy(VIN+11, canMsg.data+1, 6); |
Just4pLeisure | 0:d3e39839c3e3 | 41 | printf("VIN code: %s\r\n",VIN); |
Just4pLeisure | 0:d3e39839c3e3 | 42 | // Display all messages on the CAN-BUS |
Just4pLeisure | 0:d3e39839c3e3 | 43 | CAN.Mask(0, NULL); // Clear the mask to accept all meassages |
Just4pLeisure | 0:d3e39839c3e3 | 44 | while (1) { |
Just4pLeisure | 0:d3e39839c3e3 | 45 | if (CAN.read(canMsg)) { |
Just4pLeisure | 0:d3e39839c3e3 | 46 | printf("*** T%05dI%03xL%dD", timestamp.read_ms(), canMsg.id, canMsg.len); |
Just4pLeisure | 0:d3e39839c3e3 | 47 | for (uint32_t i=0; i<canMsg.len; i++) |
Just4pLeisure | 0:d3e39839c3e3 | 48 | printf("%02x", canMsg.data[i]); |
Just4pLeisure | 0:d3e39839c3e3 | 49 | printf(" ***\r"); |
Just4pLeisure | 0:d3e39839c3e3 | 50 | } |
Just4pLeisure | 0:d3e39839c3e3 | 51 | } |
Just4pLeisure | 0:d3e39839c3e3 | 52 | } |