Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: mbed mbed-STM32F103C8T6
main.cpp@9:6126b83608be, 2020-06-11 (annotated)
- Committer:
- lorded
- Date:
- Thu Jun 11 21:57:29 2020 +0000
- Revision:
- 9:6126b83608be
- Parent:
- 8:2b0d18ebbba9
- Child:
- 10:a82e51837e2b
pre adding altimeter
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
pangsk | 0:908be729d27c | 1 | /* |
pangsk | 0:908be729d27c | 2 | |
pangsk | 6:41a4ad385daa | 3 | mbed Can-Bus ECU simulator |
pangsk | 0:908be729d27c | 4 | |
pangsk | 6:41a4ad385daa | 5 | v1.0 December 2014 |
pangsk | 0:908be729d27c | 6 | |
pangsk | 0:908be729d27c | 7 | ******************************************************************************** |
pangsk | 0:908be729d27c | 8 | |
pangsk | 0:908be729d27c | 9 | WARNING: Use at your own risk, sadly this software comes with no guarantees. |
pangsk | 0:908be729d27c | 10 | This software is provided 'free' and in good faith, but the author does not |
pangsk | 0:908be729d27c | 11 | accept liability for any damage arising from its use. |
pangsk | 0:908be729d27c | 12 | |
pangsk | 0:908be729d27c | 13 | ******************************************************************************** |
pangsk | 0:908be729d27c | 14 | |
pangsk | 0:908be729d27c | 15 | */ |
RogerJKelly | 7:467e350d1a10 | 16 | //#include "MapleMini.h" |
RogerJKelly | 7:467e350d1a10 | 17 | #include "stm32f103c8t6.h" |
pangsk | 0:908be729d27c | 18 | #include "mbed.h" |
lorded | 9:6126b83608be | 19 | //#include "ecu_simulator.h" |
pangsk | 0:908be729d27c | 20 | #include "globals.h" |
lorded | 8:2b0d18ebbba9 | 21 | #include "heatcontrol.h" |
pangsk | 0:908be729d27c | 22 | |
RogerJKelly | 7:467e350d1a10 | 23 | // pinout for Maple Mini |
RogerJKelly | 7:467e350d1a10 | 24 | DigitalIn click(PA_1); // Button inputs |
RogerJKelly | 7:467e350d1a10 | 25 | // pinout for lpc1768 |
RogerJKelly | 7:467e350d1a10 | 26 | //DigitalIn click(p21); // Joystick inputs |
RogerJKelly | 7:467e350d1a10 | 27 | //DigitalIn right(p22); |
RogerJKelly | 7:467e350d1a10 | 28 | //DigitalIn down(p23); |
RogerJKelly | 7:467e350d1a10 | 29 | //DigitalIn left(p24); |
RogerJKelly | 7:467e350d1a10 | 30 | //DigitalIn up(p25); |
pangsk | 3:05bb8f0bd7a4 | 31 | |
lorded | 9:6126b83608be | 32 | volatile unsigned long lifetimer = 0; |
lorded | 9:6126b83608be | 33 | volatile int secondFlag = 0; |
pangsk | 6:41a4ad385daa | 34 | |
RogerJKelly | 7:467e350d1a10 | 35 | Ticker timer; |
lorded | 9:6126b83608be | 36 | Ticker quartersecond_timed_event; |
lorded | 9:6126b83608be | 37 | Ticker onesecond_timed_event; |
RogerJKelly | 7:467e350d1a10 | 38 | |
lorded | 9:6126b83608be | 39 | void attime() |
RogerJKelly | 7:467e350d1a10 | 40 | { |
RogerJKelly | 7:467e350d1a10 | 41 | //second_tick = true; |
RogerJKelly | 7:467e350d1a10 | 42 | //myled = !myled; |
RogerJKelly | 7:467e350d1a10 | 43 | led1 = !led1; |
RogerJKelly | 7:467e350d1a10 | 44 | } |
pangsk | 0:908be729d27c | 45 | |
pangsk | 6:41a4ad385daa | 46 | // Menu defines |
pangsk | 0:908be729d27c | 47 | |
RogerJKelly | 7:467e350d1a10 | 48 | //unsigned char menu_state; |
RogerJKelly | 7:467e350d1a10 | 49 | //unsigned char canspeed; |
pangsk | 6:41a4ad385daa | 50 | |
lorded | 8:2b0d18ebbba9 | 51 | // external variables |
lorded | 8:2b0d18ebbba9 | 52 | volatile unsigned char idletimer; |
lorded | 9:6126b83608be | 53 | extern char otherControllerDetected; |
lorded | 9:6126b83608be | 54 | |
lorded | 8:2b0d18ebbba9 | 55 | char printbuff[256]; |
lorded | 8:2b0d18ebbba9 | 56 | |
lorded | 9:6126b83608be | 57 | void DebugWrite(const char* str) |
lorded | 9:6126b83608be | 58 | { |
lorded | 9:6126b83608be | 59 | pc.printf(str); |
lorded | 8:2b0d18ebbba9 | 60 | } |
lorded | 9:6126b83608be | 61 | void resetTimer(struct sHeatVars *s) |
lorded | 9:6126b83608be | 62 | { |
lorded | 9:6126b83608be | 63 | s->resettick = 1; |
lorded | 9:6126b83608be | 64 | //TODO: This. |
lorded | 9:6126b83608be | 65 | } |
lorded | 9:6126b83608be | 66 | void resetTimerAsync(struct sHeatVars *s) |
lorded | 9:6126b83608be | 67 | { |
lorded | 9:6126b83608be | 68 | s->resettick = 1; |
lorded | 8:2b0d18ebbba9 | 69 | //TODO: This. |
lorded | 8:2b0d18ebbba9 | 70 | } |
lorded | 9:6126b83608be | 71 | void one_second_tick() |
lorded | 9:6126b83608be | 72 | { |
lorded | 9:6126b83608be | 73 | int i; |
lorded | 9:6126b83608be | 74 | lifetimer++; // used for wifi reset test. |
lorded | 9:6126b83608be | 75 | //wiced_rtos_lock_mutex( &xively_data.mutex ); |
lorded | 9:6126b83608be | 76 | |
lorded | 9:6126b83608be | 77 | for (i = 0; i < HEATERSTATECOUNT; i++) { |
lorded | 9:6126b83608be | 78 | if (heaterState[i].heattime > 0 && heaterState[i].heattime < 59995) { // count down the heat timer |
lorded | 9:6126b83608be | 79 | // tick,tick... |
lorded | 9:6126b83608be | 80 | heaterState[i].heattime--; |
lorded | 9:6126b83608be | 81 | } |
lorded | 9:6126b83608be | 82 | if (heaterState[i].heatresettime > 0) { |
lorded | 9:6126b83608be | 83 | heaterState[i].heatresettime--; |
lorded | 9:6126b83608be | 84 | } |
lorded | 9:6126b83608be | 85 | if (heaterState[i].preheattime > 0) { |
lorded | 9:6126b83608be | 86 | heaterState[i].preheattime--; |
lorded | 9:6126b83608be | 87 | } |
lorded | 9:6126b83608be | 88 | if (heaterState[i].heaterDetected > 0) { |
lorded | 9:6126b83608be | 89 | heaterState[i].heaterDetected--; |
lorded | 9:6126b83608be | 90 | } |
lorded | 9:6126b83608be | 91 | } |
lorded | 9:6126b83608be | 92 | |
lorded | 9:6126b83608be | 93 | if (idletimer > 0) { |
lorded | 9:6126b83608be | 94 | idletimer--; |
lorded | 9:6126b83608be | 95 | } |
lorded | 9:6126b83608be | 96 | if (otherControllerDetected > 0) { |
lorded | 9:6126b83608be | 97 | otherControllerDetected--; |
lorded | 9:6126b83608be | 98 | } |
lorded | 9:6126b83608be | 99 | secondFlag = 1; |
lorded | 9:6126b83608be | 100 | |
lorded | 8:2b0d18ebbba9 | 101 | } |
lorded | 9:6126b83608be | 102 | |
lorded | 9:6126b83608be | 103 | void quarter_second_tick() |
lorded | 9:6126b83608be | 104 | { |
lorded | 9:6126b83608be | 105 | int i; |
lorded | 9:6126b83608be | 106 | for (i = 0; i < HEATERSTATECOUNT; i++) { |
lorded | 9:6126b83608be | 107 | heaterState[i].tickcount += 250; |
lorded | 9:6126b83608be | 108 | if (heaterState[i].resettick == 1) { |
lorded | 9:6126b83608be | 109 | heaterState[i].tickcount = 0; |
lorded | 9:6126b83608be | 110 | heaterState[i].resettick = 0; |
lorded | 9:6126b83608be | 111 | } |
lorded | 9:6126b83608be | 112 | } |
lorded | 9:6126b83608be | 113 | |
lorded | 9:6126b83608be | 114 | } |
lorded | 9:6126b83608be | 115 | |
lorded | 9:6126b83608be | 116 | int main() |
pangsk | 6:41a4ad385daa | 117 | { |
RogerJKelly | 7:467e350d1a10 | 118 | confSysClock(); //Configure system clock (72MHz HSE clock, 48MHz USB clock) |
pangsk | 3:05bb8f0bd7a4 | 119 | pc.baud(115200); |
lorded | 9:6126b83608be | 120 | |
lorded | 9:6126b83608be | 121 | //Enable Pullup |
pangsk | 3:05bb8f0bd7a4 | 122 | click.mode(PullUp); |
pangsk | 6:41a4ad385daa | 123 | |
lorded | 9:6126b83608be | 124 | |
lorded | 9:6126b83608be | 125 | pc.printf("\n\nRIXEN Simulator v1.1 \r\n"); |
lorded | 9:6126b83608be | 126 | |
pangsk | 6:41a4ad385daa | 127 | led1 = 1; |
pangsk | 6:41a4ad385daa | 128 | wait(0.1); |
pangsk | 6:41a4ad385daa | 129 | led2 = 1; |
pangsk | 6:41a4ad385daa | 130 | wait(0.1); |
pangsk | 6:41a4ad385daa | 131 | led3 = 1; |
pangsk | 6:41a4ad385daa | 132 | wait(0.1); |
pangsk | 6:41a4ad385daa | 133 | led4 = 1; |
pangsk | 6:41a4ad385daa | 134 | wait(0.2); |
lorded | 9:6126b83608be | 135 | led1 = 0; |
lorded | 9:6126b83608be | 136 | led2 = 0; |
lorded | 9:6126b83608be | 137 | led3 = 0; |
lorded | 9:6126b83608be | 138 | led4 = 0; |
lorded | 9:6126b83608be | 139 | |
lorded | 9:6126b83608be | 140 | |
pangsk | 6:41a4ad385daa | 141 | wait(1); |
lorded | 9:6126b83608be | 142 | |
RogerJKelly | 7:467e350d1a10 | 143 | //canspeed = CAN500; |
lorded | 9:6126b83608be | 144 | // ecu.dtc = false; |
lorded | 9:6126b83608be | 145 | // ecu.active_fault = false; |
lorded | 9:6126b83608be | 146 | |
lorded | 9:6126b83608be | 147 | // sim.canspeed(CANSPEED_500); |
lorded | 9:6126b83608be | 148 | |
pangsk | 6:41a4ad385daa | 149 | wait(0.2); |
pangsk | 6:41a4ad385daa | 150 | led1 = 1; |
lorded | 9:6126b83608be | 151 | |
lorded | 9:6126b83608be | 152 | //timer.attach(&attime, 1); |
lorded | 9:6126b83608be | 153 | quartersecond_timed_event.attach(&quarter_second_tick, 0.250); |
lorded | 9:6126b83608be | 154 | onesecond_timed_event.attach(&one_second_tick, 1.0); |
lorded | 9:6126b83608be | 155 | |
lorded | 9:6126b83608be | 156 | |
lorded | 8:2b0d18ebbba9 | 157 | initHeaterState(&heaterState[0]); |
lorded | 8:2b0d18ebbba9 | 158 | initHeaterState(&heaterState[1]); |
lorded | 8:2b0d18ebbba9 | 159 | |
lorded | 8:2b0d18ebbba9 | 160 | heaterState[0].bustype = HEATERTYPECAN; |
lorded | 8:2b0d18ebbba9 | 161 | heaterState[0].heaternum = 1; |
lorded | 9:6126b83608be | 162 | |
lorded | 8:2b0d18ebbba9 | 163 | heaterState[1].bustype = HEATERTYPENONE; |
lorded | 9:6126b83608be | 164 | |
lorded | 8:2b0d18ebbba9 | 165 | |
lorded | 9:6126b83608be | 166 | InitCAN(); |
lorded | 9:6126b83608be | 167 | |
lorded | 9:6126b83608be | 168 | |
lorded | 9:6126b83608be | 169 | while(1) { // Main CAN loop |
lorded | 9:6126b83608be | 170 | |
lorded | 9:6126b83608be | 171 | for (int i = 0; i < HEATERSTATECOUNT; i++) { |
lorded | 8:2b0d18ebbba9 | 172 | // wiced_update_system_monitor(&main_thread_monitor, 10 * 1000); |
lorded | 8:2b0d18ebbba9 | 173 | doHeatTaskCAN(&heaterState[i]); |
lorded | 8:2b0d18ebbba9 | 174 | // wiced_update_system_monitor(&main_thread_monitor, 10 * 1000); |
lorded | 8:2b0d18ebbba9 | 175 | doHeatLogicTask(&heaterState[i]); |
lorded | 9:6126b83608be | 176 | if (i < HEATERSTATECOUNT) { |
lorded | 8:2b0d18ebbba9 | 177 | wait_ms(50); |
lorded | 9:6126b83608be | 178 | } else { |
lorded | 8:2b0d18ebbba9 | 179 | //wiced_rtos_delay_milliseconds(50); |
lorded | 8:2b0d18ebbba9 | 180 | } |
pangsk | 6:41a4ad385daa | 181 | } |
lorded | 9:6126b83608be | 182 | if (!click) { |
lorded | 9:6126b83608be | 183 | if (heaterState[0].heatOn == HEATCALLOFF) { |
lorded | 9:6126b83608be | 184 | set_heat_con(&heaterState[0], HEATCALLINIT); |
lorded | 9:6126b83608be | 185 | } |
lorded | 9:6126b83608be | 186 | } else { |
lorded | 9:6126b83608be | 187 | if (heaterState[0].heatOn != HEATCALLOFF) { |
lorded | 9:6126b83608be | 188 | set_heat_con(&heaterState[0], HEATCALLOFF); |
lorded | 9:6126b83608be | 189 | } |
lorded | 9:6126b83608be | 190 | } |
lorded | 9:6126b83608be | 191 | |
lorded | 9:6126b83608be | 192 | if (secondFlag > 0) { |
lorded | 9:6126b83608be | 193 | secondFlag = 0; |
lorded | 9:6126b83608be | 194 | if (heaterState[0].initTimer > 0) { |
lorded | 9:6126b83608be | 195 | heaterState[0].initTimer--; |
lorded | 9:6126b83608be | 196 | } |
lorded | 9:6126b83608be | 197 | if (heaterState[1].initTimer > 0) { |
lorded | 9:6126b83608be | 198 | heaterState[1].initTimer--; |
lorded | 9:6126b83608be | 199 | } |
lorded | 9:6126b83608be | 200 | // DebugWrite("Doing re-init of I2c\r\n"); |
lorded | 9:6126b83608be | 201 | |
lorded | 9:6126b83608be | 202 | // check I2C |
lorded | 9:6126b83608be | 203 | // DeInit_SC16IS740(); |
lorded | 9:6126b83608be | 204 | // DeInit_SPL0601(); |
lorded | 9:6126b83608be | 205 | // cleanI2CLines(); |
lorded | 9:6126b83608be | 206 | // Init_SC16IS740(2); |
lorded | 9:6126b83608be | 207 | // Init_SPL0601(); |
lorded | 9:6126b83608be | 208 | } |
pangsk | 6:41a4ad385daa | 209 | } |
pangsk | 6:41a4ad385daa | 210 | } |