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