new battery bar

Dependencies:   CAN_IDs CanControl Dashboard PinDetect PowerControl mbed-rtos mbed

Committer:
zathorix
Date:
Mon May 22 14:17:58 2017 +0000
Revision:
13:8e92260c63bd
Parent:
11:005a50dd7db5
Implemented throttle

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
zathorix 13:8e92260c63bd 20 //Speed difference threshold to prevent CAN spam from throttle
zathorix 13:8e92260c63bd 21 #define SPEED_THRESH 0.05
zathorix 13:8e92260c63bd 22
kwasymodo 1:c5d8ea5d049b 23 //include 3rd party libraries
kwasymodo 4:dfd10f43cc8b 24 #include "mbed.h" //needs to be revision 136 else SD filesystem will not work
kwasymodo 1:c5d8ea5d049b 25 #include "rtos.h"
kwasymodo 1:c5d8ea5d049b 26
kwasymodo 1:c5d8ea5d049b 27 // include Solarboat libraries
kwasymodo 1:c5d8ea5d049b 28 #include "pinout.h"
kwasymodo 1:c5d8ea5d049b 29 #include "PowerControl.h"
zathorix 13:8e92260c63bd 30 #include "CAN_IDs.h"
kwasymodo 1:c5d8ea5d049b 31
kwasymodo 1:c5d8ea5d049b 32 // initialize serial connection for debug
kwasymodo 1:c5d8ea5d049b 33 #ifdef DEBUG
kwasymodo 3:b164662f9740 34 RawSerial pc(SERIAL_TX, SERIAL_RX);
kwasymodo 1:c5d8ea5d049b 35 #endif
kwasymodo 1:c5d8ea5d049b 36
zathorix 13:8e92260c63bd 37 //initialize throttle
zathorix 13:8e92260c63bd 38 AnalogIn analog_throttle(STEER_THROTTLE);
zathorix 13:8e92260c63bd 39
kwasymodo 1:c5d8ea5d049b 40 // initialize canbus
kwasymodo 1:c5d8ea5d049b 41 CAN can(CAN_RD, CAN_TD);
kwasymodo 1:c5d8ea5d049b 42
kwasymodo 1:c5d8ea5d049b 43 // initialze onboard leds
kwasymodo 1:c5d8ea5d049b 44 DigitalOut ledError(LED3);
kwasymodo 1:c5d8ea5d049b 45 DigitalOut ledSD(LED1);
kwasymodo 1:c5d8ea5d049b 46 DigitalOut ledFona(LED5);
kwasymodo 1:c5d8ea5d049b 47 DigitalOut led24V(LED4);
kwasymodo 1:c5d8ea5d049b 48
kwasymodo 4:dfd10f43cc8b 49 //DigitalOut buckCan(BUCK2);
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 13:8e92260c63bd 54 //Motor functions
zathorix 13:8e92260c63bd 55 void sendMotorSpeed(float throttle);
zathorix 13:8e92260c63bd 56 void readThrottle();
kwasymodo 1:c5d8ea5d049b 57
kwasymodo 1:c5d8ea5d049b 58 // Thread 1 - Power
kwasymodo 1:c5d8ea5d049b 59 void power(){
kwasymodo 4:dfd10f43cc8b 60 PowerControl powercontrol(PUSH_GREEN);
kwasymodo 4:dfd10f43cc8b 61
kwasymodo 1:c5d8ea5d049b 62 #ifdef DEBUG
kwasymodo 4:dfd10f43cc8b 63 pc.printf("Thread 1 - Power started\r\n ");
kwasymodo 1:c5d8ea5d049b 64 #endif
kwasymodo 1:c5d8ea5d049b 65
kwasymodo 4:dfd10f43cc8b 66 Thread::wait(osWaitForever);
kwasymodo 1:c5d8ea5d049b 67 }
kwasymodo 1:c5d8ea5d049b 68
kwasymodo 11:005a50dd7db5 69 // Thread X - Test
kwasymodo 11:005a50dd7db5 70 void test(){
kwasymodo 11:005a50dd7db5 71 ledError = 0;
kwasymodo 11:005a50dd7db5 72 ledSD = 0;
kwasymodo 11:005a50dd7db5 73 ledFona = 0 ;
kwasymodo 11:005a50dd7db5 74 led24V=1;
kwasymodo 11:005a50dd7db5 75
kwasymodo 11:005a50dd7db5 76 //DigitalOut buckCan(BUCK2);
kwasymodo 11:005a50dd7db5 77 buckXSens = 0;
kwasymodo 11:005a50dd7db5 78 buckScreen = 0;
kwasymodo 11:005a50dd7db5 79 buck24V = 1;
kwasymodo 11:005a50dd7db5 80 }
kwasymodo 1:c5d8ea5d049b 81
kwasymodo 1:c5d8ea5d049b 82 // Thread 0 - DO NOT CHANGE THIS!
kwasymodo 1:c5d8ea5d049b 83 int main() {
kwasymodo 1:c5d8ea5d049b 84 #ifdef DEBUG
kwasymodo 1:c5d8ea5d049b 85 pc.baud(115200);
kwasymodo 3:b164662f9740 86 pc.printf("Starting SOS V1.0\n");
kwasymodo 1:c5d8ea5d049b 87 #endif
kwasymodo 1:c5d8ea5d049b 88 // change CAN frequency
kwasymodo 1:c5d8ea5d049b 89 can.frequency(250000);
kwasymodo 1:c5d8ea5d049b 90
kwasymodo 1:c5d8ea5d049b 91 // initialze threads
kwasymodo 1:c5d8ea5d049b 92 Thread thread1;
kwasymodo 1:c5d8ea5d049b 93 //Thread thread2;
kwasymodo 1:c5d8ea5d049b 94 //Thread thread3;
kwasymodo 1:c5d8ea5d049b 95 //Thread thread4;
kwasymodo 11:005a50dd7db5 96 Thread threadx;
zathorix 13:8e92260c63bd 97 Thread threadthrottle;
kwasymodo 1:c5d8ea5d049b 98
kwasymodo 1:c5d8ea5d049b 99 // change thread priority
kwasymodo 1:c5d8ea5d049b 100 //thread2.set_priority(osPriorityBelowNormal);
kwasymodo 1:c5d8ea5d049b 101
kwasymodo 1:c5d8ea5d049b 102 // start threads
kwasymodo 1:c5d8ea5d049b 103 thread1.start(&power);
kwasymodo 1:c5d8ea5d049b 104 //thread2.start(&calcPi);
kwasymodo 1:c5d8ea5d049b 105 //thread3.start(&motorTest);
kwasymodo 1:c5d8ea5d049b 106 //thread4.start(&canReceive);
kwasymodo 11:005a50dd7db5 107 threadx.start(&test);
zathorix 13:8e92260c63bd 108 threadthrottle.start(&readThrottle);
kwasymodo 1:c5d8ea5d049b 109
kwasymodo 1:c5d8ea5d049b 110 //stop this thread while keeping the other threads running
kwasymodo 11:005a50dd7db5 111 CANMessage msg;
kwasymodo 11:005a50dd7db5 112 while(1) {
kwasymodo 11:005a50dd7db5 113 if(can.read(msg)) {
kwasymodo 11:005a50dd7db5 114 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]);
kwasymodo 11:005a50dd7db5 115 }
kwasymodo 11:005a50dd7db5 116 }
kwasymodo 1:c5d8ea5d049b 117 Thread::wait(osWaitForever);
zathorix 13:8e92260c63bd 118 }
zathorix 13:8e92260c63bd 119
zathorix 13:8e92260c63bd 120 //send motor command
zathorix 13:8e92260c63bd 121 void sendMotorSpeed(float throttle) {
zathorix 13:8e92260c63bd 122 if ((abs(throttle - speed)) > SPEED_THRESH) {
zathorix 13:8e92260c63bd 123 union {
zathorix 13:8e92260c63bd 124 char msg[4];
zathorix 13:8e92260c63bd 125 float value;
zathorix 13:8e92260c63bd 126 } packet;
zathorix 13:8e92260c63bd 127 packet.value = throttle;
zathorix 13:8e92260c63bd 128 can.write(CANMessage(MOTOR_COMMAND, packet.msg));
zathorix 13:8e92260c63bd 129 printf("Sent motor speed: %f\r\n", packet.value);
zathorix 13:8e92260c63bd 130 speed = throttle;
zathorix 13:8e92260c63bd 131 }
zathorix 13:8e92260c63bd 132 }
zathorix 13:8e92260c63bd 133
zathorix 13:8e92260c63bd 134 //throttle thread
zathorix 13:8e92260c63bd 135 void readThrottle() {
zathorix 13:8e92260c63bd 136 while(1) {
zathorix 13:8e92260c63bd 137 throttleread = 2*(0.5 - analog_throttle.read());
zathorix 13:8e92260c63bd 138 sendMotorSpeed(rev*throttleread);
zathorix 13:8e92260c63bd 139 Thread::wait(100);
zathorix 13:8e92260c63bd 140 }
zathorix 13:8e92260c63bd 141 }