Plz

Dependencies:   mbed CANMsg Adafruit_LEDBackpack

main.cpp

Committer:
fconboy
Date:
2019-07-26
Revision:
6:be28839a8221
Parent:
5:6283f93fa278
Child:
7:060be032c57a

File content as of revision 6:be28839a8221:

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

Ticker ticker;
Timer timer;
AnalogIn currentPot(p15);
AnalogIn speedPot(p16);
DigitalIn ignition(p21);
DigitalIn regen(p22);
DigitalIn forwardreverse(p22);
DigitalIn brake(p22);
DigitalIn accel(p22);
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;
float curr_val = 0;
float speed_val = 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 setDriverControls()
{
    driverControls.clear();
    driverControls.id = SIGNAL_ID;
    driverControls << speed_val;
    driverControls << curr_val;
}

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

//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 = 1.0;
        //float speed_val = 50.0;
        //float a = 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 << speed_val;
        driverControls << curr_val;
        busCurrent.clear();
        busCurrent.id = BUS_ID;
        busCurrent << maxBusCurrent;
        if(can1.write(busCurrent))
        {
            led2 = !led2;
        }
        send();  
    //}
}