Plz

Dependencies:   mbed CANMsg Adafruit_LEDBackpack

main.cpp

Committer:
fconboy
Date:
2019-07-25
Revision:
2:36e6eccdfc1e
Parent:
1:6c993d149edc
Child:
3:b9db3d4cbe1b
Child:
4:e687888fa056

File content as of revision 2:36e6eccdfc1e:

#include "mbed.h"
#include "CANMsg.h"

//Ticker ticker;
AnalogIn currentPot(p15);
AnalogIn speedPot(p16);
DigitalIn enable(p5);
DigitalOut led1(LED1);
DigitalOut led2(LED2);
CAN can1(p9, p10);
//CAN can2(p30, p29);

//const uint16_t MY_ID = 0x500;
const uint16_t SIGNAL_ID = 0x501;
const uint16_t BUS_ID = 0x502;
char counter = 0;
Serial pc(USBTX, USBRX); // tx, rx

CANMsg driverControls;
CANMsg busCurrent;

//====================================================================

void printMsg(CANMessage& msg)
{
    pc.printf("-------------------------------------\r\n");
    pc.printf("  ID      = 0x%.3x\r\n", msg.id);
    pc.printf("  Type    = %d\r\n", msg.type);
    pc.printf("  Format  = %d\r\n", msg.format);
    pc.printf("  Length  = %d\r\n", msg.len);
    pc.printf("  Data    =");
    pc.printf("-------------------------------------\r\n");
    for(int i = 0; i < msg.len; i++)
        pc.printf(" 0x%.2X", msg.data[i]);
    pc.printf("\r\n");
}

//=====================================================================
/*
void onCanReceived(CANMessage& msg)
{
    can1.read(msg);
    pc.printf("-------------------------------------\r\n");
    pc.printf("CAN message received\r\n");
    pc.printf("-------------------------------------\r\n");
    printMsg(msg);
 
    if (msg.id == MY_ID) {
        // extract data from the received CAN message 
        // in the same order as it was added on the transmitter side
        msg >> counter;
        msg >> voltage;    
        pc.printf("  counter = %d\r\n", counter);
        pc.printf("  voltage = %e V\r\n", voltage);
    }
    timer.start(); // to transmit next message in main
}
*/
//======================================================================

void send()
{
    if(can1.write(driverControls))
        {
            led1 = !led1;
        } 
    else
        {
            led1 = 1;
            led2 = 1;
            wait(3);
        }
}

unsigned int swap(unsigned int value)
{
    value = ((value & 0xFFFF0000) >> 16) | ((value & 0x0000FFFF) << 16);
    value = ((value & 0xFF00FF00) >> 8) | ((value & 0x00FF00FF) << 8);
    //value = ((value & 0xF0F0F0F0) >> 4) | ((value & 0x0F0F0F0F) << 4);
    //value = ((value & 0xCCCCCCCC) >> 2) | ((value & 0x33333333) << 2);
    //value = ((value & 0xAAAAAAAA) >> 1) | ((value & 0x55555555) << 1);
    return value;
}

int main()
{
    //ticker.attach(&send, 0.1);
    pc.baud(9600);
    can1.frequency(1000000);
    pc.printf("-------------------------------------\r\n");
    printf("Attempting to send a CAN message\n");
    //float signalCurrent = currentPot.read();
    //float signalSpeed = speedPot.read();
    float maxBusCurrent = 1.0;
    printf("Current and Speed: %f and %f\n", currentPot.read(), speedPot.read());
    pc.printf("-------------------------------------\r\n");
    //while(1) {
        printf("Entering transmission main code)\n");
        //pc.printf("-------------------------------------\r\n");
        driverControls.clear();
        driverControls.id = SIGNAL_ID;
        // Append message with speed and current potentiometer s.
        //float curr_val = currentPot.read();
        //float speed_val = speedPot.read();
        float curr_val = 0.1;
        float speed_val = 1.0;
        unsigned int *curr_as_int  = (unsigned int *)&curr_val;
        unsigned int *speed_as_int  = (unsigned int *)&speed_val;
        driverControls << swap(*curr_as_int);
        driverControls << swap(*speed_as_int);
        //driverControls << curr_val;
        //driverControls << speed_val;
        busCurrent.clear();
        busCurrent.id = BUS_ID;
        busCurrent << maxBusCurrent;
        if(can1.write(busCurrent))
        {
            led2 = !led2;
        }
        send();  
    //}
}