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(); //} }