Plz

Dependencies:   mbed CANMsg Adafruit_LEDBackpack

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?

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