From f211f569908e421929dcea5b284c3b75987a1862 Mon Sep 17 00:00:00 2001 From: Luca Date: Thu, 1 Jun 2017 14:27:33 +0200 Subject: [PATCH] Refactoring, higher temperature bar, correct EEPROM update - EEPROM autoboot/auto shutdown was set to auto shutdown when updating temperature - Indentation for definition.h altered - More constants - Better constant names - Individual temperature bar height - Starting bar at TEMP_COLD - Higher "cold" temperature --- Maiskolben_TFT/Maiskolben_TFT.ino | 29 ++++++----- Maiskolben_TFT/definitions.h | 81 ++++++++++++++++--------------- 2 files changed, 55 insertions(+), 55 deletions(-) diff --git a/Maiskolben_TFT/Maiskolben_TFT.ino b/Maiskolben_TFT/Maiskolben_TFT.ino index 13477f0..889d9f0 100644 --- a/Maiskolben_TFT/Maiskolben_TFT.ino +++ b/Maiskolben_TFT/Maiskolben_TFT.ino @@ -331,7 +331,7 @@ void updateEEPROM(void) { } EEPROM.update(8, set_t >> 8); EEPROM.update(9, set_t & 0xFF); - EEPROM.update(EEPROM_OPTIONS, 1); //Defaults to auto power down + EEPROM.update(EEPROM_OPTIONS, (bootheat << 1) | autopower); } int getTemperature(void) { @@ -348,9 +348,8 @@ int getTemperature(void) { } else { analogWrite(HEATER_PWM, pwm); //switch heater back to last value } - return round(adc*0.574503+43.5); //nasty resistors... //return round(adc < 210 ? (((float)adc) * 0.530805 + 38.9298) : (((float)adc) * 0.415375 + 64.6123)); //old conversion - //return round(((float) adc)*ADC_TO_TEMP_GAIN+ADC_TO_TEMP_OFFSET); //even older conversion + return round(((float) adc) * ADC_TO_TEMP_GAIN + ADC_TO_TEMP_OFFSET); } void measureVoltage(void) { @@ -461,8 +460,8 @@ void timer_sw_poll(void) { cnt_but_press++; if((cnt_but_press >= 100) || sw_changed) { setStandby(false); - if(sw_up && set_t < MAX_TEMP) set_t++; - else if (sw_down && set_t > MIN_TEMP) set_t--; + if(sw_up && set_t < TEMP_MAX) set_t++; + else if (sw_down && set_t > TEMP_MIN) set_t--; if(!sw_changed) cnt_but_press = 97; updateEEPROM(); } @@ -569,8 +568,8 @@ void display(void) { tft.setTextColor(ST7735_WHITE, ST7735_BLACK); tft.write(' '); tft.print(set_t); - tft.fillTriangle(149, 50, 159, 50, 154, 38, (set_t < MAX_TEMP) ? ST7735_WHITE : ST7735_GRAY); - tft.fillTriangle(149, 77, 159, 77, 154, 90, (set_t > MIN_TEMP) ? ST7735_WHITE : ST7735_GRAY); + tft.fillTriangle(149, 50, 159, 50, 154, 38, (set_t < TEMP_MAX) ? ST7735_WHITE : ST7735_GRAY); + tft.fillTriangle(149, 77, 159, 77, 154, 90, (set_t > TEMP_MIN) ? ST7735_WHITE : ST7735_GRAY); } } if (!off) { @@ -609,8 +608,8 @@ void display(void) { if (cur_t_old == 999) { tft.fillRect(44,76,72,16,ST7735_BLACK); } - tft.setTextColor(off ? temperature < 50 ? ST7735_CYAN : ST7735_RED : tft.Color565(min(10,abs(temperature-target_t))*25, 250 - min(10,max(0,(abs(temperature-target_t)-10)))*25, 0), ST7735_BLACK); - if (temperature < 60) { + tft.setTextColor(off ? temperature < TEMP_COLD ? ST7735_CYAN : ST7735_RED : tft.Color565(min(10,abs(temperature-target_t))*25, 250 - min(10,max(0,(abs(temperature-target_t)-10)))*25, 0), ST7735_BLACK); + if (temperature < TEMP_COLD) { tft.print("COLD"); } else { tft.write(' '); @@ -619,10 +618,10 @@ void display(void) { } } if (temperature < cur_t_old) - tft.drawFastHLine((int)(temperature/2.6), 0, 160-(int)(temperature/2.6), ST7735_BLACK); + tft.fillRect(max(0, (temperature - TEMP_COLD)/2.4), 0, 160-max(0, (temperature - TEMP_COLD)/2.4), BAR_HEIGHT, ST7735_BLACK); else if (cur_t != 999) { - for (int16_t i = 0; i < temperature/2.6; i++) { - tft.drawPixel(i, 0, tft.Color565(min(255, max(0, i*5)), min(255, max(0, 400-i*2.5)), 0)); + for (int16_t i = max(0, (cur_t_old - TEMP_COLD)/2.4); i < max(0, (temperature - TEMP_COLD)/2.4); i++) { + tft.drawFastVLine(i, 0, BAR_HEIGHT, tft.Color565(min(255, max(0, i*5)), min(255, max(0, 450-i*2.5)), 0)); } } cur_t_old = temperature; @@ -730,7 +729,7 @@ void compute(void) { } } else { if (stby_layoff || stby) { - target_t = STBY_TEMP; + target_t = TEMP_STBY; } else { target_t = set_t; } @@ -834,7 +833,7 @@ void loop(void) { if (Serial.available() >= 3) { t = serialReadTemp(); //Serial.println(t); - if (t <= MAX_TEMP && t >= MIN_TEMP) { + if (t <= TEMP_MAX && t >= TEMP_MIN) { set_t = t; updateEEPROM(); } @@ -846,7 +845,7 @@ void loop(void) { uint8_t slot = Serial.read()-'1'; if (slot < 3) { t = serialReadTemp(); - if (t <= MAX_TEMP && t >= MIN_TEMP) { + if (t <= TEMP_MAX && t >= TEMP_MIN) { stored[slot] = t; updateEEPROM(); } diff --git a/Maiskolben_TFT/definitions.h b/Maiskolben_TFT/definitions.h index 45d495e..783e74e 100644 --- a/Maiskolben_TFT/definitions.h +++ b/Maiskolben_TFT/definitions.h @@ -1,14 +1,16 @@ -#define VERSION "2.7" +#define VERSION "2.8" #define EE_VERSION 27 #define EEPROM_CHECK 42 -#define STBY_TEMP 150 +#define BAR_HEIGHT 4 //Should be no bigger than 5 /* * TIPS ARE SPECIFIED FOR 450 DEGREE MAX - * If read 1023 on Analog in, the tip is turned off + * If read 1023 on Analog in, the tip is turned off automatically */ -#define MAX_TEMP 450 -#define MIN_TEMP 100 +#define TEMP_MAX 450 +#define TEMP_MIN 100 +#define TEMP_STBY 150 +#define TEMP_COLD 70 #define SHUTOFF_ACTIVE #define BOOTHEAT_ACTIVE @@ -16,55 +18,54 @@ #define STANDBY_TIMEOUT 240 // seconds without any significant temperature drop, if exceeded it will standby #define OFF_TIMEOUT 900 // seconds in standby before turning off -#define TEMP_THRESHOLD 50 //threshold voltage, that must be exceeded in given time: +#define TEMP_THRESHOLD 50 //threshold voltage, that must be exceeded in given time: #define TEMP_UNDER_THRESHOLD 150 //*10ms -#define THRES_MAX_DECEED 2 //max times the threshold temperature may be undercut by the current temperature +#define THRES_MAX_DECEED 2 //max times the threshold temperature may be undercut by the current temperature //Temperature in degree to rise at least in given time -#define TEMP_MIN_RISE 10 +#define TEMP_MIN_RISE 10 //Time in that the temperature must rise by the set temperature -#define TEMP_RISE_TIME 1000 +#define TEMP_RISE_TIME 1000 //#define OLD_PWM -// RX 0 -// TX 1 -#define SW_STBY 2 -#define HEATER_PWM 3 -#define SW_DOWN 4 -#define HEAT_LED 5 -#define SW_UP 6 -#define SW_T3 7 -#define SW_T2 8 -#define SW_T1 9 -#define TFT_CS 10 -// MOSI 11 +// RX 0 +// TX 1 +#define SW_STBY 2 +#define HEATER_PWM 3 +#define SW_DOWN 4 +#define HEAT_LED 5 +#define SW_UP 6 +#define SW_T3 7 +#define SW_T2 8 +#define SW_T1 9 +#define TFT_CS 10 +// MOSI 11 #define TFT_BL 12 //use MISO PULLUP as switch -// SCK 13 -#define TEMP_SENSE A0 -#define STBY_NO A1 -#define BAT_C3 A2 -#define BAT_C2 A3 -#define BAT_C1 A4 -#define TFT_DC A5 +// SCK 13 +#define TEMP_SENSE A0 +#define STBY_NO A1 +#define BAT_C3 A2 +#define BAT_C2 A3 +#define BAT_C1 A4 +#define TFT_DC A5 #ifdef PIN_A7 -#define VIN A7 +#define VIN A7 #endif -#define kp 0.03 -#define ki 0.00001 -#define kd 0.0 +#define kp 0.03 +#define ki 0.00001 +#define kd 0.0 -#define TIME_COMPUTE_IN_MS 10 +#define TIME_COMPUTE_IN_MS 10 #define TIME_MEASURE_VOLTAGE_IN_MS 200 -#define TIME_SW_POLL_IN_MS 10 -#define DELAY_BEFORE_MEASURE 10 -#define DELAY_MAIN_LOOP 10 -#define PID_SAMPLE_TIME 10 +#define TIME_SW_POLL_IN_MS 10 +#define DELAY_BEFORE_MEASURE 10 +#define DELAY_MAIN_LOOP 10 +#define PID_SAMPLE_TIME 10 -#define ADC_TO_TEMP_GAIN 0.39 -#define ADC_TO_TEMP_OFFSET 23.9 -#define CTRL_GAIN 10 +#define ADC_TO_TEMP_GAIN 0.574503 +#define ADC_TO_TEMP_OFFSET 43.5 #define EEPROM_SET_T 8 #define EEPROM_VERSION 10