Plz
Dependencies: mbed CANMsg Adafruit_LEDBackpack
main.cpp@2:36e6eccdfc1e, 2019-07-25 (annotated)
- 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?
User | Revision | Line number | New 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 | } |