SWO+USB Serial+TouchScreen Demo
Dependencies: BSP_DISCO_F429ZI LCD_DISCO_F429ZI SWO TS_DISCO_F429ZI USBDEVICE mbed storage_on_flash
Fork of DISCO-F429ZI_LCDTS_demo by
main.cpp@10:1e21661f4e04, 2018-03-20 (annotated)
- Committer:
- pierrebizouard
- Date:
- Tue Mar 20 16:51:40 2018 +0000
- Revision:
- 10:1e21661f4e04
- Parent:
- 9:62df0b9df08d
updated arrays to const
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
pierrebizouard | 4:86d291139659 | 1 | //#define USB_STM_HAL |
pierrebizouard | 4:86d291139659 | 2 | //#define DISCO |
pierrebizouard | 7:9276134bb25e | 3 | #define LANDSCAPE_MODE |
pierrebizouard | 4:86d291139659 | 4 | |
bcostm | 0:91c6ab790bd7 | 5 | #include "mbed.h" |
pierrebizouard | 7:9276134bb25e | 6 | |
pierrebizouard | 7:9276134bb25e | 7 | |
pierrebizouard | 7:9276134bb25e | 8 | #include "SOFBlock.h" |
pierrebizouard | 7:9276134bb25e | 9 | |
pierrebizouard | 7:9276134bb25e | 10 | |
pierrebizouard | 7:9276134bb25e | 11 | #include "stm32f429i_discovery_sdram.h" |
bcostm | 0:91c6ab790bd7 | 12 | #include "TS_DISCO_F429ZI.h" |
bcostm | 0:91c6ab790bd7 | 13 | #include "LCD_DISCO_F429ZI.h" |
pierrebizouard | 3:9b242573a271 | 14 | #include "USBSerial.h" |
pierrebizouard | 5:b69870b843f3 | 15 | #include "SWO.h" |
pierrebizouard | 6:7812b342d945 | 16 | #include "logos.h" |
pierrebizouard | 7:9276134bb25e | 17 | #include "SOFBlock.h" |
pierrebizouard | 7:9276134bb25e | 18 | #include "ubuntu_font.h" |
pierrebizouard | 7:9276134bb25e | 19 | |
pierrebizouard | 7:9276134bb25e | 20 | #include <cstdlib> |
pierrebizouard | 6:7812b342d945 | 21 | |
pierrebizouard | 6:7812b342d945 | 22 | //PA3 PA5 |
pierrebizouard | 6:7812b342d945 | 23 | AnalogOut temperature_out(PA_5); |
pierrebizouard | 6:7812b342d945 | 24 | //PC3 |
pierrebizouard | 6:7812b342d945 | 25 | |
pierrebizouard | 6:7812b342d945 | 26 | //AnalogIn #conflicts with something somewhere |
pierrebizouard | 6:7812b342d945 | 27 | //SPI PE6 PE5 PE2 |
bcostm | 0:91c6ab790bd7 | 28 | |
pierrebizouard | 4:86d291139659 | 29 | LCD_DISCO_F429ZI lcd; |
pierrebizouard | 4:86d291139659 | 30 | TS_DISCO_F429ZI ts; |
pierrebizouard | 6:7812b342d945 | 31 | uint8_t text[30]; |
pierrebizouard | 4:86d291139659 | 32 | |
pierrebizouard | 5:b69870b843f3 | 33 | SWO_Channel swo; |
pierrebizouard | 6:7812b342d945 | 34 | //USBSerial ser; |
pierrebizouard | 6:7812b342d945 | 35 | |
pierrebizouard | 6:7812b342d945 | 36 | //AnalogOut temp_setpoint(PA_5); |
pierrebizouard | 6:7812b342d945 | 37 | //AnalogIn temp_read(PF_4); |
bcostm | 0:91c6ab790bd7 | 38 | |
pierrebizouard | 7:9276134bb25e | 39 | //#define DEBUG |
pierrebizouard | 4:86d291139659 | 40 | |
pierrebizouard | 7:9276134bb25e | 41 | #define CODE_VERSION_STRING "1.0" |
pierrebizouard | 6:7812b342d945 | 42 | #define LINE(x) ((x) * (((sFONT *)BSP_LCD_GetFont())->Height)) |
pierrebizouard | 7:9276134bb25e | 43 | |
pierrebizouard | 7:9276134bb25e | 44 | #ifdef DEBUG |
pierrebizouard | 7:9276134bb25e | 45 | #define TEMP_SET_LINE 0 |
pierrebizouard | 7:9276134bb25e | 46 | #define CLOSER 0 |
pierrebizouard | 7:9276134bb25e | 47 | #define TEMP_SET_TEXT LINE(TEMP_SET_LINE)+CLOSER |
pierrebizouard | 7:9276134bb25e | 48 | #define TEMP_SET_DISP LINE(TEMP_SET_LINE+1)+CLOSER |
pierrebizouard | 7:9276134bb25e | 49 | #define TEMP_READ_TEXT LINE(TEMP_SET_LINE+3)-CLOSER |
pierrebizouard | 7:9276134bb25e | 50 | #define TEMP_READ_DISP LINE(TEMP_SET_LINE+4)-CLOSER |
pierrebizouard | 7:9276134bb25e | 51 | #define TEMP_TEXT_X 5 |
pierrebizouard | 7:9276134bb25e | 52 | #define TEMP_DISP_X (TEMP_TEXT_X - 5) |
pierrebizouard | 7:9276134bb25e | 53 | #else |
pierrebizouard | 7:9276134bb25e | 54 | #define TEMP_SET_LINE 4 |
pierrebizouard | 7:9276134bb25e | 55 | #define OFFSET 5 |
pierrebizouard | 7:9276134bb25e | 56 | #define CLOSER 10 |
pierrebizouard | 7:9276134bb25e | 57 | #define TEMP_SET_TEXT LINE(TEMP_SET_LINE)+CLOSER+OFFSET |
pierrebizouard | 7:9276134bb25e | 58 | #define TEMP_SET_DISP LINE(TEMP_SET_LINE+1)+CLOSER+OFFSET |
pierrebizouard | 7:9276134bb25e | 59 | #define TEMP_READ_TEXT LINE(TEMP_SET_LINE+3)+CLOSER/2+OFFSET |
pierrebizouard | 7:9276134bb25e | 60 | #define TEMP_READ_DISP LINE(TEMP_SET_LINE+4)+CLOSER/2+OFFSET |
pierrebizouard | 7:9276134bb25e | 61 | #define TEMP_TEXT_X 32 |
pierrebizouard | 7:9276134bb25e | 62 | #define TEMP_DISP_X (TEMP_TEXT_X - 5) |
pierrebizouard | 7:9276134bb25e | 63 | #endif |
pierrebizouard | 7:9276134bb25e | 64 | |
pierrebizouard | 7:9276134bb25e | 65 | |
pierrebizouard | 6:7812b342d945 | 66 | #define min(x,y) (x>y?y:x) |
pierrebizouard | 6:7812b342d945 | 67 | #define max(x,y) (x>y?x:y) |
pierrebizouard | 6:7812b342d945 | 68 | |
pierrebizouard | 7:9276134bb25e | 69 | #define DEFAULT_LAYER 0 |
pierrebizouard | 7:9276134bb25e | 70 | #define MIN_TEMP -40. |
pierrebizouard | 7:9276134bb25e | 71 | #define MAX_TEMP 20.0 |
pierrebizouard | 7:9276134bb25e | 72 | |
pierrebizouard | 7:9276134bb25e | 73 | double temperature_setpoint = -10.0; |
pierrebizouard | 7:9276134bb25e | 74 | double last_read_temperature = temperature_setpoint; |
pierrebizouard | 7:9276134bb25e | 75 | |
pierrebizouard | 7:9276134bb25e | 76 | #define MAX_TP_POINTS (320-2*10-2*10) |
pierrebizouard | 7:9276134bb25e | 77 | #define DELAY_ACQ 200 |
pierrebizouard | 7:9276134bb25e | 78 | #define TS_READ_TIME 75 |
pierrebizouard | 7:9276134bb25e | 79 | #define TEMPERATURE_SLOW_ACCUMULATE 40 |
pierrebizouard | 7:9276134bb25e | 80 | //(5*10) //10s approx 5*10*200ms |
pierrebizouard | 7:9276134bb25e | 81 | |
pierrebizouard | 7:9276134bb25e | 82 | double temperature_curve_fast[MAX_TP_POINTS]; |
pierrebizouard | 7:9276134bb25e | 83 | double temperature_curve_slow[MAX_TP_POINTS]; |
pierrebizouard | 7:9276134bb25e | 84 | int accumulated_slow_temp = 0; |
pierrebizouard | 7:9276134bb25e | 85 | double slow_temp_acc = 0.; |
pierrebizouard | 7:9276134bb25e | 86 | int temperature_curve_slow_count = 0; |
pierrebizouard | 7:9276134bb25e | 87 | int temperature_curve_fast_count = 0; |
pierrebizouard | 7:9276134bb25e | 88 | int temperature_curve_fast_index = 0; |
pierrebizouard | 7:9276134bb25e | 89 | int temperature_curve_slow_index = 0; |
pierrebizouard | 7:9276134bb25e | 90 | |
pierrebizouard | 7:9276134bb25e | 91 | int last_update_index = -1; |
pierrebizouard | 7:9276134bb25e | 92 | |
pierrebizouard | 7:9276134bb25e | 93 | double eeprom_temperature = 0.0; |
pierrebizouard | 6:7812b342d945 | 94 | |
pierrebizouard | 6:7812b342d945 | 95 | double pcoefs[] = {-1.10014853, 10.40077476, -70.49071822, 86.20161024}; |
pierrebizouard | 6:7812b342d945 | 96 | double rev_pcoefs[] = {-5.42057541e-08, 5.11915693e-05, -2.13855322e-02, 1.50390471e+00}; |
pierrebizouard | 6:7812b342d945 | 97 | |
pierrebizouard | 6:7812b342d945 | 98 | double polyval(double* coefs, int degree, double value) |
pierrebizouard | 6:7812b342d945 | 99 | { |
pierrebizouard | 6:7812b342d945 | 100 | int power = 0; |
pierrebizouard | 6:7812b342d945 | 101 | int degree_current = degree; |
pierrebizouard | 6:7812b342d945 | 102 | double value_out = 0; |
pierrebizouard | 6:7812b342d945 | 103 | do { |
pierrebizouard | 6:7812b342d945 | 104 | value_out += pow(value, power)*coefs[degree_current]; |
pierrebizouard | 6:7812b342d945 | 105 | degree_current -= 1; |
pierrebizouard | 6:7812b342d945 | 106 | power += 1; |
pierrebizouard | 6:7812b342d945 | 107 | } while (power <= degree); |
pierrebizouard | 6:7812b342d945 | 108 | return value_out; |
pierrebizouard | 6:7812b342d945 | 109 | } |
pierrebizouard | 6:7812b342d945 | 110 | |
pierrebizouard | 6:7812b342d945 | 111 | double read_temperature() |
pierrebizouard | 6:7812b342d945 | 112 | { |
pierrebizouard | 6:7812b342d945 | 113 | //fixes a bug for repetitve readout failures |
pierrebizouard | 6:7812b342d945 | 114 | AnalogIn temp_read(PA_3); //PF4 PF5 PF3 PF6 PF8 |
pierrebizouard | 6:7812b342d945 | 115 | double bridge_res = 100e3; |
pierrebizouard | 6:7812b342d945 | 116 | double bridge_voltage = 3.3; |
pierrebizouard | 7:9276134bb25e | 117 | int averaging = 16; |
pierrebizouard | 7:9276134bb25e | 118 | double accumulator = 0.; |
pierrebizouard | 7:9276134bb25e | 119 | for (int i=0; i<averaging; i++) { |
pierrebizouard | 7:9276134bb25e | 120 | accumulator += temp_read.read(); |
pierrebizouard | 7:9276134bb25e | 121 | } |
pierrebizouard | 7:9276134bb25e | 122 | double temp_averaging = accumulator/averaging; |
pierrebizouard | 7:9276134bb25e | 123 | double midpoint_voltage = double(temp_averaging*bridge_voltage); |
pierrebizouard | 6:7812b342d945 | 124 | double rx = (midpoint_voltage / bridge_voltage) * bridge_res / (1 - midpoint_voltage / bridge_voltage); |
pierrebizouard | 7:9276134bb25e | 125 | #ifdef DEBUG |
pierrebizouard | 6:7812b342d945 | 126 | sprintf((char*)text, "TR %lf V ", midpoint_voltage); |
pierrebizouard | 6:7812b342d945 | 127 | lcd.DisplayStringAt(0, LINE(9), (uint8_t *)&text, LEFT_MODE); |
pierrebizouard | 7:9276134bb25e | 128 | #endif |
pierrebizouard | 6:7812b342d945 | 129 | return polyval(pcoefs, 3, log10(rx/1e3)); |
pierrebizouard | 6:7812b342d945 | 130 | } |
pierrebizouard | 6:7812b342d945 | 131 | |
pierrebizouard | 6:7812b342d945 | 132 | void write_temperature_setpoint(double temperature) |
pierrebizouard | 6:7812b342d945 | 133 | { |
pierrebizouard | 6:7812b342d945 | 134 | double bridge_res = 100e3; |
pierrebizouard | 6:7812b342d945 | 135 | double bridge_voltage = 3.3; |
pierrebizouard | 6:7812b342d945 | 136 | double res = pow(10., polyval(rev_pcoefs, 3, temperature))*1e3; |
pierrebizouard | 6:7812b342d945 | 137 | double voltage = (res/(res+bridge_res) * bridge_voltage); |
pierrebizouard | 7:9276134bb25e | 138 | #ifdef DEBUG |
pierrebizouard | 6:7812b342d945 | 139 | sprintf((char*)text, "SP %4.1lf V ", voltage); |
pierrebizouard | 6:7812b342d945 | 140 | lcd.DisplayStringAt(0, LINE(8), (uint8_t *)&text, LEFT_MODE); |
pierrebizouard | 7:9276134bb25e | 141 | #endif |
pierrebizouard | 6:7812b342d945 | 142 | temperature_out.write(voltage/bridge_voltage); |
pierrebizouard | 6:7812b342d945 | 143 | } |
pierrebizouard | 4:86d291139659 | 144 | |
pierrebizouard | 7:9276134bb25e | 145 | |
pierrebizouard | 7:9276134bb25e | 146 | |
pierrebizouard | 7:9276134bb25e | 147 | #define LCD_REFRESH_RATE 40 |
pierrebizouard | 7:9276134bb25e | 148 | |
pierrebizouard | 7:9276134bb25e | 149 | void LCD_Reload_Safe(void) |
pierrebizouard | 7:9276134bb25e | 150 | { |
pierrebizouard | 7:9276134bb25e | 151 | BSP_LCD_Reload(LTDC_RELOAD_VERTICAL_BLANKING); |
pierrebizouard | 7:9276134bb25e | 152 | wait(1./LCD_REFRESH_RATE); |
pierrebizouard | 7:9276134bb25e | 153 | } |
pierrebizouard | 7:9276134bb25e | 154 | |
pierrebizouard | 7:9276134bb25e | 155 | |
pierrebizouard | 7:9276134bb25e | 156 | const uint8_t sector_index = 11; |
pierrebizouard | 7:9276134bb25e | 157 | SOFWriter writer; |
pierrebizouard | 7:9276134bb25e | 158 | SOFReader reader; |
pierrebizouard | 7:9276134bb25e | 159 | |
pierrebizouard | 7:9276134bb25e | 160 | void check_temperature_storage(void) |
pierrebizouard | 4:86d291139659 | 161 | { |
pierrebizouard | 7:9276134bb25e | 162 | //here could check for data |
pierrebizouard | 7:9276134bb25e | 163 | reader.open(sector_index); |
pierrebizouard | 7:9276134bb25e | 164 | double temp_backup = *(double *)(reader.get_physical_data_addr()-sizeof(double)); |
pierrebizouard | 7:9276134bb25e | 165 | reader.close(); |
pierrebizouard | 7:9276134bb25e | 166 | writer.open(sector_index); |
pierrebizouard | 7:9276134bb25e | 167 | if (writer.get_free_size() <= sizeof(double)*1024) { // check available byte |
pierrebizouard | 7:9276134bb25e | 168 | SOFBlock::format(sector_index); |
pierrebizouard | 7:9276134bb25e | 169 | writer.write_data((uint8_t*)(&temp_backup), sizeof(double)); |
pierrebizouard | 7:9276134bb25e | 170 | } else { |
pierrebizouard | 7:9276134bb25e | 171 | #ifndef NO_WAIT |
pierrebizouard | 7:9276134bb25e | 172 | wait(1); |
pierrebizouard | 7:9276134bb25e | 173 | #endif |
pierrebizouard | 7:9276134bb25e | 174 | } |
pierrebizouard | 7:9276134bb25e | 175 | writer.close(); |
pierrebizouard | 7:9276134bb25e | 176 | } |
pierrebizouard | 7:9276134bb25e | 177 | |
pierrebizouard | 7:9276134bb25e | 178 | void load_temperature_storage(void) |
pierrebizouard | 7:9276134bb25e | 179 | { |
pierrebizouard | 7:9276134bb25e | 180 | reader.open(sector_index); |
pierrebizouard | 7:9276134bb25e | 181 | eeprom_temperature = *(double *)(reader.get_physical_data_addr()-sizeof(double)); |
pierrebizouard | 7:9276134bb25e | 182 | reader.close(); |
pierrebizouard | 7:9276134bb25e | 183 | |
pierrebizouard | 7:9276134bb25e | 184 | if ((eeprom_temperature >= MIN_TEMP) && (eeprom_temperature <= MAX_TEMP)) |
bcostm | 0:91c6ab790bd7 | 185 | { |
pierrebizouard | 7:9276134bb25e | 186 | temperature_setpoint = eeprom_temperature; |
pierrebizouard | 7:9276134bb25e | 187 | } |
pierrebizouard | 7:9276134bb25e | 188 | write_temperature_setpoint(temperature_setpoint); |
pierrebizouard | 7:9276134bb25e | 189 | |
pierrebizouard | 7:9276134bb25e | 190 | } |
pierrebizouard | 7:9276134bb25e | 191 | |
pierrebizouard | 7:9276134bb25e | 192 | void save_temperature_storage(void) |
pierrebizouard | 7:9276134bb25e | 193 | { |
pierrebizouard | 7:9276134bb25e | 194 | /* write temperature set point */ |
pierrebizouard | 7:9276134bb25e | 195 | if ((temperature_setpoint != eeprom_temperature) && |
pierrebizouard | 7:9276134bb25e | 196 | (temperature_setpoint < MAX_TEMP) && (temperature_setpoint > MIN_TEMP)) { |
pierrebizouard | 7:9276134bb25e | 197 | writer.open(sector_index); |
pierrebizouard | 7:9276134bb25e | 198 | writer.write_data((uint8_t*)(&temperature_setpoint), sizeof(double)); |
pierrebizouard | 7:9276134bb25e | 199 | |
pierrebizouard | 7:9276134bb25e | 200 | eeprom_temperature = temperature_setpoint; |
pierrebizouard | 7:9276134bb25e | 201 | if (writer.get_free_size() <= sizeof(double)+1) { // check available byte |
pierrebizouard | 7:9276134bb25e | 202 | SOFBlock::format(sector_index); |
pierrebizouard | 7:9276134bb25e | 203 | } |
pierrebizouard | 7:9276134bb25e | 204 | writer.close(); |
pierrebizouard | 7:9276134bb25e | 205 | eeprom_temperature = temperature_setpoint; |
bcostm | 0:91c6ab790bd7 | 206 | } |
pierrebizouard | 7:9276134bb25e | 207 | |
pierrebizouard | 7:9276134bb25e | 208 | } |
pierrebizouard | 7:9276134bb25e | 209 | |
pierrebizouard | 7:9276134bb25e | 210 | void DrawRectCentered(uint16_t xcenter, uint16_t ycenter, uint16_t width, uint16_t height) |
pierrebizouard | 7:9276134bb25e | 211 | { |
pierrebizouard | 7:9276134bb25e | 212 | //landscape mode only |
pierrebizouard | 7:9276134bb25e | 213 | lcd.FillRect(xcenter+width/2,ycenter-height/2, height, width); |
pierrebizouard | 7:9276134bb25e | 214 | } |
pierrebizouard | 7:9276134bb25e | 215 | |
pierrebizouard | 7:9276134bb25e | 216 | void print_layer(int layer) |
pierrebizouard | 7:9276134bb25e | 217 | { |
pierrebizouard | 7:9276134bb25e | 218 | lcd.SelectLayer(layer); |
pierrebizouard | 7:9276134bb25e | 219 | BSP_LCD_SetLayerVisible(layer, ENABLE); |
pierrebizouard | 7:9276134bb25e | 220 | sprintf((char*)text, "LAYER %d", layer); |
pierrebizouard | 7:9276134bb25e | 221 | lcd.DisplayStringAt(0, LINE(1), (uint8_t *)&text, LEFT_MODE); |
pierrebizouard | 7:9276134bb25e | 222 | BSP_LCD_SetLayerVisible(layer, DISABLE); |
pierrebizouard | 7:9276134bb25e | 223 | } |
pierrebizouard | 7:9276134bb25e | 224 | |
pierrebizouard | 7:9276134bb25e | 225 | void print_layers() |
pierrebizouard | 7:9276134bb25e | 226 | { |
pierrebizouard | 7:9276134bb25e | 227 | for (int i=0;i<3;i++) |
bcostm | 0:91c6ab790bd7 | 228 | { |
pierrebizouard | 7:9276134bb25e | 229 | print_layer(i); |
bcostm | 0:91c6ab790bd7 | 230 | } |
pierrebizouard | 7:9276134bb25e | 231 | lcd.SelectLayer(0); |
pierrebizouard | 7:9276134bb25e | 232 | BSP_LCD_SetLayerVisible(0, ENABLE); |
pierrebizouard | 7:9276134bb25e | 233 | |
pierrebizouard | 7:9276134bb25e | 234 | } |
pierrebizouard | 7:9276134bb25e | 235 | |
pierrebizouard | 7:9276134bb25e | 236 | void draw_startup_screen(int layer) |
pierrebizouard | 7:9276134bb25e | 237 | { |
pierrebizouard | 7:9276134bb25e | 238 | lcd.SelectLayer(layer); |
pierrebizouard | 7:9276134bb25e | 239 | BSP_LCD_SetLayerVisible_NoReload(layer, ENABLE); |
pierrebizouard | 7:9276134bb25e | 240 | LCD_Reload_Safe(); |
pierrebizouard | 7:9276134bb25e | 241 | lcd.Clear(LCD_COLOR_BLUE); |
pierrebizouard | 10:1e21661f4e04 | 242 | uint8_t* pBmp = const_cast<uint8_t*>(big_fastlite_logo_68_302); |
pierrebizouard | 9:62df0b9df08d | 243 | lcd.DrawBitmap((lcd.GetYSize()-302)/2, (lcd.GetXSize()-68)/2, pBmp); |
pierrebizouard | 7:9276134bb25e | 244 | } |
pierrebizouard | 7:9276134bb25e | 245 | |
pierrebizouard | 7:9276134bb25e | 246 | void draw_version_screen(int layer) |
pierrebizouard | 7:9276134bb25e | 247 | { |
pierrebizouard | 7:9276134bb25e | 248 | lcd.SelectLayer(layer); |
pierrebizouard | 7:9276134bb25e | 249 | lcd.SetBackColor(LCD_COLOR_BLUE); |
pierrebizouard | 7:9276134bb25e | 250 | lcd.SetTextColor(LCD_COLOR_WHITE); |
pierrebizouard | 7:9276134bb25e | 251 | lcd.Clear(LCD_COLOR_BLUE); |
pierrebizouard | 7:9276134bb25e | 252 | |
pierrebizouard | 7:9276134bb25e | 253 | BSP_LCD_SetFont(&UbuntuFont23); |
bcostm | 0:91c6ab790bd7 | 254 | |
bcostm | 0:91c6ab790bd7 | 255 | lcd.Clear(LCD_COLOR_BLUE); |
pierrebizouard | 10:1e21661f4e04 | 256 | uint8_t* pBmp = (uint8_t*)(big_fastlite_logo_68_302); |
pierrebizouard | 9:62df0b9df08d | 257 | lcd.DrawBitmap((lcd.GetYSize()-302)/2, 0, pBmp); |
pierrebizouard | 7:9276134bb25e | 258 | |
pierrebizouard | 7:9276134bb25e | 259 | sprintf((char*)text, "TEC interface"); |
pierrebizouard | 7:9276134bb25e | 260 | lcd.DisplayStringAt(5, LINE(0)+70, (uint8_t *)&text, LEFT_MODE); |
pierrebizouard | 7:9276134bb25e | 261 | sprintf((char*)text, "Version %s", CODE_VERSION_STRING); |
pierrebizouard | 7:9276134bb25e | 262 | lcd.DisplayStringAt(5, LINE(1)+70, (uint8_t *)&text, LEFT_MODE); |
pierrebizouard | 7:9276134bb25e | 263 | } |
pierrebizouard | 7:9276134bb25e | 264 | |
pierrebizouard | 7:9276134bb25e | 265 | void fade_screen(int layer, int fade_count, uint32_t color, int dest_layer) |
pierrebizouard | 7:9276134bb25e | 266 | { |
pierrebizouard | 7:9276134bb25e | 267 | lcd.SelectLayer(layer+1); |
pierrebizouard | 7:9276134bb25e | 268 | BSP_LCD_SetTransparency_NoReload(layer+1, 0); |
pierrebizouard | 7:9276134bb25e | 269 | BSP_LCD_SetColorKeying_NoReload(layer+1, LCD_COLOR_WHITE); |
pierrebizouard | 7:9276134bb25e | 270 | lcd.Clear(color); |
pierrebizouard | 7:9276134bb25e | 271 | LCD_Reload_Safe(); |
pierrebizouard | 7:9276134bb25e | 272 | BSP_LCD_SetLayerVisible_NoReload(layer+1, ENABLE); |
pierrebizouard | 7:9276134bb25e | 273 | BSP_LCD_Reload(LTDC_RELOAD_VERTICAL_BLANKING); |
pierrebizouard | 7:9276134bb25e | 274 | lcd.SetTextColor(color); |
pierrebizouard | 7:9276134bb25e | 275 | |
pierrebizouard | 7:9276134bb25e | 276 | for (int i=0; i<fade_count; i++) |
pierrebizouard | 7:9276134bb25e | 277 | { |
pierrebizouard | 7:9276134bb25e | 278 | BSP_LCD_SetTransparency_NoReload(layer+1,255/(fade_count-1)*i); //TRANSPARENCY == ALPHA so 255 is no transparent |
pierrebizouard | 7:9276134bb25e | 279 | BSP_LCD_Reload(LTDC_RELOAD_VERTICAL_BLANKING); |
pierrebizouard | 7:9276134bb25e | 280 | #ifndef NO_WAIT |
pierrebizouard | 7:9276134bb25e | 281 | wait(1./fade_count); |
pierrebizouard | 7:9276134bb25e | 282 | #endif |
pierrebizouard | 7:9276134bb25e | 283 | } |
pierrebizouard | 7:9276134bb25e | 284 | |
pierrebizouard | 7:9276134bb25e | 285 | BSP_LCD_ResetColorKeying_NoReload(layer+1); |
pierrebizouard | 7:9276134bb25e | 286 | BSP_LCD_SetLayerVisible_NoReload(layer+1, DISABLE); |
pierrebizouard | 7:9276134bb25e | 287 | |
pierrebizouard | 7:9276134bb25e | 288 | lcd.SelectLayer(layer); |
pierrebizouard | 7:9276134bb25e | 289 | lcd.Clear(color); |
pierrebizouard | 7:9276134bb25e | 290 | |
pierrebizouard | 7:9276134bb25e | 291 | if (layer != dest_layer) { |
pierrebizouard | 7:9276134bb25e | 292 | lcd.SelectLayer(dest_layer); |
pierrebizouard | 7:9276134bb25e | 293 | lcd.Clear(color); |
pierrebizouard | 7:9276134bb25e | 294 | BSP_LCD_SetLayerVisible_NoReload(dest_layer, ENABLE); |
pierrebizouard | 7:9276134bb25e | 295 | } |
pierrebizouard | 7:9276134bb25e | 296 | LCD_Reload_Safe(); |
pierrebizouard | 7:9276134bb25e | 297 | |
pierrebizouard | 7:9276134bb25e | 298 | } |
pierrebizouard | 7:9276134bb25e | 299 | |
pierrebizouard | 7:9276134bb25e | 300 | int curve_y_min_temp = 0; |
pierrebizouard | 7:9276134bb25e | 301 | int curve_y_zero_temp = 0; |
pierrebizouard | 7:9276134bb25e | 302 | int curve_x_zero_time = 0; |
pierrebizouard | 7:9276134bb25e | 303 | int curve_height_x = 0; |
pierrebizouard | 7:9276134bb25e | 304 | int curve_width_y = 0; |
pierrebizouard | 7:9276134bb25e | 305 | double pixel_temp_f=1.; |
pierrebizouard | 7:9276134bb25e | 306 | |
pierrebizouard | 7:9276134bb25e | 307 | void enable_curve_overlay(int layer, bool set_visible) |
pierrebizouard | 7:9276134bb25e | 308 | { |
pierrebizouard | 7:9276134bb25e | 309 | if (set_visible) BSP_LCD_SetLayerVisible_NoReload(layer, ENABLE); |
pierrebizouard | 7:9276134bb25e | 310 | lcd.SelectLayer(layer); |
pierrebizouard | 7:9276134bb25e | 311 | lcd.Clear(LCD_COLOR_TRANSPARENT); |
pierrebizouard | 7:9276134bb25e | 312 | BSP_LCD_SetColorKeying_NoReload(layer, LCD_COLOR_TRANSPARENT); |
pierrebizouard | 7:9276134bb25e | 313 | if (set_visible) { |
pierrebizouard | 7:9276134bb25e | 314 | LCD_Reload_Safe(); |
pierrebizouard | 7:9276134bb25e | 315 | } |
pierrebizouard | 7:9276134bb25e | 316 | } |
pierrebizouard | 7:9276134bb25e | 317 | |
pierrebizouard | 7:9276134bb25e | 318 | void disable_curve_overlay(int layer) |
pierrebizouard | 7:9276134bb25e | 319 | { |
pierrebizouard | 7:9276134bb25e | 320 | BSP_LCD_SetLayerVisible_NoReload(layer, DISABLE); |
pierrebizouard | 7:9276134bb25e | 321 | lcd.SelectLayer(layer); |
pierrebizouard | 7:9276134bb25e | 322 | lcd.Clear(LCD_COLOR_TRANSPARENT); |
pierrebizouard | 7:9276134bb25e | 323 | BSP_LCD_SetColorKeying_NoReload(layer, LCD_COLOR_TRANSPARENT); |
pierrebizouard | 7:9276134bb25e | 324 | LCD_Reload_Safe(); |
pierrebizouard | 7:9276134bb25e | 325 | |
pierrebizouard | 7:9276134bb25e | 326 | } |
pierrebizouard | 7:9276134bb25e | 327 | |
pierrebizouard | 7:9276134bb25e | 328 | void clear_curve_overlay(int layer) |
pierrebizouard | 7:9276134bb25e | 329 | { |
pierrebizouard | 7:9276134bb25e | 330 | lcd.SelectLayer(layer); |
pierrebizouard | 7:9276134bb25e | 331 | lcd.Clear(LCD_COLOR_TRANSPARENT); |
pierrebizouard | 7:9276134bb25e | 332 | } |
pierrebizouard | 7:9276134bb25e | 333 | |
pierrebizouard | 7:9276134bb25e | 334 | bool update_temperature_read_curve(int layer, int screen, bool clear, bool force_update) |
pierrebizouard | 7:9276134bb25e | 335 | { |
pierrebizouard | 7:9276134bb25e | 336 | lcd.SelectLayer(layer); |
pierrebizouard | 7:9276134bb25e | 337 | int temp_index = 0; |
pierrebizouard | 7:9276134bb25e | 338 | int temp_count = 0; |
pierrebizouard | 7:9276134bb25e | 339 | double* temp_curve = NULL; |
pierrebizouard | 7:9276134bb25e | 340 | uint32_t curve_color = 0; |
pierrebizouard | 7:9276134bb25e | 341 | |
pierrebizouard | 7:9276134bb25e | 342 | if (screen == -1) |
pierrebizouard | 7:9276134bb25e | 343 | { |
pierrebizouard | 7:9276134bb25e | 344 | temp_index = temperature_curve_fast_index; |
pierrebizouard | 7:9276134bb25e | 345 | temp_count = temperature_curve_fast_count; |
pierrebizouard | 7:9276134bb25e | 346 | temp_curve = temperature_curve_fast; |
pierrebizouard | 7:9276134bb25e | 347 | curve_color = LCD_COLOR_RED; |
pierrebizouard | 7:9276134bb25e | 348 | } else { |
pierrebizouard | 7:9276134bb25e | 349 | temp_index = temperature_curve_slow_index; |
pierrebizouard | 7:9276134bb25e | 350 | temp_count = temperature_curve_slow_count; |
pierrebizouard | 7:9276134bb25e | 351 | temp_curve = temperature_curve_slow; |
pierrebizouard | 7:9276134bb25e | 352 | curve_color = LCD_COLOR_DARKGREEN; |
pierrebizouard | 7:9276134bb25e | 353 | } |
pierrebizouard | 7:9276134bb25e | 354 | |
pierrebizouard | 7:9276134bb25e | 355 | if ((last_update_index == temp_index) && (force_update == false)) |
pierrebizouard | 7:9276134bb25e | 356 | { |
pierrebizouard | 7:9276134bb25e | 357 | return false; |
pierrebizouard | 7:9276134bb25e | 358 | } else { |
pierrebizouard | 7:9276134bb25e | 359 | last_update_index = temp_index; |
pierrebizouard | 7:9276134bb25e | 360 | } |
pierrebizouard | 7:9276134bb25e | 361 | |
pierrebizouard | 7:9276134bb25e | 362 | int start_index = (temp_index-temp_count)%MAX_TP_POINTS; |
pierrebizouard | 7:9276134bb25e | 363 | if (start_index < 0) { |
pierrebizouard | 7:9276134bb25e | 364 | start_index += MAX_TP_POINTS; |
pierrebizouard | 7:9276134bb25e | 365 | } |
pierrebizouard | 7:9276134bb25e | 366 | int stop_index = temp_index; |
pierrebizouard | 7:9276134bb25e | 367 | |
pierrebizouard | 7:9276134bb25e | 368 | int prev_y = -1; |
pierrebizouard | 7:9276134bb25e | 369 | int py = 0; |
pierrebizouard | 7:9276134bb25e | 370 | int px = 0; |
pierrebizouard | 7:9276134bb25e | 371 | |
pierrebizouard | 7:9276134bb25e | 372 | if (temp_count == 0) |
pierrebizouard | 7:9276134bb25e | 373 | { |
pierrebizouard | 7:9276134bb25e | 374 | return false; |
pierrebizouard | 7:9276134bb25e | 375 | } |
pierrebizouard | 7:9276134bb25e | 376 | |
pierrebizouard | 7:9276134bb25e | 377 | if (clear) { |
pierrebizouard | 7:9276134bb25e | 378 | clear_curve_overlay(layer); |
pierrebizouard | 7:9276134bb25e | 379 | } |
pierrebizouard | 7:9276134bb25e | 380 | |
pierrebizouard | 7:9276134bb25e | 381 | #define LINE_DRAW |
pierrebizouard | 7:9276134bb25e | 382 | |
pierrebizouard | 7:9276134bb25e | 383 | /* |
pierrebizouard | 7:9276134bb25e | 384 | lcd.SetTextColor(LCD_COLOR_WHITE); |
pierrebizouard | 7:9276134bb25e | 385 | sprintf((char*)text, "U%d %d %d", start_index, stop_index, start_index+MAX_TP_POINTS); |
pierrebizouard | 7:9276134bb25e | 386 | lcd.DisplayStringAt(0, LINE(1), (uint8_t *)&text, LEFT_MODE); |
pierrebizouard | 7:9276134bb25e | 387 | */ |
pierrebizouard | 7:9276134bb25e | 388 | |
pierrebizouard | 7:9276134bb25e | 389 | lcd.SetTextColor(curve_color); |
pierrebizouard | 7:9276134bb25e | 390 | int begin = -1; |
pierrebizouard | 7:9276134bb25e | 391 | int stop = -1; |
pierrebizouard | 7:9276134bb25e | 392 | |
pierrebizouard | 7:9276134bb25e | 393 | bool two_step = false; |
pierrebizouard | 7:9276134bb25e | 394 | if (stop_index <= start_index) { |
pierrebizouard | 7:9276134bb25e | 395 | begin = start_index; |
pierrebizouard | 7:9276134bb25e | 396 | stop = MAX_TP_POINTS; |
pierrebizouard | 7:9276134bb25e | 397 | two_step = true; |
pierrebizouard | 7:9276134bb25e | 398 | } else { |
pierrebizouard | 7:9276134bb25e | 399 | begin = start_index; |
pierrebizouard | 7:9276134bb25e | 400 | stop = stop_index; |
pierrebizouard | 7:9276134bb25e | 401 | } |
pierrebizouard | 7:9276134bb25e | 402 | |
pierrebizouard | 7:9276134bb25e | 403 | |
pierrebizouard | 7:9276134bb25e | 404 | bool draw_done = false; |
pierrebizouard | 7:9276134bb25e | 405 | while (draw_done == false) |
pierrebizouard | 7:9276134bb25e | 406 | { |
pierrebizouard | 7:9276134bb25e | 407 | for (int i=begin; i<stop; i++) |
pierrebizouard | 7:9276134bb25e | 408 | { |
pierrebizouard | 7:9276134bb25e | 409 | py = curve_y_zero_temp - temp_curve[i]*pixel_temp_f; |
pierrebizouard | 7:9276134bb25e | 410 | #ifdef LINE_DRAW |
pierrebizouard | 7:9276134bb25e | 411 | if ((prev_y != -1) && (px<curve_width_y) && (py>curve_y_min_temp-curve_height_x) && (py<curve_y_min_temp)) |
pierrebizouard | 7:9276134bb25e | 412 | { |
pierrebizouard | 7:9276134bb25e | 413 | lcd.DrawLine(px-1+curve_x_zero_time, prev_y, px+curve_x_zero_time, py); |
pierrebizouard | 7:9276134bb25e | 414 | } |
pierrebizouard | 7:9276134bb25e | 415 | prev_y = py; |
pierrebizouard | 7:9276134bb25e | 416 | #else |
pierrebizouard | 7:9276134bb25e | 417 | if ((px<curve_width_y) && (py>curve_y_min_temp-curve_height_x) && (py<curve_y_min_temp)) |
pierrebizouard | 7:9276134bb25e | 418 | { |
pierrebizouard | 7:9276134bb25e | 419 | lcd.DrawPixel(px+curve_x_zero_time, py, LCD_COLOR_BLACK); |
pierrebizouard | 7:9276134bb25e | 420 | } |
pierrebizouard | 7:9276134bb25e | 421 | #endif |
pierrebizouard | 7:9276134bb25e | 422 | px ++; |
pierrebizouard | 7:9276134bb25e | 423 | } |
pierrebizouard | 7:9276134bb25e | 424 | if (two_step) { |
pierrebizouard | 7:9276134bb25e | 425 | if (begin == 0) |
pierrebizouard | 7:9276134bb25e | 426 | { |
pierrebizouard | 7:9276134bb25e | 427 | draw_done = true; |
pierrebizouard | 7:9276134bb25e | 428 | } else { |
pierrebizouard | 7:9276134bb25e | 429 | begin = 0; |
pierrebizouard | 7:9276134bb25e | 430 | stop = stop_index; |
pierrebizouard | 7:9276134bb25e | 431 | } |
pierrebizouard | 7:9276134bb25e | 432 | } else { |
pierrebizouard | 7:9276134bb25e | 433 | draw_done = true; |
pierrebizouard | 7:9276134bb25e | 434 | } |
pierrebizouard | 7:9276134bb25e | 435 | } |
pierrebizouard | 7:9276134bb25e | 436 | return true; |
pierrebizouard | 7:9276134bb25e | 437 | } |
pierrebizouard | 7:9276134bb25e | 438 | |
pierrebizouard | 7:9276134bb25e | 439 | int plus_x = lcd.GetYSize()*3./4+30; |
pierrebizouard | 7:9276134bb25e | 440 | int plus_y = lcd.GetXSize()*1./4+20; |
pierrebizouard | 7:9276134bb25e | 441 | int minus_x = lcd.GetYSize()*3./4+30; |
pierrebizouard | 7:9276134bb25e | 442 | int minus_y = lcd.GetXSize()*3./4-20; |
pierrebizouard | 7:9276134bb25e | 443 | int radius = lcd.GetXSize()/8.; |
pierrebizouard | 7:9276134bb25e | 444 | |
pierrebizouard | 7:9276134bb25e | 445 | char temp_formatting[] = " %4.1lf xC "; |
pierrebizouard | 7:9276134bb25e | 446 | |
pierrebizouard | 7:9276134bb25e | 447 | void update_temperature_read_text() |
pierrebizouard | 7:9276134bb25e | 448 | { |
pierrebizouard | 7:9276134bb25e | 449 | sprintf((char*)text, temp_formatting, last_read_temperature); |
pierrebizouard | 7:9276134bb25e | 450 | lcd.DisplayStringAt(TEMP_DISP_X, TEMP_READ_DISP, (uint8_t *)&text, LEFT_MODE); |
pierrebizouard | 7:9276134bb25e | 451 | } |
pierrebizouard | 7:9276134bb25e | 452 | |
pierrebizouard | 7:9276134bb25e | 453 | void draw_regulation_screen(int layer) |
pierrebizouard | 7:9276134bb25e | 454 | { |
pierrebizouard | 7:9276134bb25e | 455 | temp_formatting[9] = 176; |
pierrebizouard | 7:9276134bb25e | 456 | |
bcostm | 0:91c6ab790bd7 | 457 | lcd.SetBackColor(LCD_COLOR_BLUE); |
bcostm | 0:91c6ab790bd7 | 458 | lcd.SetTextColor(LCD_COLOR_WHITE); |
pierrebizouard | 7:9276134bb25e | 459 | lcd.Clear(LCD_COLOR_BLUE); |
pierrebizouard | 7:9276134bb25e | 460 | |
pierrebizouard | 7:9276134bb25e | 461 | BSP_LCD_SetFont(&UbuntuFont23); |
bcostm | 0:91c6ab790bd7 | 462 | |
pierrebizouard | 6:7812b342d945 | 463 | lcd.DrawCircle(minus_x, minus_y, radius); |
pierrebizouard | 6:7812b342d945 | 464 | DrawRectCentered(minus_x, minus_y, radius*1.6, 5); |
pierrebizouard | 6:7812b342d945 | 465 | |
pierrebizouard | 6:7812b342d945 | 466 | lcd.DrawCircle(plus_x, plus_y, radius); |
pierrebizouard | 6:7812b342d945 | 467 | DrawRectCentered(plus_x, plus_y, radius*1.6, 5); |
pierrebizouard | 6:7812b342d945 | 468 | DrawRectCentered(plus_x, plus_y, 5, radius*1.6); |
pierrebizouard | 6:7812b342d945 | 469 | |
pierrebizouard | 7:9276134bb25e | 470 | //FASTLITE LOGO + LINE |
pierrebizouard | 7:9276134bb25e | 471 | DrawRectCentered(lcd.GetYSize()/2, lcd.GetXSize()-6, lcd.GetYSize(), 2); |
pierrebizouard | 10:1e21661f4e04 | 472 | uint8_t* pBmp = (uint8_t*)(fastlite_logo_landscape_90_20); |
pierrebizouard | 9:62df0b9df08d | 473 | lcd.DrawBitmap(lcd.GetYSize()-90, lcd.GetXSize()-20, pBmp); |
pierrebizouard | 9:62df0b9df08d | 474 | |
pierrebizouard | 7:9276134bb25e | 475 | |
pierrebizouard | 7:9276134bb25e | 476 | //FRINGEEZZ LOGO |
pierrebizouard | 7:9276134bb25e | 477 | #ifdef DEBUG |
pierrebizouard | 10:1e21661f4e04 | 478 | pBmp = (uint8_t*)(fringeezz_logo_landscape_124_49); |
pierrebizouard | 9:62df0b9df08d | 479 | lcd.DrawBitmap(0, lcd.GetXSize()-20-49-40, pBmp); |
pierrebizouard | 7:9276134bb25e | 480 | #else |
pierrebizouard | 10:1e21661f4e04 | 481 | pBmp = (uint8_t*)(big_fringezz_logo_91_233); |
pierrebizouard | 9:62df0b9df08d | 482 | lcd.DrawBitmap(5, 5, pBmp); |
pierrebizouard | 7:9276134bb25e | 483 | #endif |
pierrebizouard | 7:9276134bb25e | 484 | |
pierrebizouard | 7:9276134bb25e | 485 | sprintf((char*)text, "TEC set-up:"); |
pierrebizouard | 7:9276134bb25e | 486 | lcd.DisplayStringAt(TEMP_TEXT_X, TEMP_SET_TEXT, (uint8_t *)&text, LEFT_MODE); |
pierrebizouard | 7:9276134bb25e | 487 | sprintf((char*)text, temp_formatting, temperature_setpoint); |
pierrebizouard | 7:9276134bb25e | 488 | lcd.DisplayStringAt(TEMP_DISP_X, TEMP_SET_DISP, (uint8_t *)&text, LEFT_MODE); |
pierrebizouard | 7:9276134bb25e | 489 | |
pierrebizouard | 7:9276134bb25e | 490 | sprintf((char*)text, "TEC temp:"); |
pierrebizouard | 7:9276134bb25e | 491 | lcd.DisplayStringAt(TEMP_TEXT_X, TEMP_READ_TEXT, (uint8_t *)&text, LEFT_MODE); |
pierrebizouard | 7:9276134bb25e | 492 | |
pierrebizouard | 7:9276134bb25e | 493 | update_temperature_read_text(); |
pierrebizouard | 7:9276134bb25e | 494 | } |
pierrebizouard | 7:9276134bb25e | 495 | |
pierrebizouard | 7:9276134bb25e | 496 | |
pierrebizouard | 7:9276134bb25e | 497 | |
pierrebizouard | 7:9276134bb25e | 498 | void draw_curve_screen(int layer) |
pierrebizouard | 7:9276134bb25e | 499 | { |
pierrebizouard | 7:9276134bb25e | 500 | lcd.SetBackColor(LCD_COLOR_BLUE); |
pierrebizouard | 7:9276134bb25e | 501 | lcd.SetTextColor(LCD_COLOR_WHITE); |
pierrebizouard | 7:9276134bb25e | 502 | lcd.Clear(LCD_COLOR_BLUE); |
pierrebizouard | 7:9276134bb25e | 503 | |
pierrebizouard | 10:1e21661f4e04 | 504 | uint8_t* pBmp = (uint8_t*)(fringeezz_logo_landscape_124_49); |
pierrebizouard | 9:62df0b9df08d | 505 | lcd.DrawBitmap(1, 1, pBmp); |
pierrebizouard | 7:9276134bb25e | 506 | |
pierrebizouard | 7:9276134bb25e | 507 | lcd.SetBackColor(LCD_COLOR_BLUE); |
pierrebizouard | 7:9276134bb25e | 508 | lcd.SetTextColor(LCD_COLOR_WHITE); |
pierrebizouard | 7:9276134bb25e | 509 | BSP_LCD_SetFont(&Font16); |
pierrebizouard | 7:9276134bb25e | 510 | sprintf((char*)text, "TEC temperature"); |
pierrebizouard | 7:9276134bb25e | 511 | lcd.DisplayStringAt(130, LINE(0)+10, (uint8_t *)&text, LEFT_MODE); |
pierrebizouard | 7:9276134bb25e | 512 | |
pierrebizouard | 7:9276134bb25e | 513 | int margin_y = 10; |
pierrebizouard | 7:9276134bb25e | 514 | int margin_x = 21; |
pierrebizouard | 7:9276134bb25e | 515 | int offset_x = 15; |
pierrebizouard | 7:9276134bb25e | 516 | int offset_y = 10; |
pierrebizouard | 7:9276134bb25e | 517 | |
pierrebizouard | 7:9276134bb25e | 518 | lcd.SetTextColor(LCD_COLOR_BLACK); |
pierrebizouard | 6:7812b342d945 | 519 | |
pierrebizouard | 7:9276134bb25e | 520 | int curve_center_y = lcd.GetYSize()/2+offset_y; |
pierrebizouard | 7:9276134bb25e | 521 | int curve_center_x = lcd.GetXSize()/2+offset_x; |
pierrebizouard | 7:9276134bb25e | 522 | curve_height_x = lcd.GetXSize()-offset_x*2-margin_x*2; |
pierrebizouard | 7:9276134bb25e | 523 | curve_width_y = lcd.GetYSize()-offset_y*2-margin_y*2; |
pierrebizouard | 7:9276134bb25e | 524 | |
pierrebizouard | 7:9276134bb25e | 525 | DrawRectCentered(curve_center_y, curve_center_x, curve_width_y, curve_height_x); |
pierrebizouard | 7:9276134bb25e | 526 | |
pierrebizouard | 7:9276134bb25e | 527 | lcd.SetTextColor(LCD_COLOR_WHITE); |
pierrebizouard | 7:9276134bb25e | 528 | DrawRectCentered(curve_center_y, curve_center_x, curve_width_y-2, curve_height_x-2); |
pierrebizouard | 7:9276134bb25e | 529 | |
pierrebizouard | 7:9276134bb25e | 530 | int min_temp = -20; |
pierrebizouard | 7:9276134bb25e | 531 | int max_temp = 35; |
pierrebizouard | 7:9276134bb25e | 532 | int tick_space = 10; |
pierrebizouard | 7:9276134bb25e | 533 | |
pierrebizouard | 7:9276134bb25e | 534 | int delta_temp = max_temp - min_temp; |
pierrebizouard | 7:9276134bb25e | 535 | int vticks_pixels = int((curve_height_x-2)*tick_space/delta_temp); |
pierrebizouard | 7:9276134bb25e | 536 | double max_temp_f = min_temp + (1.*tick_space*curve_height_x)/vticks_pixels; |
pierrebizouard | 7:9276134bb25e | 537 | double delta_temp_f = max_temp - min_temp; |
pierrebizouard | 7:9276134bb25e | 538 | pixel_temp_f = curve_height_x/delta_temp; |
pierrebizouard | 7:9276134bb25e | 539 | curve_y_min_temp = curve_center_x+curve_height_x/2-1; |
pierrebizouard | 7:9276134bb25e | 540 | curve_y_zero_temp = curve_y_min_temp+(1.*min_temp*vticks_pixels/tick_space); |
pierrebizouard | 7:9276134bb25e | 541 | curve_x_zero_time = curve_center_y-curve_width_y/2+1; |
pierrebizouard | 6:7812b342d945 | 542 | |
pierrebizouard | 7:9276134bb25e | 543 | BSP_LCD_SetFont(&Font12); |
pierrebizouard | 7:9276134bb25e | 544 | for (int i=0; i<curve_height_x/vticks_pixels+1; i++) |
pierrebizouard | 7:9276134bb25e | 545 | { |
pierrebizouard | 7:9276134bb25e | 546 | lcd.SetTextColor(LCD_COLOR_BLACK); |
pierrebizouard | 7:9276134bb25e | 547 | |
pierrebizouard | 7:9276134bb25e | 548 | int vtick_pos = curve_center_x+curve_height_x/2-1-i*(vticks_pixels); |
pierrebizouard | 7:9276134bb25e | 549 | int vtick_pos_x = curve_center_y-curve_width_y/2-1; |
pierrebizouard | 7:9276134bb25e | 550 | lcd.DrawVLine(vtick_pos_x+5+1, vtick_pos, 5); |
pierrebizouard | 7:9276134bb25e | 551 | |
pierrebizouard | 7:9276134bb25e | 552 | lcd.SetTextColor(LCD_COLOR_WHITE); |
pierrebizouard | 7:9276134bb25e | 553 | |
pierrebizouard | 7:9276134bb25e | 554 | sprintf((char*)text, "%d", min_temp+10*i); |
pierrebizouard | 7:9276134bb25e | 555 | lcd.DisplayStringAt(30, vtick_pos-6, (uint8_t *)&text, RIGHT_MODE); |
pierrebizouard | 7:9276134bb25e | 556 | |
pierrebizouard | 7:9276134bb25e | 557 | lcd.SetTextColor(LCD_COLOR_BLACK); |
pierrebizouard | 7:9276134bb25e | 558 | |
pierrebizouard | 7:9276134bb25e | 559 | vtick_pos = curve_center_x+curve_height_x/2-1-i*(vticks_pixels); |
pierrebizouard | 7:9276134bb25e | 560 | vtick_pos_x = curve_center_y+curve_width_y/2-1; |
pierrebizouard | 7:9276134bb25e | 561 | lcd.DrawVLine(vtick_pos_x+1, vtick_pos, 5); |
pierrebizouard | 7:9276134bb25e | 562 | |
pierrebizouard | 7:9276134bb25e | 563 | } |
pierrebizouard | 7:9276134bb25e | 564 | |
pierrebizouard | 7:9276134bb25e | 565 | lcd.SetTextColor(LCD_COLOR_WHITE); |
pierrebizouard | 7:9276134bb25e | 566 | BSP_LCD_SetFont(&UbuntuFont23); |
pierrebizouard | 7:9276134bb25e | 567 | |
pierrebizouard | 7:9276134bb25e | 568 | |
pierrebizouard | 7:9276134bb25e | 569 | //FASTLITE LOGO + LINE |
pierrebizouard | 7:9276134bb25e | 570 | DrawRectCentered(lcd.GetYSize()/2, lcd.GetXSize()-6, lcd.GetYSize(), 2); |
pierrebizouard | 10:1e21661f4e04 | 571 | pBmp = (uint8_t*)(fastlite_logo_landscape_90_20); |
pierrebizouard | 9:62df0b9df08d | 572 | lcd.DrawBitmap(lcd.GetYSize()-90, lcd.GetXSize()-20, pBmp); |
pierrebizouard | 7:9276134bb25e | 573 | } |
pierrebizouard | 6:7812b342d945 | 574 | |
pierrebizouard | 7:9276134bb25e | 575 | void draw_screens(int screen, int layer) |
pierrebizouard | 7:9276134bb25e | 576 | { |
pierrebizouard | 7:9276134bb25e | 577 | lcd.SelectLayer(layer); |
pierrebizouard | 7:9276134bb25e | 578 | lcd.Clear(LCD_COLOR_BLUE); |
pierrebizouard | 7:9276134bb25e | 579 | if ((screen == -1) || (screen == -2)) |
pierrebizouard | 7:9276134bb25e | 580 | { |
pierrebizouard | 7:9276134bb25e | 581 | draw_curve_screen(layer); |
pierrebizouard | 7:9276134bb25e | 582 | |
pierrebizouard | 7:9276134bb25e | 583 | lcd.SetBackColor(LCD_COLOR_BLUE); |
pierrebizouard | 7:9276134bb25e | 584 | lcd.SetTextColor(LCD_COLOR_WHITE); |
pierrebizouard | 7:9276134bb25e | 585 | BSP_LCD_SetFont(&Font16); |
pierrebizouard | 7:9276134bb25e | 586 | if (screen == -1) { |
pierrebizouard | 7:9276134bb25e | 587 | sprintf((char*)text, "(%dms)", DELAY_ACQ+TS_READ_TIME); |
pierrebizouard | 7:9276134bb25e | 588 | } else { |
pierrebizouard | 7:9276134bb25e | 589 | sprintf((char*)text, "(%ds)", (DELAY_ACQ+TS_READ_TIME)*TEMPERATURE_SLOW_ACCUMULATE/1000); |
pierrebizouard | 7:9276134bb25e | 590 | } |
pierrebizouard | 7:9276134bb25e | 591 | lcd.DisplayStringAt(130, LINE(1)+10, (uint8_t *)&text, LEFT_MODE); |
pierrebizouard | 7:9276134bb25e | 592 | } else { |
pierrebizouard | 7:9276134bb25e | 593 | if (screen == 0) { |
pierrebizouard | 7:9276134bb25e | 594 | draw_regulation_screen(layer); |
pierrebizouard | 7:9276134bb25e | 595 | } else if (screen == 1) { |
pierrebizouard | 7:9276134bb25e | 596 | draw_version_screen(layer); |
pierrebizouard | 7:9276134bb25e | 597 | } |
pierrebizouard | 7:9276134bb25e | 598 | } |
pierrebizouard | 6:7812b342d945 | 599 | |
pierrebizouard | 7:9276134bb25e | 600 | #ifdef DEBUG |
pierrebizouard | 7:9276134bb25e | 601 | lcd.SelectLayer(layer); |
pierrebizouard | 7:9276134bb25e | 602 | lcd.SetBackColor(LCD_COLOR_BLUE); |
pierrebizouard | 7:9276134bb25e | 603 | lcd.SetTextColor(LCD_COLOR_WHITE); |
pierrebizouard | 7:9276134bb25e | 604 | BSP_LCD_SetFont(&UbuntuFont23); |
pierrebizouard | 7:9276134bb25e | 605 | sprintf((char*)text, "screen(%d)", screen); |
pierrebizouard | 7:9276134bb25e | 606 | lcd.DisplayStringAt(0, LINE(0), (uint8_t *)&text, LEFT_MODE); |
pierrebizouard | 7:9276134bb25e | 607 | #endif |
pierrebizouard | 7:9276134bb25e | 608 | } |
pierrebizouard | 7:9276134bb25e | 609 | |
pierrebizouard | 7:9276134bb25e | 610 | |
pierrebizouard | 7:9276134bb25e | 611 | int main() |
pierrebizouard | 7:9276134bb25e | 612 | { |
pierrebizouard | 7:9276134bb25e | 613 | TS_StateTypeDef TS_State; |
pierrebizouard | 7:9276134bb25e | 614 | uint16_t x, y; |
pierrebizouard | 7:9276134bb25e | 615 | uint8_t ts_status; |
pierrebizouard | 7:9276134bb25e | 616 | |
pierrebizouard | 7:9276134bb25e | 617 | load_temperature_storage(); |
pierrebizouard | 7:9276134bb25e | 618 | |
pierrebizouard | 7:9276134bb25e | 619 | /*initialize lcd*/ |
pierrebizouard | 7:9276134bb25e | 620 | lcd.SelectLayer(2); |
pierrebizouard | 7:9276134bb25e | 621 | BSP_LCD_SetTransparency_NoReload(2, 255); |
pierrebizouard | 7:9276134bb25e | 622 | BSP_LCD_ResetColorKeying_NoReload(2); |
pierrebizouard | 7:9276134bb25e | 623 | lcd.Clear(LCD_COLOR_BLUE); |
pierrebizouard | 7:9276134bb25e | 624 | BSP_LCD_SetLayerVisible_NoReload(2, ENABLE); |
pierrebizouard | 7:9276134bb25e | 625 | LCD_Reload_Safe(); |
pierrebizouard | 7:9276134bb25e | 626 | BSP_LCD_SetFont(&UbuntuFont23); |
pierrebizouard | 7:9276134bb25e | 627 | |
pierrebizouard | 7:9276134bb25e | 628 | lcd.SelectLayer(1); |
pierrebizouard | 7:9276134bb25e | 629 | BSP_LCD_SetTransparency_NoReload(1, 255); |
pierrebizouard | 7:9276134bb25e | 630 | BSP_LCD_ResetColorKeying_NoReload(1); |
pierrebizouard | 7:9276134bb25e | 631 | lcd.Clear(LCD_COLOR_BLUE); |
pierrebizouard | 7:9276134bb25e | 632 | BSP_LCD_SetLayerVisible_NoReload(2, DISABLE); |
pierrebizouard | 7:9276134bb25e | 633 | BSP_LCD_SetLayerVisible_NoReload(1, ENABLE); |
pierrebizouard | 7:9276134bb25e | 634 | LCD_Reload_Safe(); |
pierrebizouard | 7:9276134bb25e | 635 | lcd.SetTextColor(LCD_COLOR_BLUE); |
pierrebizouard | 7:9276134bb25e | 636 | BSP_LCD_SetFont(&UbuntuFont23); |
pierrebizouard | 7:9276134bb25e | 637 | |
pierrebizouard | 7:9276134bb25e | 638 | lcd.SelectLayer(0); |
pierrebizouard | 7:9276134bb25e | 639 | BSP_LCD_SetTransparency_NoReload(0, 255); |
pierrebizouard | 7:9276134bb25e | 640 | BSP_LCD_ResetColorKeying_NoReload(0); |
pierrebizouard | 7:9276134bb25e | 641 | lcd.Clear(LCD_COLOR_BLUE); |
pierrebizouard | 7:9276134bb25e | 642 | BSP_LCD_SetLayerVisible_NoReload(1, DISABLE); |
pierrebizouard | 7:9276134bb25e | 643 | BSP_LCD_SetLayerVisible_NoReload(0, ENABLE); |
pierrebizouard | 7:9276134bb25e | 644 | LCD_Reload_Safe(); |
pierrebizouard | 7:9276134bb25e | 645 | lcd.SetTextColor(LCD_COLOR_BLUE); |
pierrebizouard | 7:9276134bb25e | 646 | BSP_LCD_SetFont(&UbuntuFont23); |
pierrebizouard | 7:9276134bb25e | 647 | |
pierrebizouard | 7:9276134bb25e | 648 | ts_status = ts.Init(lcd.GetXSize(), lcd.GetYSize()); |
pierrebizouard | 7:9276134bb25e | 649 | |
pierrebizouard | 7:9276134bb25e | 650 | |
pierrebizouard | 7:9276134bb25e | 651 | int layer_startup = 0; |
pierrebizouard | 7:9276134bb25e | 652 | draw_startup_screen(layer_startup); |
pierrebizouard | 7:9276134bb25e | 653 | wait(0.01); |
pierrebizouard | 7:9276134bb25e | 654 | |
pierrebizouard | 7:9276134bb25e | 655 | check_temperature_storage(); /*takes 1s */ |
pierrebizouard | 7:9276134bb25e | 656 | |
pierrebizouard | 7:9276134bb25e | 657 | //FADE |
pierrebizouard | 7:9276134bb25e | 658 | int fade_count = 30; |
pierrebizouard | 7:9276134bb25e | 659 | fade_screen(layer_startup, fade_count, LCD_COLOR_BLUE, DEFAULT_LAYER); |
pierrebizouard | 7:9276134bb25e | 660 | //FADE DONE |
pierrebizouard | 7:9276134bb25e | 661 | |
pierrebizouard | 7:9276134bb25e | 662 | #define TOUCH_COUNT 512 |
pierrebizouard | 7:9276134bb25e | 663 | int touch_history_x[TOUCH_COUNT]; |
pierrebizouard | 7:9276134bb25e | 664 | int touch_history_y[TOUCH_COUNT]; |
pierrebizouard | 7:9276134bb25e | 665 | int touch_history_count = 0; |
pierrebizouard | 7:9276134bb25e | 666 | bool touch_screen_idle = false; |
pierrebizouard | 7:9276134bb25e | 667 | int previous_x = -1; |
pierrebizouard | 7:9276134bb25e | 668 | int previous_y = -1; |
pierrebizouard | 7:9276134bb25e | 669 | int swipe_pos_x_start = -1; |
pierrebizouard | 7:9276134bb25e | 670 | |
pierrebizouard | 7:9276134bb25e | 671 | int swipe_dir = 0; |
pierrebizouard | 7:9276134bb25e | 672 | bool start_swipe = false; |
pierrebizouard | 7:9276134bb25e | 673 | int swipe_pos = 0; |
pierrebizouard | 7:9276134bb25e | 674 | int selected_screen = 0; |
pierrebizouard | 7:9276134bb25e | 675 | |
pierrebizouard | 7:9276134bb25e | 676 | enable_curve_overlay(DEFAULT_LAYER+1, false); |
pierrebizouard | 7:9276134bb25e | 677 | draw_screens(selected_screen, DEFAULT_LAYER); |
pierrebizouard | 6:7812b342d945 | 678 | |
pierrebizouard | 6:7812b342d945 | 679 | int accel = 1; |
pierrebizouard | 6:7812b342d945 | 680 | Timer t; |
pierrebizouard | 6:7812b342d945 | 681 | t.start(); |
pierrebizouard | 7:9276134bb25e | 682 | Timer idle_time; |
pierrebizouard | 7:9276134bb25e | 683 | t.start(); |
pierrebizouard | 7:9276134bb25e | 684 | |
pierrebizouard | 7:9276134bb25e | 685 | while (ts_status != TS_OK) { |
pierrebizouard | 7:9276134bb25e | 686 | lcd.SelectLayer(DEFAULT_LAYER); |
pierrebizouard | 7:9276134bb25e | 687 | lcd.SetTextColor(LCD_COLOR_RED); |
pierrebizouard | 7:9276134bb25e | 688 | lcd.DisplayStringAt(0, LINE(0), (uint8_t *)"TOUCH INIT FAIL", LEFT_MODE); /*center mode is broken in landscape for fixing right mode*/ |
pierrebizouard | 7:9276134bb25e | 689 | lcd.SetTextColor(LCD_COLOR_WHITE); |
pierrebizouard | 7:9276134bb25e | 690 | } |
pierrebizouard | 7:9276134bb25e | 691 | |
pierrebizouard | 7:9276134bb25e | 692 | int dest_loc = 0; |
pierrebizouard | 7:9276134bb25e | 693 | int swipe_layer = 1; |
pierrebizouard | 7:9276134bb25e | 694 | uint32_t swipe_layer_address = LCD_FRAME_BUFFER+(lcd.GetXSize()*lcd.GetYSize()*4)*swipe_layer; |
pierrebizouard | 7:9276134bb25e | 695 | int destination_screen = 0 ; |
pierrebizouard | 6:7812b342d945 | 696 | |
pierrebizouard | 7:9276134bb25e | 697 | /* |
pierrebizouard | 7:9276134bb25e | 698 | int source_layer = 0; |
pierrebizouard | 7:9276134bb25e | 699 | int dest_layer = 0; |
pierrebizouard | 7:9276134bb25e | 700 | int backup_layer = 0; |
pierrebizouard | 7:9276134bb25e | 701 | int backup_loc = 0; |
pierrebizouard | 7:9276134bb25e | 702 | */ |
pierrebizouard | 7:9276134bb25e | 703 | int curve_update = 0; |
bcostm | 0:91c6ab790bd7 | 704 | while(1) |
bcostm | 0:91c6ab790bd7 | 705 | { |
pierrebizouard | 6:7812b342d945 | 706 | ts.GetState(&TS_State); |
pierrebizouard | 6:7812b342d945 | 707 | //#ifdef TOUCHSCREEN_DEMO |
pierrebizouard | 7:9276134bb25e | 708 | if ((TS_State.TouchDetected) && (start_swipe == false)) |
bcostm | 0:91c6ab790bd7 | 709 | { |
pierrebizouard | 7:9276134bb25e | 710 | idle_time.reset(); |
pierrebizouard | 7:9276134bb25e | 711 | |
bcostm | 0:91c6ab790bd7 | 712 | x = TS_State.X; |
bcostm | 0:91c6ab790bd7 | 713 | y = TS_State.Y; |
pierrebizouard | 6:7812b342d945 | 714 | |
pierrebizouard | 6:7812b342d945 | 715 | int portrait_x = lcd.GetYSize()-y; |
pierrebizouard | 6:7812b342d945 | 716 | int portrait_y = x; |
pierrebizouard | 6:7812b342d945 | 717 | |
pierrebizouard | 6:7812b342d945 | 718 | x = portrait_x; |
pierrebizouard | 6:7812b342d945 | 719 | y = portrait_y; |
pierrebizouard | 6:7812b342d945 | 720 | |
pierrebizouard | 7:9276134bb25e | 721 | |
pierrebizouard | 6:7812b342d945 | 722 | |
pierrebizouard | 6:7812b342d945 | 723 | //sprintf((char*)text, "%d %d %d", minus_dist, plus_dist, radius*radius); |
pierrebizouard | 6:7812b342d945 | 724 | //lcd.DisplayStringAt(0, LINE(6), (uint8_t *)&text, LEFT_MODE); |
pierrebizouard | 6:7812b342d945 | 725 | |
pierrebizouard | 7:9276134bb25e | 726 | if (touch_screen_idle) { |
pierrebizouard | 7:9276134bb25e | 727 | touch_screen_idle = false; |
pierrebizouard | 7:9276134bb25e | 728 | previous_y = -1; |
pierrebizouard | 7:9276134bb25e | 729 | previous_x = -1; |
pierrebizouard | 7:9276134bb25e | 730 | } |
pierrebizouard | 6:7812b342d945 | 731 | |
pierrebizouard | 7:9276134bb25e | 732 | bool button_pressed = false; |
pierrebizouard | 7:9276134bb25e | 733 | |
pierrebizouard | 7:9276134bb25e | 734 | /* handle buttons */ |
pierrebizouard | 7:9276134bb25e | 735 | if (selected_screen == 0) /* screen has buttons (regulation screen) */ { |
pierrebizouard | 7:9276134bb25e | 736 | int minus_dist = (x-minus_x)*(x-minus_x) + (y-minus_y)*(y-minus_y); |
pierrebizouard | 7:9276134bb25e | 737 | int plus_dist = (x-plus_x)*(x-plus_x) + (y-plus_y)*(y-plus_y); |
pierrebizouard | 7:9276134bb25e | 738 | |
pierrebizouard | 7:9276134bb25e | 739 | if (minus_dist <= radius*radius) { |
pierrebizouard | 7:9276134bb25e | 740 | button_pressed = true; |
pierrebizouard | 7:9276134bb25e | 741 | lcd.SetTextColor(LCD_COLOR_RED); |
pierrebizouard | 7:9276134bb25e | 742 | lcd.DrawCircle(minus_x, minus_y, radius); |
pierrebizouard | 7:9276134bb25e | 743 | temperature_setpoint = temperature_setpoint - 0.1; |
pierrebizouard | 7:9276134bb25e | 744 | sprintf((char*)text, temp_formatting, temperature_setpoint); |
pierrebizouard | 7:9276134bb25e | 745 | lcd.DisplayStringAt(TEMP_DISP_X, TEMP_SET_DISP, (uint8_t *)&text, LEFT_MODE); |
pierrebizouard | 6:7812b342d945 | 746 | write_temperature_setpoint(temperature_setpoint); |
pierrebizouard | 6:7812b342d945 | 747 | wait(0.1/max(accel/10,1)); |
pierrebizouard | 6:7812b342d945 | 748 | lcd.SetTextColor(LCD_COLOR_WHITE); |
pierrebizouard | 7:9276134bb25e | 749 | lcd.DrawCircle(minus_x, minus_y, radius); |
pierrebizouard | 7:9276134bb25e | 750 | if (accel < 1000) |
pierrebizouard | 7:9276134bb25e | 751 | { |
pierrebizouard | 7:9276134bb25e | 752 | accel += 1; |
pierrebizouard | 7:9276134bb25e | 753 | } |
pierrebizouard | 6:7812b342d945 | 754 | } else { |
pierrebizouard | 7:9276134bb25e | 755 | if (plus_dist <= radius*radius) { |
pierrebizouard | 7:9276134bb25e | 756 | button_pressed = true; |
pierrebizouard | 7:9276134bb25e | 757 | lcd.SetTextColor(LCD_COLOR_GREEN); |
pierrebizouard | 7:9276134bb25e | 758 | lcd.DrawCircle(plus_x, plus_y, radius); |
pierrebizouard | 7:9276134bb25e | 759 | temperature_setpoint = temperature_setpoint + 0.1; |
pierrebizouard | 7:9276134bb25e | 760 | sprintf((char*)text, temp_formatting, temperature_setpoint); |
pierrebizouard | 7:9276134bb25e | 761 | lcd.DisplayStringAt(TEMP_DISP_X, TEMP_SET_DISP, (uint8_t *)&text, LEFT_MODE); |
pierrebizouard | 7:9276134bb25e | 762 | write_temperature_setpoint(temperature_setpoint); |
pierrebizouard | 7:9276134bb25e | 763 | wait(0.1/max(accel/10,1)); |
pierrebizouard | 7:9276134bb25e | 764 | lcd.SetTextColor(LCD_COLOR_WHITE); |
pierrebizouard | 7:9276134bb25e | 765 | lcd.DrawCircle(plus_x, plus_y, radius); |
pierrebizouard | 7:9276134bb25e | 766 | if (accel < 1000) |
pierrebizouard | 7:9276134bb25e | 767 | { |
pierrebizouard | 7:9276134bb25e | 768 | accel += 1; |
pierrebizouard | 7:9276134bb25e | 769 | } |
pierrebizouard | 7:9276134bb25e | 770 | } |
pierrebizouard | 6:7812b342d945 | 771 | } |
pierrebizouard | 6:7812b342d945 | 772 | } |
pierrebizouard | 7:9276134bb25e | 773 | |
pierrebizouard | 7:9276134bb25e | 774 | /* handle swipe */ |
pierrebizouard | 7:9276134bb25e | 775 | if (not button_pressed) { |
pierrebizouard | 7:9276134bb25e | 776 | accel = 0; |
pierrebizouard | 7:9276134bb25e | 777 | if (start_swipe == false) |
pierrebizouard | 7:9276134bb25e | 778 | { |
pierrebizouard | 7:9276134bb25e | 779 | if (swipe_pos_x_start == -1) |
pierrebizouard | 7:9276134bb25e | 780 | { |
pierrebizouard | 7:9276134bb25e | 781 | swipe_pos_x_start = x; |
pierrebizouard | 7:9276134bb25e | 782 | } else { |
pierrebizouard | 7:9276134bb25e | 783 | if (abs(x - swipe_pos_x_start) > 15) { |
pierrebizouard | 7:9276134bb25e | 784 | start_swipe = true; |
pierrebizouard | 7:9276134bb25e | 785 | if ((x-swipe_pos_x_start) < 0) |
pierrebizouard | 7:9276134bb25e | 786 | { |
pierrebizouard | 7:9276134bb25e | 787 | swipe_dir = +1; |
pierrebizouard | 7:9276134bb25e | 788 | } else { |
pierrebizouard | 7:9276134bb25e | 789 | swipe_dir = -1; |
pierrebizouard | 7:9276134bb25e | 790 | } |
pierrebizouard | 7:9276134bb25e | 791 | } |
pierrebizouard | 7:9276134bb25e | 792 | } |
pierrebizouard | 7:9276134bb25e | 793 | } else { |
pierrebizouard | 7:9276134bb25e | 794 | /*swipe started do nothing*/ |
pierrebizouard | 7:9276134bb25e | 795 | } |
pierrebizouard | 7:9276134bb25e | 796 | //sprintf((char*)text, "x=%d, px=%d y=%d ", x, swipe_pos_x_start, touch_screen_idle); |
pierrebizouard | 7:9276134bb25e | 797 | //lcd.DisplayStringAt(0, LINE(0), (uint8_t *)&text, LEFT_MODE); |
pierrebizouard | 7:9276134bb25e | 798 | } |
pierrebizouard | 7:9276134bb25e | 799 | |
pierrebizouard | 7:9276134bb25e | 800 | |
pierrebizouard | 7:9276134bb25e | 801 | previous_x = x; |
pierrebizouard | 7:9276134bb25e | 802 | previous_y = y; |
pierrebizouard | 6:7812b342d945 | 803 | |
pierrebizouard | 6:7812b342d945 | 804 | #ifdef TOUCH_TEST |
pierrebizouard | 5:b69870b843f3 | 805 | swo.puts((char*)text); |
pierrebizouard | 5:b69870b843f3 | 806 | ser.puts((char*)text); |
pierrebizouard | 6:7812b342d945 | 807 | for (int l=0; l<10; l++) { |
pierrebizouard | 6:7812b342d945 | 808 | sprintf((char*)text, "l=%d, x=%d y=%d ", l, x, y); |
pierrebizouard | 6:7812b342d945 | 809 | lcd.DisplayStringAt(0, LINE(l), (uint8_t *)&text, LEFT_MODE); |
pierrebizouard | 6:7812b342d945 | 810 | } |
pierrebizouard | 6:7812b342d945 | 811 | #endif |
pierrebizouard | 6:7812b342d945 | 812 | } else { |
pierrebizouard | 7:9276134bb25e | 813 | //no touch |
pierrebizouard | 7:9276134bb25e | 814 | if (not touch_screen_idle) |
pierrebizouard | 7:9276134bb25e | 815 | { |
pierrebizouard | 7:9276134bb25e | 816 | idle_time.start(); |
pierrebizouard | 7:9276134bb25e | 817 | } |
pierrebizouard | 7:9276134bb25e | 818 | if (idle_time.read_ms() >= 100) |
pierrebizouard | 7:9276134bb25e | 819 | { |
pierrebizouard | 7:9276134bb25e | 820 | touch_history_count = 0; |
pierrebizouard | 7:9276134bb25e | 821 | //sprintf((char*)text, "px=%d i=%d ", swipe_pos_x_start, touch_screen_idle); |
pierrebizouard | 7:9276134bb25e | 822 | //lcd.DisplayStringAt(0, LINE(0), (uint8_t *)&text, LEFT_MODE); |
pierrebizouard | 7:9276134bb25e | 823 | |
pierrebizouard | 7:9276134bb25e | 824 | if (not touch_screen_idle) { |
pierrebizouard | 7:9276134bb25e | 825 | touch_screen_idle = true; |
pierrebizouard | 7:9276134bb25e | 826 | swipe_pos_x_start = -1; |
pierrebizouard | 7:9276134bb25e | 827 | } |
pierrebizouard | 7:9276134bb25e | 828 | |
pierrebizouard | 7:9276134bb25e | 829 | } else { |
pierrebizouard | 7:9276134bb25e | 830 | |
pierrebizouard | 7:9276134bb25e | 831 | } |
pierrebizouard | 6:7812b342d945 | 832 | accel = 0; |
bcostm | 0:91c6ab790bd7 | 833 | } |
pierrebizouard | 6:7812b342d945 | 834 | |
pierrebizouard | 10:1e21661f4e04 | 835 | if (start_swipe && (((selected_screen == 1) && (swipe_dir == +1)) || ((selected_screen == -2) && (swipe_dir == -1)))) |
pierrebizouard | 7:9276134bb25e | 836 | { |
pierrebizouard | 7:9276134bb25e | 837 | start_swipe = false; |
pierrebizouard | 7:9276134bb25e | 838 | } |
pierrebizouard | 7:9276134bb25e | 839 | |
pierrebizouard | 7:9276134bb25e | 840 | if (start_swipe == true) |
pierrebizouard | 7:9276134bb25e | 841 | { |
pierrebizouard | 7:9276134bb25e | 842 | |
pierrebizouard | 7:9276134bb25e | 843 | if (swipe_pos >= lcd.GetYSize()) |
pierrebizouard | 7:9276134bb25e | 844 | { |
pierrebizouard | 7:9276134bb25e | 845 | start_swipe = false; |
pierrebizouard | 7:9276134bb25e | 846 | |
pierrebizouard | 7:9276134bb25e | 847 | wait(1./LCD_REFRESH_RATE); |
pierrebizouard | 7:9276134bb25e | 848 | |
pierrebizouard | 7:9276134bb25e | 849 | // swipe occurs to |
pierrebizouard | 7:9276134bb25e | 850 | |
pierrebizouard | 7:9276134bb25e | 851 | // swipe to 0. changes the pointer |
pierrebizouard | 7:9276134bb25e | 852 | BSP_LCD_SetLayerAddress_NoReload(swipe_layer, swipe_layer_address); |
pierrebizouard | 7:9276134bb25e | 853 | |
pierrebizouard | 7:9276134bb25e | 854 | //copy current displayed layer to 0 |
pierrebizouard | 7:9276134bb25e | 855 | if (dest_loc != DEFAULT_LAYER) { |
pierrebizouard | 7:9276134bb25e | 856 | BSP_LCD_CopyLayer(dest_loc, DEFAULT_LAYER, 0); //overwrite layer 0 with data displayed |
pierrebizouard | 7:9276134bb25e | 857 | } |
pierrebizouard | 7:9276134bb25e | 858 | |
pierrebizouard | 7:9276134bb25e | 859 | if (DEFAULT_LAYER != swipe_layer) { |
pierrebizouard | 7:9276134bb25e | 860 | if (swipe_layer == DEFAULT_LAYER+1) |
pierrebizouard | 7:9276134bb25e | 861 | { |
pierrebizouard | 7:9276134bb25e | 862 | if (destination_screen < 0) /* destination screen has overlay */ |
pierrebizouard | 7:9276134bb25e | 863 | { |
pierrebizouard | 7:9276134bb25e | 864 | /* clear the swipe layer for overlay */ |
pierrebizouard | 7:9276134bb25e | 865 | /* 0 != 1 */ |
pierrebizouard | 7:9276134bb25e | 866 | /* this means it goes DOWN */ |
pierrebizouard | 7:9276134bb25e | 867 | /* swipe layer is 1 */ |
pierrebizouard | 7:9276134bb25e | 868 | /* swipe layer is pointing to dest_loc */ |
pierrebizouard | 7:9276134bb25e | 869 | /* dest_loc is copied to layer 0 */ |
pierrebizouard | 7:9276134bb25e | 870 | |
pierrebizouard | 7:9276134bb25e | 871 | /* clear_curve_overlay(swipe_layer); this flickers because layer is allready visible */ |
pierrebizouard | 7:9276134bb25e | 872 | BSP_LCD_SetLayerVisible_NoReload(swipe_layer, ENABLE); |
pierrebizouard | 7:9276134bb25e | 873 | curve_update = 0; |
pierrebizouard | 7:9276134bb25e | 874 | } else { |
pierrebizouard | 7:9276134bb25e | 875 | BSP_LCD_SetLayerVisible_NoReload(swipe_layer, DISABLE); |
pierrebizouard | 7:9276134bb25e | 876 | } |
pierrebizouard | 7:9276134bb25e | 877 | } else { |
pierrebizouard | 7:9276134bb25e | 878 | BSP_LCD_SetLayerVisible_NoReload(swipe_layer, DISABLE); |
pierrebizouard | 7:9276134bb25e | 879 | } |
pierrebizouard | 7:9276134bb25e | 880 | lcd.SelectLayer(DEFAULT_LAYER); |
pierrebizouard | 7:9276134bb25e | 881 | BSP_LCD_SetLayerVisible_NoReload(DEFAULT_LAYER, ENABLE); |
pierrebizouard | 7:9276134bb25e | 882 | } else { |
pierrebizouard | 7:9276134bb25e | 883 | /* it swipes UP */ |
pierrebizouard | 7:9276134bb25e | 884 | /* there is a not displayed overlay clear it before */ |
pierrebizouard | 7:9276134bb25e | 885 | if (destination_screen < 0) /* destination screen has overlay */ |
pierrebizouard | 7:9276134bb25e | 886 | { |
pierrebizouard | 7:9276134bb25e | 887 | /* clear the swipe layer for overlay */ |
pierrebizouard | 7:9276134bb25e | 888 | /* clear_curve_overlay(DEFAULT_LAYER+1); */ |
pierrebizouard | 7:9276134bb25e | 889 | BSP_LCD_SetLayerVisible_NoReload(DEFAULT_LAYER+1, ENABLE); |
pierrebizouard | 7:9276134bb25e | 890 | /* go from 1 to 0*/ |
pierrebizouard | 7:9276134bb25e | 891 | |
pierrebizouard | 7:9276134bb25e | 892 | curve_update = 0; |
pierrebizouard | 7:9276134bb25e | 893 | } else { |
pierrebizouard | 7:9276134bb25e | 894 | /* should allready be disabled */ |
pierrebizouard | 7:9276134bb25e | 895 | BSP_LCD_SetLayerVisible_NoReload(DEFAULT_LAYER+1, DISABLE); |
pierrebizouard | 7:9276134bb25e | 896 | } |
pierrebizouard | 7:9276134bb25e | 897 | } |
pierrebizouard | 7:9276134bb25e | 898 | lcd.SelectLayer(DEFAULT_LAYER); |
pierrebizouard | 7:9276134bb25e | 899 | wait(1./LCD_REFRESH_RATE); |
pierrebizouard | 7:9276134bb25e | 900 | LCD_Reload_Safe(); |
pierrebizouard | 7:9276134bb25e | 901 | |
pierrebizouard | 7:9276134bb25e | 902 | //BSP_LCD_Reload(LTDC_RELOAD_IMMEDIATE); |
pierrebizouard | 7:9276134bb25e | 903 | selected_screen = destination_screen; |
pierrebizouard | 7:9276134bb25e | 904 | |
pierrebizouard | 7:9276134bb25e | 905 | swipe_pos = 0; |
pierrebizouard | 7:9276134bb25e | 906 | swipe_dir = 0; |
pierrebizouard | 7:9276134bb25e | 907 | } else { |
pierrebizouard | 7:9276134bb25e | 908 | if (swipe_pos == 0) { |
pierrebizouard | 7:9276134bb25e | 909 | /* start swipe */ |
pierrebizouard | 7:9276134bb25e | 910 | |
pierrebizouard | 7:9276134bb25e | 911 | wait(0.1); |
pierrebizouard | 7:9276134bb25e | 912 | |
pierrebizouard | 7:9276134bb25e | 913 | /* if (selected_screen < 0) |
pierrebizouard | 7:9276134bb25e | 914 | { |
pierrebizouard | 7:9276134bb25e | 915 | // this would flicker |
pierrebizouard | 7:9276134bb25e | 916 | clear_curve_overlay(DEFAULT_LAYER+1); //hide the curve displayed |
pierrebizouard | 7:9276134bb25e | 917 | lcd.SelectLayer(DEFAULT_LAYER); |
pierrebizouard | 7:9276134bb25e | 918 | |
pierrebizouard | 7:9276134bb25e | 919 | } |
pierrebizouard | 7:9276134bb25e | 920 | */ |
pierrebizouard | 7:9276134bb25e | 921 | |
pierrebizouard | 7:9276134bb25e | 922 | dest_loc = 1-swipe_dir; |
pierrebizouard | 7:9276134bb25e | 923 | if (dest_loc == 0) |
pierrebizouard | 7:9276134bb25e | 924 | { |
pierrebizouard | 7:9276134bb25e | 925 | swipe_layer = 1; |
pierrebizouard | 7:9276134bb25e | 926 | } else { |
pierrebizouard | 7:9276134bb25e | 927 | if (dest_loc == 2) |
pierrebizouard | 7:9276134bb25e | 928 | { |
pierrebizouard | 7:9276134bb25e | 929 | swipe_layer = 0; |
pierrebizouard | 7:9276134bb25e | 930 | dest_loc = 1; |
pierrebizouard | 7:9276134bb25e | 931 | } else { |
pierrebizouard | 7:9276134bb25e | 932 | start_swipe = false; |
pierrebizouard | 7:9276134bb25e | 933 | swipe_pos = 0; |
pierrebizouard | 7:9276134bb25e | 934 | swipe_dir = 0; |
pierrebizouard | 7:9276134bb25e | 935 | } |
pierrebizouard | 7:9276134bb25e | 936 | } |
pierrebizouard | 7:9276134bb25e | 937 | |
pierrebizouard | 7:9276134bb25e | 938 | swipe_layer_address = LCD_FRAME_BUFFER+(lcd.GetXSize()*lcd.GetYSize()*4)*swipe_layer; |
pierrebizouard | 7:9276134bb25e | 939 | |
pierrebizouard | 7:9276134bb25e | 940 | if (swipe_layer == DEFAULT_LAYER) { |
pierrebizouard | 7:9276134bb25e | 941 | if (selected_screen < 0) /* selected screen has overlay */ { |
pierrebizouard | 7:9276134bb25e | 942 | /* hides overlay */ |
pierrebizouard | 7:9276134bb25e | 943 | BSP_LCD_SetLayerVisible_NoReload(DEFAULT_LAYER+1, DISABLE); |
pierrebizouard | 7:9276134bb25e | 944 | /* update destination display */ |
pierrebizouard | 7:9276134bb25e | 945 | update_temperature_read_curve(DEFAULT_LAYER, selected_screen, false, true); |
pierrebizouard | 7:9276134bb25e | 946 | wait(1./LCD_REFRESH_RATE); |
pierrebizouard | 7:9276134bb25e | 947 | /* hides overlay */ |
pierrebizouard | 7:9276134bb25e | 948 | } else { |
pierrebizouard | 7:9276134bb25e | 949 | /* no overlay do nothing */ |
pierrebizouard | 7:9276134bb25e | 950 | } |
pierrebizouard | 7:9276134bb25e | 951 | } else { |
pierrebizouard | 7:9276134bb25e | 952 | /* copy visible layer to swipe layer */ |
pierrebizouard | 7:9276134bb25e | 953 | BSP_LCD_CopyLayer(DEFAULT_LAYER, swipe_layer, 0); //reload backup of layer 0 or save it |
pierrebizouard | 7:9276134bb25e | 954 | if (selected_screen < 0) /* selected screen has overlay */ { |
pierrebizouard | 7:9276134bb25e | 955 | update_temperature_read_curve(swipe_layer, selected_screen, false, true); |
pierrebizouard | 7:9276134bb25e | 956 | } |
pierrebizouard | 7:9276134bb25e | 957 | BSP_LCD_SetLayerVisible_NoReload(DEFAULT_LAYER, DISABLE); |
pierrebizouard | 7:9276134bb25e | 958 | BSP_LCD_SetLayerVisible_NoReload(swipe_layer, ENABLE); |
pierrebizouard | 7:9276134bb25e | 959 | wait(1./LCD_REFRESH_RATE); |
pierrebizouard | 7:9276134bb25e | 960 | } |
pierrebizouard | 7:9276134bb25e | 961 | LCD_Reload_Safe(); |
pierrebizouard | 7:9276134bb25e | 962 | |
pierrebizouard | 7:9276134bb25e | 963 | destination_screen = selected_screen + swipe_dir; |
pierrebizouard | 7:9276134bb25e | 964 | //prepare destination screen (destination screen will be 2) |
pierrebizouard | 7:9276134bb25e | 965 | //cannot be overwriten by previous command |
pierrebizouard | 7:9276134bb25e | 966 | |
pierrebizouard | 7:9276134bb25e | 967 | draw_screens(destination_screen, dest_loc); |
pierrebizouard | 7:9276134bb25e | 968 | /* |
pierrebizouard | 7:9276134bb25e | 969 | lcd.SelectLayer(swipe_layer); |
pierrebizouard | 7:9276134bb25e | 970 | sprintf((char*)text, "screen(%d)", selected_screen); |
pierrebizouard | 7:9276134bb25e | 971 | lcd.DisplayStringAt(0, LINE(0), (uint8_t *)&text, LEFT_MODE); |
pierrebizouard | 7:9276134bb25e | 972 | */ |
pierrebizouard | 7:9276134bb25e | 973 | } else { |
pierrebizouard | 7:9276134bb25e | 974 | BSP_LCD_SetLayerAddress(swipe_layer, swipe_layer_address-swipe_dir*lcd.GetXSize()*4*swipe_pos); |
pierrebizouard | 7:9276134bb25e | 975 | } |
pierrebizouard | 7:9276134bb25e | 976 | |
pierrebizouard | 7:9276134bb25e | 977 | wait(0.); |
pierrebizouard | 7:9276134bb25e | 978 | swipe_pos++; |
pierrebizouard | 7:9276134bb25e | 979 | } |
pierrebizouard | 7:9276134bb25e | 980 | |
pierrebizouard | 7:9276134bb25e | 981 | } |
pierrebizouard | 7:9276134bb25e | 982 | |
pierrebizouard | 7:9276134bb25e | 983 | if (t.read_ms() >= DELAY_ACQ and (not start_swipe)) { |
pierrebizouard | 7:9276134bb25e | 984 | //read temperature |
pierrebizouard | 7:9276134bb25e | 985 | last_read_temperature = read_temperature(); |
pierrebizouard | 7:9276134bb25e | 986 | |
pierrebizouard | 7:9276134bb25e | 987 | /* slow buffer */ |
pierrebizouard | 7:9276134bb25e | 988 | slow_temp_acc = slow_temp_acc + last_read_temperature; |
pierrebizouard | 7:9276134bb25e | 989 | if (accumulated_slow_temp == TEMPERATURE_SLOW_ACCUMULATE-1) |
pierrebizouard | 7:9276134bb25e | 990 | { |
pierrebizouard | 7:9276134bb25e | 991 | temperature_curve_slow[temperature_curve_slow_index]= slow_temp_acc/TEMPERATURE_SLOW_ACCUMULATE; |
pierrebizouard | 7:9276134bb25e | 992 | slow_temp_acc = 0.; |
pierrebizouard | 7:9276134bb25e | 993 | accumulated_slow_temp = 0; |
pierrebizouard | 7:9276134bb25e | 994 | if (temperature_curve_slow_count < MAX_TP_POINTS) |
pierrebizouard | 7:9276134bb25e | 995 | { |
pierrebizouard | 7:9276134bb25e | 996 | temperature_curve_slow_count++; |
pierrebizouard | 7:9276134bb25e | 997 | } |
pierrebizouard | 7:9276134bb25e | 998 | temperature_curve_slow_index = (temperature_curve_slow_index+1)%MAX_TP_POINTS; |
pierrebizouard | 7:9276134bb25e | 999 | } else { |
pierrebizouard | 7:9276134bb25e | 1000 | accumulated_slow_temp++; |
pierrebizouard | 7:9276134bb25e | 1001 | } |
pierrebizouard | 7:9276134bb25e | 1002 | |
pierrebizouard | 7:9276134bb25e | 1003 | temperature_curve_fast[temperature_curve_fast_index] = last_read_temperature; |
pierrebizouard | 7:9276134bb25e | 1004 | if (temperature_curve_fast_count < MAX_TP_POINTS) |
pierrebizouard | 7:9276134bb25e | 1005 | { |
pierrebizouard | 7:9276134bb25e | 1006 | temperature_curve_fast_count++; |
pierrebizouard | 7:9276134bb25e | 1007 | } |
pierrebizouard | 7:9276134bb25e | 1008 | temperature_curve_fast_index = (temperature_curve_fast_index+1)%MAX_TP_POINTS; |
pierrebizouard | 7:9276134bb25e | 1009 | |
pierrebizouard | 7:9276134bb25e | 1010 | if (selected_screen < 0) |
pierrebizouard | 7:9276134bb25e | 1011 | { |
pierrebizouard | 7:9276134bb25e | 1012 | /* diminish flicker */ |
pierrebizouard | 7:9276134bb25e | 1013 | bool updated = update_temperature_read_curve(DEFAULT_LAYER+2, selected_screen, true, false); |
pierrebizouard | 7:9276134bb25e | 1014 | if (updated) |
pierrebizouard | 7:9276134bb25e | 1015 | { |
pierrebizouard | 7:9276134bb25e | 1016 | BSP_LCD_CopyLayer(DEFAULT_LAYER+2, DEFAULT_LAYER+1, 0); |
pierrebizouard | 7:9276134bb25e | 1017 | //LCD_Reload_Safe(); |
pierrebizouard | 7:9276134bb25e | 1018 | BSP_LCD_Reload(LTDC_RELOAD_IMMEDIATE); |
pierrebizouard | 7:9276134bb25e | 1019 | |
pierrebizouard | 7:9276134bb25e | 1020 | } else { |
pierrebizouard | 7:9276134bb25e | 1021 | lcd.SelectLayer(DEFAULT_LAYER); |
pierrebizouard | 7:9276134bb25e | 1022 | } |
pierrebizouard | 7:9276134bb25e | 1023 | curve_update = (curve_update+1)%2; |
pierrebizouard | 7:9276134bb25e | 1024 | } else { |
pierrebizouard | 7:9276134bb25e | 1025 | if (selected_screen == 0) { |
pierrebizouard | 7:9276134bb25e | 1026 | update_temperature_read_text(); |
pierrebizouard | 7:9276134bb25e | 1027 | } |
pierrebizouard | 7:9276134bb25e | 1028 | } |
pierrebizouard | 7:9276134bb25e | 1029 | save_temperature_storage(); |
pierrebizouard | 7:9276134bb25e | 1030 | |
pierrebizouard | 7:9276134bb25e | 1031 | |
pierrebizouard | 7:9276134bb25e | 1032 | #ifdef DEBUG |
pierrebizouard | 7:9276134bb25e | 1033 | reader.open(sector_index); |
pierrebizouard | 7:9276134bb25e | 1034 | sprintf((char*)text, "SOF(%d.%p)", reader.get_data_size(), reader.get_physical_data_addr()); |
pierrebizouard | 7:9276134bb25e | 1035 | lcd.DisplayStringAt(0, LINE(TEMP_SET_LINE+6), (uint8_t *)&text, LEFT_MODE); |
pierrebizouard | 7:9276134bb25e | 1036 | reader.close(); |
pierrebizouard | 7:9276134bb25e | 1037 | #endif |
pierrebizouard | 7:9276134bb25e | 1038 | |
pierrebizouard | 6:7812b342d945 | 1039 | t.reset(); |
pierrebizouard | 7:9276134bb25e | 1040 | |
pierrebizouard | 6:7812b342d945 | 1041 | } |
pierrebizouard | 6:7812b342d945 | 1042 | //#endif |
pierrebizouard | 6:7812b342d945 | 1043 | |
pierrebizouard | 6:7812b342d945 | 1044 | |
bcostm | 0:91c6ab790bd7 | 1045 | } |
bcostm | 0:91c6ab790bd7 | 1046 | } |