Dependencies:   mbed

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

main.cpp

00001 #include "mbed.h"
00002 #include "CAN.h"
00003 
00004 Ticker ticker;
00005 
00006 DigitalOut led1(LED1);
00007 DigitalOut led2(LED2);
00008 
00009 // CAN_RS pin at Philips PCA82C250 can bus controller.
00010 // activate transceiver by pulling this pin to GND.
00011 // (Rise and fall slope controlled by resistor R_s)
00012 // (+5V result in tranceiver standby mode)
00013 // For further information see datasheet page 4
00014 DigitalOut can_Pca82c250SlopePin(p28);
00015 
00016 // second can controller on these pins. Not used here.
00017 // CAN can1(p9, p10);
00018 
00019 // We use can on mbed pins 29(CAN_TXD) and 30(CAN_RXD).
00020 CAN can2(p30, p29);
00021 
00022 void send() {
00023     static char counter = 0;
00024     if (can2.write(CANMessage(0x200, &counter, 1))) {
00025         printf("CanTx--> id: 0x200  dlc: 1  data: %x\n\r", counter);
00026         counter++;
00027     }
00028     // toggle led1 after every transmission
00029     led1 = !led1;
00030 }
00031 
00032 int main() {
00033     // 500kbit/s
00034     can2.frequency(500000);
00035     // activate external can transceiver
00036     can_Pca82c250SlopePin = 0;
00037     // every 500ms
00038     ticker.attach(&send, 0.5);
00039     /// create message object for message reception
00040     CANMessage can_MsgRx;
00041     while (1) {
00042         // send received messages to the pc via serial line (9k6, 8n1)
00043         if (can2.read(can_MsgRx)) {
00044             printf("CanRx--> id: 0x%x  dlc: %d  data: ", can_MsgRx.id, can_MsgRx.len);
00045             for (char i=0; i<can_MsgRx.len; i++) {
00046                 printf("%x ", can_MsgRx.data[i]);
00047             }
00048             printf("\n\r");
00049             // any incoming message: toggle led2
00050             led2 = !led2;
00051         }
00052     }
00053 }