Plz

Dependencies:   mbed CANMsg Adafruit_LEDBackpack

main.cpp

Committer:
StrawberryAubrey
Date:
2019-07-24
Revision:
0:db7d127e9819
Child:
1:6c993d149edc

File content as of revision 0:db7d127e9819:

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

Ticker ticker;
AnalogIn currentPot(A0);
AnalogIn speedPot(A1);
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);
        }
}

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 potentiometres.
        driverControls << currentPot.read();
        driverControls << speedPot.read();
        busCurrent.clear();
        busCurrent.id = BUS_ID;
        busCurrent << maxBusCurrent;
        if(can1.write(busCurrent))
        {
            led2 = !led2;
        }
        send();  
    }
}