CANtest module (A base for more complex ones)

Dependencies:   mbed-STM32F103C8T6 mbed

Fork of CANtest by Melchior Pau

Revision:
0:af731d8a8d2c
Child:
1:3759c5f6cf76
diff -r 000000000000 -r af731d8a8d2c main.cpp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Fri Feb 11 14:57:24 2011 +0000
@@ -0,0 +1,167 @@
+#include "mbed.h"
+#include "CAN.h"
+
+Ticker ticker;
+DigitalOut led1(LED1);
+DigitalOut led2(LED2);
+CAN can1(p9, p10);  // rd, td
+CAN can2(p30, p29);
+
+int counter = 0;
+char data[8];
+CANMessage msg;
+
+
+void send() {
+    if(counter==0) {
+        //--------Global Start nodes
+        data[0] = (char)(0x01); // NMT Start RemoteNode
+        data[1] = (char)(0x00); // Global
+        data[2] = (char)(0x00);
+        data[3] = (char)(0x00);
+        data[4] = (char)(0x00);
+        data[5] = (char)(0x00);
+        data[6] = (char)(0x00);
+        data[7] = (char)(0x00);
+        if(can1.write(CANMessage(0000,data,2))) {
+            printf("Startup sent \n");
+        }
+        led1 = !led1;
+        counter ++;
+    }
+    else if(counter==1) {
+        //--------LSS Configure mode
+        data[0] = (char)(0x04); // LSS Set Mode
+        data[1] = (char)(0x01); // Mode Configure
+        data[2] = (char)(0x00);
+        data[3] = (char)(0x00);
+        data[4] = (char)(0x00);
+        data[5] = (char)(0x00);
+        data[6] = (char)(0x00);
+        data[7] = (char)(0x00);
+        if(can1.write(CANMessage(2021,data,2))) {
+            printf("LSS Config mode sent \n");
+        }
+        led1 = !led1;
+        counter ++;
+    }
+    else if(counter==2) {
+        //--------LSS Set Node_ID
+        data[0] = (char)(0x11); // LSS Set Node_ID
+        data[1] = (char)(0x01); // to Node_ID: 01
+        data[2] = (char)(0x00);
+        data[3] = (char)(0x00);
+        data[4] = (char)(0x00);
+        data[5] = (char)(0x00);
+        data[6] = (char)(0x00);
+        data[7] = (char)(0x00);
+        if(can1.write(CANMessage(2021,data,2))) {
+            printf("LSS Set Node_ID to 0x01 sent \n");
+        }
+        led1 = !led1;
+        counter ++;
+    }
+    else if(counter==3) {
+        //--------LSS Save Config
+        data[0] = (char)(0x17); // LSS Save Config
+        data[1] = (char)(0x00);
+        data[2] = (char)(0x00);
+        data[3] = (char)(0x00);
+        data[4] = (char)(0x00);
+        data[5] = (char)(0x00);
+        data[6] = (char)(0x00);
+        data[7] = (char)(0x00);
+        if(can1.write(CANMessage(2021,data,1))) {
+            printf("LSS Save Config sent \n");
+        }
+        led1 = !led1;
+        counter ++;
+    }
+    else if(counter==4) {
+        //--------LSS Set Baudrate
+        data[0] = (char)(0x13); // LSS Set Baudrate
+        data[1] = (char)(0x00); // 
+        data[2] = (char)(0x02); // Baudrate index (500kb/s)
+        data[3] = (char)(0x00);
+        data[4] = (char)(0x00);
+        data[5] = (char)(0x00);
+        data[6] = (char)(0x00);
+        data[7] = (char)(0x00);
+        if(can1.write(CANMessage(2021,data,3))) {
+            printf("LSS Config mode sent \n");
+        }
+        led1 = !led1;
+        counter ++;
+    }
+    /*else if(counter==5) (
+        //--------LSS Set Bit timing
+        data[0] = (char)(0x15); // LSS Set Bit timing
+        data[1] = (char)(0x00); // Mode Configure
+        data[2] = (char)(0x00);
+        data[3] = (char)(0x00);
+        data[4] = (char)(0x00);
+        data[5] = (char)(0x00);
+        data[6] = (char)(0x00);
+        data[7] = (char)(0x00);
+        if(can1.write(CANMessage(2021,data,2))) {
+            printf("LSS Config mode sent \n");
+        }
+        led1 = !led1;
+        counter ++;
+    }*/
+    else if(counter==5) {
+        //--------LSS Operation Mode
+        data[0] = (char)(0x04); // LSS Set Mode
+        data[1] = (char)(0x00); // Mode operation
+        data[2] = (char)(0x00);
+        data[3] = (char)(0x00);
+        data[4] = (char)(0x00);
+        data[5] = (char)(0x00);
+        data[6] = (char)(0x00);
+        data[7] = (char)(0x00);
+        if(can1.write(CANMessage(2021,data,2))) {
+            printf("LSS Operation mode sent \n");
+        }
+        led1 = !led1;
+        counter ++;
+    }
+    else {
+        //--------Inquire IDNode_ID
+        data[0] = (char)(0x5E);
+        data[1] = (char)(0x00);
+        data[2] = (char)(0x00);
+        data[3] = (char)(0x00);
+        data[4] = (char)(0x00);
+        data[5] = (char)(0x00);
+        data[6] = (char)(0x00);
+        data[7] = (char)(0x00);
+        if(can1.write(CANMessage(2021,data,1))) {
+            printf("Status check sent \n");
+        }
+        led1 = !led1;
+        counter = 10;
+    }    
+}
+
+int main() {
+    can2.frequency(500000); //500kbit/s
+    can1.frequency(500000);
+    ticker.attach(&send, 1); //Send every second
+    while(1) {
+        if(can2.read(msg)) {
+            printf("Message read with ID: %d\n", msg.id);
+            printf("Data: %x", msg.data[0]);
+            printf(" %x", msg.data[1]);
+            printf(" %x", msg.data[2]);
+            printf(" %x", msg.data[3]);
+            printf(" %x", msg.data[4]);
+            printf(" %x", msg.data[5]);
+            printf(" %x", msg.data[6]);
+            printf(" %x\n", msg.data[7]);
+            printf("Length: %d", msg.len);
+            printf(", Type: %d", msg.type);
+            printf(", Format: %d\n\n", msg.format);
+            led2 = !led2;
+        }
+    }
+}
\ No newline at end of file