Plz
Dependencies: mbed CANMsg Adafruit_LEDBackpack
Diff: main.cpp
- Revision:
- 7:060be032c57a
- Parent:
- 6:be28839a8221
- Child:
- 8:3eb4fcab8ede
--- a/main.cpp Fri Jul 26 13:32:21 2019 +0000 +++ b/main.cpp Mon Aug 05 16:50:20 2019 +0000 @@ -1,27 +1,39 @@ #include "mbed.h" #include "CANMsg.h" +#include "Adafruit_LEDBackpack.h" Ticker ticker; Timer timer; AnalogIn currentPot(p15); +float curr_val = 0; +float curr_reading = 0; AnalogIn speedPot(p16); +float speed_val = 0; +float speed_reading = 0; +float speed_reading_ms = 0; +float speed_reading_kmh = 0; DigitalIn ignition(p21); DigitalIn regen(p22); -DigitalIn forwardreverse(p22); -DigitalIn brake(p22); -DigitalIn accel(p22); -DigitalIn enable(p5); -DigitalOut led1(LED1); -DigitalOut led2(LED2); -CAN can1(p9, p10); -//CAN can2(p30, p29); +DigitalIn rev(p23); +DigitalIn brake(p24); +DigitalIn accel(p25); +float maxBusCurrent = 1.0; + +I2C i2c(p28,p27); +Adafruit_LEDBackpack display(&i2c); -//const uint16_t MY_ID = 0x500; +DigitalOut debug1(LED1); +DigitalOut debug2(LED2); +DigitalOut debug3(LED3); +DigitalOut debug4(LED4); + +//CAN can1(p9, p10); +CAN can1(p30, p29); + const uint16_t SIGNAL_ID = 0x501; const uint16_t BUS_ID = 0x502; +const uint8_t DISPLAY_ADDR = 0x70; char counter = 0; -float curr_val = 0; -float speed_val = 0; Serial pc(USBTX, USBRX); // tx, rx CANMsg driverControls; @@ -66,76 +78,175 @@ */ //====================================================================== +void flash(int light) //Turns on one of the 4 mbed LEDs +{ if (light == 1) + {debug1 = 1; + wait(0.2); + debug1 = 0;} + else if (light == 2) + {debug2 = 1; + wait(0.2); + debug2 = 0;} + else if (light == 3) + {debug3 = 1; + wait(0.2); + debug3 = 0;} + else if (light == 4) + {debug4 = 1; + wait(0.2); + debug4 = 0;} + else if (light == 5) + {debug1 = 1; + debug2 = 1; + debug3 = 1; + debug4 = 1; + wait(0.2); + debug1 = 0; + debug2 = 0; + debug3 = 0; + debug4 = 0;}} + void setDriverControls() { driverControls.clear(); driverControls.id = SIGNAL_ID; driverControls << speed_val; driverControls << curr_val; + + busCurrent.clear(); + busCurrent.id = BUS_ID; + busCurrent << 0; + busCurrent << maxBusCurrent; } -void send() +void sendCAN() { setDriverControls(); + //printMsg(driverControls); + //printMsg(busCurrent); if(can1.write(driverControls)) - { - led1 = !led1; - } + { + debug1 = !debug1; + } else - { - led1 = 1; - led2 = 1; - wait(3); - } - timer.stop(); + { + //wait(0.5); + //flash(3); + } + + //if(can1.write(busCurrent)) + //{ + // debug2 = !debug2; + //} + //else + //{ + //wait(0.5); + //} } -//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"); + ticker.attach(&sendCAN, 1); + ignition.mode(PullUp); + regen.mode(PullUp); + rev.mode(PullUp); + brake.mode(PullUp); + accel.mode(PullUp); + + +// display.begin(DISPLAY_ADDR); +// for (int n = 0; n<16; n++) +// { +// display.setBrightness(n); +// for (int i = 0; i<10; i++) +// { +// display.displaybuffer[0] = i; +// display.displaybuffer[1] = i; +// display.displaybuffer[2] = 0; +// display.displaybuffer[3] = 0; +// display.displaybuffer[4] = 0; +// display.displaybuffer[5] = 0; +// display.displaybuffer[6] = 0; +// display.displaybuffer[7] = 0; +// display.writeDisplay(); +// wait(0.5); +// } +// } + + + //pc.printf("-------------------------------------\r\n"); + //printf("Attempting to send a CAN message\n"); + //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 = 1.0; - //float speed_val = 50.0; - //float a = 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 << speed_val; - driverControls << curr_val; - busCurrent.clear(); - busCurrent.id = BUS_ID; - busCurrent << maxBusCurrent; - if(can1.write(busCurrent)) + + //curr_val = 0.0; + //speed_val = 0.0; + curr_reading = currentPot.read(); + speed_reading = speedPot.read(); + speed_reading_ms = speed_reading * 30; + speed_reading_kmh = speed_reading_ms*3.6; + + bool ignition_reading = ignition.read(); + bool regen_reading = regen.read(); + bool rev_reading = rev.read(); + bool brake_reading = brake.read(); + bool accel_reading = accel.read(); + + //pc.printf("Current reading: %f\r\n", curr_reading); + //pc.printf("Speed reading: %f\r\n", speed_reading); + //pc.printf("Ignition reading: %d\r\n", ignition_reading); + //pc.printf("Regen reading: %d\r\n", regen_reading); + //pc.printf("Forward/reverse reading: %d\r\n", rev_reading); + //pc.printf("Brake reading: %d\r\n", brake_reading); + //pc.printf("Accelerator reading: %d\r\n\r\n", accel_reading); + //wait(2); + + if (ignition) + { + curr_val = 0; + speed_val = 0; + } + else { - led2 = !led2; + if (!brake && !regen) + { + speed_val = 0; + curr_val = curr_reading; + } + else if(!brake && regen) + { + speed_val = 0; + curr_val = 0; + } + else + { + if (!rev) + { + speed_val = (-1)*speed_reading_ms; + } + else + { + speed_val = speed_reading_ms; + } + + if (!accel) + { + curr_val = curr_reading; + } + else + { + curr_val = 0; + } + } } - send(); + //pc.printf("speed_val: %f\r\n", speed_val); + //pc.printf("curr_val: %f\r\n\r\n", curr_val); + //sendCAN(); + //pc.printf("\r\n\r\n"); + //wait(3); //} } \ No newline at end of file