new battery bar
Dependencies: CAN_IDs CanControl Dashboard PinDetect PowerControl mbed-rtos mbed
main.cpp@17:91ba27c14991, 2017-05-22 (annotated)
- Committer:
- zathorix
- Date:
- Mon May 22 18:16:09 2017 +0000
- Revision:
- 17:91ba27c14991
- Parent:
- 16:c5427db9edf0
- Child:
- 18:aa6feb4b73e7
Implemented telemetry, haven't tested with fona yet but should trivially work
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
kwasymodo | 1:c5d8ea5d049b | 1 | /******************************************************************************* |
kwasymodo | 4:dfd10f43cc8b | 2 | This software is especially designed for Solarboat Twente for the use in their Solarboat v1.0 |
kwasymodo | 1:c5d8ea5d049b | 3 | |
kwasymodo | 1:c5d8ea5d049b | 4 | Written by: |
kwasymodo | 1:c5d8ea5d049b | 5 | Niels Leijen, Jesse van Rhijn, Bram Seinhorst |
kwasymodo | 1:c5d8ea5d049b | 6 | |
kwasymodo | 1:c5d8ea5d049b | 7 | Thanks to: |
kwasymodo | 1:c5d8ea5d049b | 8 | Jasper Admiraal, Hidde Pik (hihihihi), Lisa Postma, Heleen Jeurink, Ruben Peters, |
kwasymodo | 1:c5d8ea5d049b | 9 | Martijn Groot Jebbink, Martijn Wilpshaar, Bram Seinhorst, Robert Geels, Arnoud Meutstege, |
kwasymodo | 4:dfd10f43cc8b | 10 | Jeroen te Braake, Ids de Vos, Jesse van Rhijn, Sam Benou, Niels Leijen and Mark Bruijn |
kwasymodo | 1:c5d8ea5d049b | 11 | |
kwasymodo | 1:c5d8ea5d049b | 12 | DISCLAIMER: |
kwasymodo | 1:c5d8ea5d049b | 13 | THIS SOFTWARE IS SUPPLIED "AS IS" WITHOUT ANY WARRANTIES AND SUPPORT. |
kwasymodo | 1:c5d8ea5d049b | 14 | SOLARBOATTWENTE ASSUMES NO RESPONSIBILITY OR LIABILITY FOR THE USE OF THE SOFTWARE. |
kwasymodo | 1:c5d8ea5d049b | 15 | *******************************************************************************/ |
kwasymodo | 1:c5d8ea5d049b | 16 | |
kwasymodo | 1:c5d8ea5d049b | 17 | // uncomment to send debug information |
kwasymodo | 1:c5d8ea5d049b | 18 | #define DEBUG |
kwasymodo | 1:c5d8ea5d049b | 19 | |
kwasymodo | 1:c5d8ea5d049b | 20 | //include 3rd party libraries |
kwasymodo | 4:dfd10f43cc8b | 21 | #include "mbed.h" //needs to be revision 136 else SD filesystem will not work |
kwasymodo | 1:c5d8ea5d049b | 22 | #include "rtos.h" |
kwasymodo | 1:c5d8ea5d049b | 23 | |
kwasymodo | 1:c5d8ea5d049b | 24 | // include Solarboat libraries |
kwasymodo | 1:c5d8ea5d049b | 25 | #include "pinout.h" |
zathorix | 14:0ad1bc8be76b | 26 | #include "CAN_IDs.h" |
kwasymodo | 1:c5d8ea5d049b | 27 | #include "PowerControl.h" |
zathorix | 16:c5427db9edf0 | 28 | #include "TelemetryAndDaq.h" |
zathorix | 16:c5427db9edf0 | 29 | #include "Dashboard.h" |
kwasymodo | 1:c5d8ea5d049b | 30 | |
zathorix | 15:56b25cffa523 | 31 | #define SPEED_THRESH 0.02 //threshold for setting speed to prevent CAN spam |
zathorix | 14:0ad1bc8be76b | 32 | |
kwasymodo | 1:c5d8ea5d049b | 33 | // initialize serial connection for debug |
kwasymodo | 1:c5d8ea5d049b | 34 | #ifdef DEBUG |
kwasymodo | 3:b164662f9740 | 35 | RawSerial pc(SERIAL_TX, SERIAL_RX); |
kwasymodo | 1:c5d8ea5d049b | 36 | #endif |
kwasymodo | 1:c5d8ea5d049b | 37 | |
kwasymodo | 1:c5d8ea5d049b | 38 | // initialize canbus |
kwasymodo | 1:c5d8ea5d049b | 39 | CAN can(CAN_RD, CAN_TD); |
kwasymodo | 1:c5d8ea5d049b | 40 | |
zathorix | 14:0ad1bc8be76b | 41 | //init throttle |
zathorix | 14:0ad1bc8be76b | 42 | AnalogIn analogThrottle(STEER_THROTTLE); |
zathorix | 14:0ad1bc8be76b | 43 | |
kwasymodo | 1:c5d8ea5d049b | 44 | // initialze onboard leds |
kwasymodo | 1:c5d8ea5d049b | 45 | DigitalOut ledError(LED3); |
kwasymodo | 1:c5d8ea5d049b | 46 | DigitalOut ledSD(LED1); |
kwasymodo | 1:c5d8ea5d049b | 47 | DigitalOut ledFona(LED5); |
kwasymodo | 1:c5d8ea5d049b | 48 | DigitalOut led24V(LED4); |
kwasymodo | 1:c5d8ea5d049b | 49 | |
kwasymodo | 11:005a50dd7db5 | 50 | DigitalOut buckXSens(BUCK3); |
kwasymodo | 11:005a50dd7db5 | 51 | DigitalOut buckScreen(BUCK4); |
kwasymodo | 11:005a50dd7db5 | 52 | DigitalOut buck24V(BUCK5); |
kwasymodo | 1:c5d8ea5d049b | 53 | |
zathorix | 16:c5427db9edf0 | 54 | //external classes |
zathorix | 16:c5427db9edf0 | 55 | extern DataAcquisition daq; |
zathorix | 17:91ba27c14991 | 56 | extern Telemetrics telemetrics; |
kwasymodo | 1:c5d8ea5d049b | 57 | |
zathorix | 16:c5427db9edf0 | 58 | //external variables |
zathorix | 16:c5427db9edf0 | 59 | extern long long int starttime; |
kwasymodo | 11:005a50dd7db5 | 60 | |
zathorix | 16:c5427db9edf0 | 61 | //external threads |
zathorix | 16:c5427db9edf0 | 62 | extern Thread threadbg; |
kwasymodo | 1:c5d8ea5d049b | 63 | |
zathorix | 15:56b25cffa523 | 64 | //global var for speed; ugly solution but works |
zathorix | 14:0ad1bc8be76b | 65 | float speed = 0; |
zathorix | 14:0ad1bc8be76b | 66 | |
zathorix | 16:c5427db9edf0 | 67 | //thread function declarations |
zathorix | 16:c5427db9edf0 | 68 | void readThrottle(); |
zathorix | 16:c5427db9edf0 | 69 | void power(); |
zathorix | 16:c5427db9edf0 | 70 | void test(); |
zathorix | 16:c5427db9edf0 | 71 | void background(); |
zathorix | 14:0ad1bc8be76b | 72 | |
kwasymodo | 1:c5d8ea5d049b | 73 | // Thread 0 - DO NOT CHANGE THIS! |
kwasymodo | 1:c5d8ea5d049b | 74 | int main() { |
kwasymodo | 1:c5d8ea5d049b | 75 | #ifdef DEBUG |
kwasymodo | 1:c5d8ea5d049b | 76 | pc.baud(115200); |
kwasymodo | 3:b164662f9740 | 77 | pc.printf("Starting SOS V1.0\n"); |
kwasymodo | 1:c5d8ea5d049b | 78 | #endif |
kwasymodo | 1:c5d8ea5d049b | 79 | // change CAN frequency |
kwasymodo | 1:c5d8ea5d049b | 80 | can.frequency(250000); |
kwasymodo | 1:c5d8ea5d049b | 81 | |
kwasymodo | 1:c5d8ea5d049b | 82 | // initialze threads |
zathorix | 15:56b25cffa523 | 83 | Thread threadpower; |
zathorix | 15:56b25cffa523 | 84 | Thread threadtest; |
zathorix | 14:0ad1bc8be76b | 85 | Thread threadthrottle; |
kwasymodo | 1:c5d8ea5d049b | 86 | |
kwasymodo | 1:c5d8ea5d049b | 87 | // start threads |
zathorix | 15:56b25cffa523 | 88 | threadpower.start(&power); |
zathorix | 16:c5427db9edf0 | 89 | threadbg.start(&background); |
zathorix | 15:56b25cffa523 | 90 | threadtest.start(&test); |
zathorix | 14:0ad1bc8be76b | 91 | threadthrottle.start(&readThrottle); |
zathorix | 17:91ba27c14991 | 92 | |
zathorix | 17:91ba27c14991 | 93 | telemetrics.enable(); |
zathorix | 16:c5427db9edf0 | 94 | daq.enable(starttime); |
zathorix | 16:c5427db9edf0 | 95 | |
zathorix | 16:c5427db9edf0 | 96 | //BMS message parser, now imlpemented in DAQ lib |
zathorix | 16:c5427db9edf0 | 97 | /*CANMessage msg; |
kwasymodo | 11:005a50dd7db5 | 98 | while(1) { |
kwasymodo | 11:005a50dd7db5 | 99 | if(can.read(msg)) { |
kwasymodo | 11:005a50dd7db5 | 100 | pc.printf("Message received: 0x %x; %u %u%u %d%d %c %u %u\n", msg.id, msg.data[0], msg.data[1], msg.data[2], msg.data[3], msg.data[4], msg.data[5], msg.data[6], msg.data[7]); |
zathorix | 16:c5427db9edf0 | 101 | } |
zathorix | 16:c5427db9edf0 | 102 | Thread::wait(10); |
zathorix | 16:c5427db9edf0 | 103 | }*/ |
zathorix | 16:c5427db9edf0 | 104 | Thread::wait(osWaitForever); |
zathorix | 16:c5427db9edf0 | 105 | } |
zathorix | 16:c5427db9edf0 | 106 | |
zathorix | 16:c5427db9edf0 | 107 | //send motor command |
zathorix | 16:c5427db9edf0 | 108 | void sendMotorSpeed(float throttle) { |
zathorix | 16:c5427db9edf0 | 109 | if ((abs(throttle - speed)) > SPEED_THRESH) { |
zathorix | 16:c5427db9edf0 | 110 | union { |
zathorix | 16:c5427db9edf0 | 111 | char msg[4]; |
zathorix | 16:c5427db9edf0 | 112 | float value; |
zathorix | 16:c5427db9edf0 | 113 | } packet; |
zathorix | 16:c5427db9edf0 | 114 | packet.value = throttle; |
zathorix | 16:c5427db9edf0 | 115 | can.write(CANMessage(MOTOR_COMMAND, packet.msg)); |
zathorix | 16:c5427db9edf0 | 116 | printf("Sent motor speed: %f\r\n", packet.value); |
zathorix | 16:c5427db9edf0 | 117 | speed = throttle; |
kwasymodo | 11:005a50dd7db5 | 118 | } |
zathorix | 16:c5427db9edf0 | 119 | } |
zathorix | 16:c5427db9edf0 | 120 | |
zathorix | 16:c5427db9edf0 | 121 | //thread functions |
zathorix | 16:c5427db9edf0 | 122 | void readThrottle() { |
zathorix | 16:c5427db9edf0 | 123 | float throttleread; |
zathorix | 16:c5427db9edf0 | 124 | while(1) { |
zathorix | 16:c5427db9edf0 | 125 | throttleread = 2*(0.5 - analogThrottle.read()); |
zathorix | 16:c5427db9edf0 | 126 | sendMotorSpeed(throttleread); |
zathorix | 16:c5427db9edf0 | 127 | Thread::wait(10); |
zathorix | 16:c5427db9edf0 | 128 | } |
zathorix | 16:c5427db9edf0 | 129 | } |
zathorix | 16:c5427db9edf0 | 130 | |
zathorix | 16:c5427db9edf0 | 131 | |
zathorix | 16:c5427db9edf0 | 132 | |
zathorix | 16:c5427db9edf0 | 133 | void power() { |
zathorix | 16:c5427db9edf0 | 134 | PowerControl powercontrol(PUSH_GREEN); |
zathorix | 16:c5427db9edf0 | 135 | |
zathorix | 16:c5427db9edf0 | 136 | #ifdef DEBUG |
zathorix | 16:c5427db9edf0 | 137 | pc.printf("Thread 1 - Power started\r\n "); |
zathorix | 16:c5427db9edf0 | 138 | #endif |
zathorix | 16:c5427db9edf0 | 139 | |
kwasymodo | 1:c5d8ea5d049b | 140 | Thread::wait(osWaitForever); |
zathorix | 16:c5427db9edf0 | 141 | } |
zathorix | 16:c5427db9edf0 | 142 | |
zathorix | 16:c5427db9edf0 | 143 | void test() { |
zathorix | 16:c5427db9edf0 | 144 | ledError = 0; |
zathorix | 16:c5427db9edf0 | 145 | ledSD = 0; |
zathorix | 16:c5427db9edf0 | 146 | ledFona = 0 ; |
zathorix | 16:c5427db9edf0 | 147 | led24V=1; |
zathorix | 16:c5427db9edf0 | 148 | |
zathorix | 16:c5427db9edf0 | 149 | //DigitalOut buckCan(BUCK2); |
zathorix | 16:c5427db9edf0 | 150 | buckXSens = 0; |
zathorix | 16:c5427db9edf0 | 151 | buckScreen = 0; |
zathorix | 16:c5427db9edf0 | 152 | buck24V = 1; |
zathorix | 16:c5427db9edf0 | 153 | } |