new battery bar

Dependencies:   CAN_IDs CanControl Dashboard PinDetect PowerControl mbed-rtos mbed

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?

UserRevisionLine numberNew 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 }