Formula Student / Mbed 2 deprecated Canbus_test

Dependencies:   mbed

main.cpp

Committer:
ArmandLambrechts
Date:
2017-11-22
Revision:
0:d9f4fedf5253
Child:
1:12ddbe69b6e6

File content as of revision 0:d9f4fedf5253:

/*** Thread: CAN ***
 * Test CAN Messages
 *WERKT 25/10/2017
 */
#include "mbed.h"
#include "CAN.h"
 
/* CAN (RD TD) */
CAN can(PA_11, PA_12);

DigitalOut canEN(PA_10);
/* Heartbeat */
DigitalOut led(LED1);
 
/* Structures to help pack and unpack the 8 CAN data bytes */
typedef struct bytes_64 {
    uint8_t b0;
    uint8_t b1;
    uint8_t b2;
    uint8_t b3;
    uint8_t b4;
    uint8_t b5;
    uint8_t b6;
    uint8_t b7;
} bytes_64;
 
typedef union {
    uint64_t data;
    bytes_64 bytes;
} data_packed;
 
 
/* main */
int main() {
    
    printf("\r\n---Start---\r\n");
 
    data_packed send_data;      //struct for send message
    data_packed receive_data;   //struct for rcv message
    CANMessage msg;             //message object for rcv
    int send_id = 15;           //send message id
    int send_status = 0;
    
    canEN = 0;
    /* Config Loopback and Frequency */
    send_data.data = 0;
    can.frequency(1000000);
    //can.mode(CAN::LocalTest);
 
    /* Loop */
    while (true) {
 
        /* Send */
        send_status = can.write(CANMessage(send_id, (char*) &send_data, 8));
 
        if (send_status == true) {
            send_data.data = send_data.data + 1;
        }
 
        /* Receive */
        if (can.read(msg)) {
            //move message bytes to receive, so we can access as a uint64_t (u long long)
            receive_data.bytes.b7 = msg.data[7];
            receive_data.bytes.b6 = msg.data[6];
            receive_data.bytes.b5 = msg.data[5];
            receive_data.bytes.b4 = msg.data[4];
            receive_data.bytes.b3 = msg.data[3];
            receive_data.bytes.b2 = msg.data[2];
            receive_data.bytes.b1 = msg.data[1];
            receive_data.bytes.b0 = msg.data[0];
 
            printf("Message received ID,Msg: %d, %llu\r\n", msg.id, receive_data.data);
        }
 
        /* Heartbeat */
        led = !led;
 
        wait(0.5);
    } //while
}