Plz

Dependencies:   mbed CANMsg Adafruit_LEDBackpack

Committer:
fconboy
Date:
Thu Jul 25 18:03:54 2019 +0000
Revision:
2:36e6eccdfc1e
Parent:
1:6c993d149edc
Child:
3:b9db3d4cbe1b
Child:
4:e687888fa056
Working out how to get bytes to send in right order

Who changed what in which revision?

UserRevisionLine numberNew contents of line
StrawberryAubrey 0:db7d127e9819 1 #include "mbed.h"
StrawberryAubrey 0:db7d127e9819 2 #include "CANMsg.h"
StrawberryAubrey 0:db7d127e9819 3
fconboy 2:36e6eccdfc1e 4 //Ticker ticker;
fconboy 1:6c993d149edc 5 AnalogIn currentPot(p15);
fconboy 1:6c993d149edc 6 AnalogIn speedPot(p16);
StrawberryAubrey 0:db7d127e9819 7 DigitalIn enable(p5);
StrawberryAubrey 0:db7d127e9819 8 DigitalOut led1(LED1);
StrawberryAubrey 0:db7d127e9819 9 DigitalOut led2(LED2);
StrawberryAubrey 0:db7d127e9819 10 CAN can1(p9, p10);
StrawberryAubrey 0:db7d127e9819 11 //CAN can2(p30, p29);
StrawberryAubrey 0:db7d127e9819 12
StrawberryAubrey 0:db7d127e9819 13 //const uint16_t MY_ID = 0x500;
StrawberryAubrey 0:db7d127e9819 14 const uint16_t SIGNAL_ID = 0x501;
StrawberryAubrey 0:db7d127e9819 15 const uint16_t BUS_ID = 0x502;
StrawberryAubrey 0:db7d127e9819 16 char counter = 0;
StrawberryAubrey 0:db7d127e9819 17 Serial pc(USBTX, USBRX); // tx, rx
StrawberryAubrey 0:db7d127e9819 18
StrawberryAubrey 0:db7d127e9819 19 CANMsg driverControls;
StrawberryAubrey 0:db7d127e9819 20 CANMsg busCurrent;
StrawberryAubrey 0:db7d127e9819 21
StrawberryAubrey 0:db7d127e9819 22 //====================================================================
StrawberryAubrey 0:db7d127e9819 23
StrawberryAubrey 0:db7d127e9819 24 void printMsg(CANMessage& msg)
StrawberryAubrey 0:db7d127e9819 25 {
StrawberryAubrey 0:db7d127e9819 26 pc.printf("-------------------------------------\r\n");
StrawberryAubrey 0:db7d127e9819 27 pc.printf(" ID = 0x%.3x\r\n", msg.id);
StrawberryAubrey 0:db7d127e9819 28 pc.printf(" Type = %d\r\n", msg.type);
StrawberryAubrey 0:db7d127e9819 29 pc.printf(" Format = %d\r\n", msg.format);
StrawberryAubrey 0:db7d127e9819 30 pc.printf(" Length = %d\r\n", msg.len);
StrawberryAubrey 0:db7d127e9819 31 pc.printf(" Data =");
StrawberryAubrey 0:db7d127e9819 32 pc.printf("-------------------------------------\r\n");
StrawberryAubrey 0:db7d127e9819 33 for(int i = 0; i < msg.len; i++)
StrawberryAubrey 0:db7d127e9819 34 pc.printf(" 0x%.2X", msg.data[i]);
StrawberryAubrey 0:db7d127e9819 35 pc.printf("\r\n");
StrawberryAubrey 0:db7d127e9819 36 }
StrawberryAubrey 0:db7d127e9819 37
StrawberryAubrey 0:db7d127e9819 38 //=====================================================================
StrawberryAubrey 0:db7d127e9819 39 /*
StrawberryAubrey 0:db7d127e9819 40 void onCanReceived(CANMessage& msg)
StrawberryAubrey 0:db7d127e9819 41 {
StrawberryAubrey 0:db7d127e9819 42 can1.read(msg);
StrawberryAubrey 0:db7d127e9819 43 pc.printf("-------------------------------------\r\n");
StrawberryAubrey 0:db7d127e9819 44 pc.printf("CAN message received\r\n");
StrawberryAubrey 0:db7d127e9819 45 pc.printf("-------------------------------------\r\n");
StrawberryAubrey 0:db7d127e9819 46 printMsg(msg);
StrawberryAubrey 0:db7d127e9819 47
StrawberryAubrey 0:db7d127e9819 48 if (msg.id == MY_ID) {
StrawberryAubrey 0:db7d127e9819 49 // extract data from the received CAN message
StrawberryAubrey 0:db7d127e9819 50 // in the same order as it was added on the transmitter side
StrawberryAubrey 0:db7d127e9819 51 msg >> counter;
StrawberryAubrey 0:db7d127e9819 52 msg >> voltage;
StrawberryAubrey 0:db7d127e9819 53 pc.printf(" counter = %d\r\n", counter);
StrawberryAubrey 0:db7d127e9819 54 pc.printf(" voltage = %e V\r\n", voltage);
StrawberryAubrey 0:db7d127e9819 55 }
StrawberryAubrey 0:db7d127e9819 56 timer.start(); // to transmit next message in main
StrawberryAubrey 0:db7d127e9819 57 }
StrawberryAubrey 0:db7d127e9819 58 */
StrawberryAubrey 0:db7d127e9819 59 //======================================================================
StrawberryAubrey 0:db7d127e9819 60
StrawberryAubrey 0:db7d127e9819 61 void send()
StrawberryAubrey 0:db7d127e9819 62 {
StrawberryAubrey 0:db7d127e9819 63 if(can1.write(driverControls))
StrawberryAubrey 0:db7d127e9819 64 {
StrawberryAubrey 0:db7d127e9819 65 led1 = !led1;
StrawberryAubrey 0:db7d127e9819 66 }
StrawberryAubrey 0:db7d127e9819 67 else
StrawberryAubrey 0:db7d127e9819 68 {
StrawberryAubrey 0:db7d127e9819 69 led1 = 1;
StrawberryAubrey 0:db7d127e9819 70 led2 = 1;
StrawberryAubrey 0:db7d127e9819 71 wait(3);
StrawberryAubrey 0:db7d127e9819 72 }
StrawberryAubrey 0:db7d127e9819 73 }
StrawberryAubrey 0:db7d127e9819 74
fconboy 2:36e6eccdfc1e 75 unsigned int swap(unsigned int value)
fconboy 2:36e6eccdfc1e 76 {
fconboy 2:36e6eccdfc1e 77 value = ((value & 0xFFFF0000) >> 16) | ((value & 0x0000FFFF) << 16);
fconboy 2:36e6eccdfc1e 78 value = ((value & 0xFF00FF00) >> 8) | ((value & 0x00FF00FF) << 8);
fconboy 2:36e6eccdfc1e 79 //value = ((value & 0xF0F0F0F0) >> 4) | ((value & 0x0F0F0F0F) << 4);
fconboy 2:36e6eccdfc1e 80 //value = ((value & 0xCCCCCCCC) >> 2) | ((value & 0x33333333) << 2);
fconboy 2:36e6eccdfc1e 81 //value = ((value & 0xAAAAAAAA) >> 1) | ((value & 0x55555555) << 1);
fconboy 2:36e6eccdfc1e 82 return value;
fconboy 2:36e6eccdfc1e 83 }
fconboy 2:36e6eccdfc1e 84
StrawberryAubrey 0:db7d127e9819 85 int main()
StrawberryAubrey 0:db7d127e9819 86 {
fconboy 2:36e6eccdfc1e 87 //ticker.attach(&send, 0.1);
StrawberryAubrey 0:db7d127e9819 88 pc.baud(9600);
StrawberryAubrey 0:db7d127e9819 89 can1.frequency(1000000);
StrawberryAubrey 0:db7d127e9819 90 pc.printf("-------------------------------------\r\n");
StrawberryAubrey 0:db7d127e9819 91 printf("Attempting to send a CAN message\n");
StrawberryAubrey 0:db7d127e9819 92 //float signalCurrent = currentPot.read();
StrawberryAubrey 0:db7d127e9819 93 //float signalSpeed = speedPot.read();
StrawberryAubrey 0:db7d127e9819 94 float maxBusCurrent = 1.0;
StrawberryAubrey 0:db7d127e9819 95 printf("Current and Speed: %f and %f\n", currentPot.read(), speedPot.read());
StrawberryAubrey 0:db7d127e9819 96 pc.printf("-------------------------------------\r\n");
fconboy 2:36e6eccdfc1e 97 //while(1) {
fconboy 2:36e6eccdfc1e 98 printf("Entering transmission main code)\n");
StrawberryAubrey 0:db7d127e9819 99 //pc.printf("-------------------------------------\r\n");
StrawberryAubrey 0:db7d127e9819 100 driverControls.clear();
StrawberryAubrey 0:db7d127e9819 101 driverControls.id = SIGNAL_ID;
fconboy 1:6c993d149edc 102 // Append message with speed and current potentiometer s.
fconboy 2:36e6eccdfc1e 103 //float curr_val = currentPot.read();
fconboy 2:36e6eccdfc1e 104 //float speed_val = speedPot.read();
fconboy 2:36e6eccdfc1e 105 float curr_val = 0.1;
fconboy 2:36e6eccdfc1e 106 float speed_val = 1.0;
fconboy 2:36e6eccdfc1e 107 unsigned int *curr_as_int = (unsigned int *)&curr_val;
fconboy 2:36e6eccdfc1e 108 unsigned int *speed_as_int = (unsigned int *)&speed_val;
fconboy 2:36e6eccdfc1e 109 driverControls << swap(*curr_as_int);
fconboy 2:36e6eccdfc1e 110 driverControls << swap(*speed_as_int);
fconboy 2:36e6eccdfc1e 111 //driverControls << curr_val;
fconboy 2:36e6eccdfc1e 112 //driverControls << speed_val;
StrawberryAubrey 0:db7d127e9819 113 busCurrent.clear();
StrawberryAubrey 0:db7d127e9819 114 busCurrent.id = BUS_ID;
StrawberryAubrey 0:db7d127e9819 115 busCurrent << maxBusCurrent;
StrawberryAubrey 0:db7d127e9819 116 if(can1.write(busCurrent))
StrawberryAubrey 0:db7d127e9819 117 {
StrawberryAubrey 0:db7d127e9819 118 led2 = !led2;
StrawberryAubrey 0:db7d127e9819 119 }
StrawberryAubrey 0:db7d127e9819 120 send();
fconboy 2:36e6eccdfc1e 121 //}
StrawberryAubrey 0:db7d127e9819 122 }