My custom thermostat based on: # NUCLEO-F334R8 # DS18B20 # RELAY module # LCD1602 shield
Dependencies: DS1820 TextLCD mbed
main.cpp@0:2ae1c92f5fba, 2016-01-17 (annotated)
- Committer:
- emcu
- Date:
- Sun Jan 17 03:26:10 2016 +0000
- Revision:
- 0:2ae1c92f5fba
My custom thermostat based on:; # NUCLEO-F334R8; # DS18B20; # RELAY module; # LCD1602 shield;
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
emcu | 0:2ae1c92f5fba | 1 | /** |
emcu | 0:2ae1c92f5fba | 2 | |
emcu | 0:2ae1c92f5fba | 3 | Temperature control based on: |
emcu | 0:2ae1c92f5fba | 4 | NUCLEO-F334R8 |
emcu | 0:2ae1c92f5fba | 5 | DS18B20 |
emcu | 0:2ae1c92f5fba | 6 | RELAY module |
emcu | 0:2ae1c92f5fba | 7 | LCD1602 shield |
emcu | 0:2ae1c92f5fba | 8 | |
emcu | 0:2ae1c92f5fba | 9 | By: www.emcu.it |
emcu | 0:2ae1c92f5fba | 10 | Date: Dec.2015 |
emcu | 0:2ae1c92f5fba | 11 | Version: 1.2 |
emcu | 0:2ae1c92f5fba | 12 | Name: F334andDS18B20andLCD1602andRELAYdlyCasaV12 |
emcu | 0:2ae1c92f5fba | 13 | NOTE: For more info see here: http://www.emcu.it/Mbed/mBed.html#My_mBed_tutorials |
emcu | 0:2ae1c92f5fba | 14 | |
emcu | 0:2ae1c92f5fba | 15 | THE SOFTWARE AND HARDWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, |
emcu | 0:2ae1c92f5fba | 16 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
emcu | 0:2ae1c92f5fba | 17 | FITNESS FOR A PARTICULAR PURPOSE AND NON INFRINGEMENT. IN NO EVENT SHALL THE AUTHORS |
emcu | 0:2ae1c92f5fba | 18 | OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, |
emcu | 0:2ae1c92f5fba | 19 | WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN |
emcu | 0:2ae1c92f5fba | 20 | CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. |
emcu | 0:2ae1c92f5fba | 21 | |
emcu | 0:2ae1c92f5fba | 22 | UART Configuration (It is necessary for see the results, we suggest to use TeraTerm on PC) |
emcu | 0:2ae1c92f5fba | 23 | Baud Rate: 9600 |
emcu | 0:2ae1c92f5fba | 24 | Data Bit: 8 |
emcu | 0:2ae1c92f5fba | 25 | Parity: NONE |
emcu | 0:2ae1c92f5fba | 26 | Stop Bit: 1 |
emcu | 0:2ae1c92f5fba | 27 | Flow Control: NONE |
emcu | 0:2ae1c92f5fba | 28 | |
emcu | 0:2ae1c92f5fba | 29 | This SW is ready to use on the NUCLEO-F334R8. |
emcu | 0:2ae1c92f5fba | 30 | Connect to the NUCLEO-F334R8 the DS18B20 sensor (A1, see the schematic below), the LCD1602 board and a RELAY board (A5). |
emcu | 0:2ae1c92f5fba | 31 | The temperature sampling time is 200 msec, you change this parameter in the TempSamplingTime. |
emcu | 0:2ae1c92f5fba | 32 | |
emcu | 0:2ae1c92f5fba | 33 | DS18B20 front view |
emcu | 0:2ae1c92f5fba | 34 | __________ |
emcu | 0:2ae1c92f5fba | 35 | | | |
emcu | 0:2ae1c92f5fba | 36 | | DS | |
emcu | 0:2ae1c92f5fba | 37 | | 18B20 | |
emcu | 0:2ae1c92f5fba | 38 | | | |
emcu | 0:2ae1c92f5fba | 39 | |__________| |
emcu | 0:2ae1c92f5fba | 40 | | | | |
emcu | 0:2ae1c92f5fba | 41 | 1 2 3 |
emcu | 0:2ae1c92f5fba | 42 | GND DQ VCC (5V) |
emcu | 0:2ae1c92f5fba | 43 | | | |______________ to VCC (5V on the LCD1602 or on the NUCLEO-F334R8) |
emcu | 0:2ae1c92f5fba | 44 | | | _|_ |
emcu | 0:2ae1c92f5fba | 45 | | | | | |
emcu | 0:2ae1c92f5fba | 46 | | | | | 4K7 |
emcu | 0:2ae1c92f5fba | 47 | | | | | |
emcu | 0:2ae1c92f5fba | 48 | | | -|- |
emcu | 0:2ae1c92f5fba | 49 | | |___|______________ to A1 (on the LCD1602 board or on the NUCLEO-F334R8) |
emcu | 0:2ae1c92f5fba | 50 | | |
emcu | 0:2ae1c92f5fba | 51 | | |
emcu | 0:2ae1c92f5fba | 52 | |______________________ to GND (on the LCD1602 board or on the NUCLEO-F334R8) |
emcu | 0:2ae1c92f5fba | 53 | |
emcu | 0:2ae1c92f5fba | 54 | This SW is just for only one DS18B20 + LCD1602 board |
emcu | 0:2ae1c92f5fba | 55 | |
emcu | 0:2ae1c92f5fba | 56 | */ |
emcu | 0:2ae1c92f5fba | 57 | |
emcu | 0:2ae1c92f5fba | 58 | |
emcu | 0:2ae1c92f5fba | 59 | // Below there is the Data Pin where is connected the: |
emcu | 0:2ae1c92f5fba | 60 | // pin.2 (DQ) of the DS18B20 ---> A1 |
emcu | 0:2ae1c92f5fba | 61 | #define DATA_PIN A1 |
emcu | 0:2ae1c92f5fba | 62 | |
emcu | 0:2ae1c92f5fba | 63 | #include "mbed.h" |
emcu | 0:2ae1c92f5fba | 64 | #include "DS1820.h" |
emcu | 0:2ae1c92f5fba | 65 | #include "TextLCD.h" |
emcu | 0:2ae1c92f5fba | 66 | |
emcu | 0:2ae1c92f5fba | 67 | // Define the LED |
emcu | 0:2ae1c92f5fba | 68 | DigitalOut myled(LED1); |
emcu | 0:2ae1c92f5fba | 69 | // Below there is the RELAY PIN that is ---> A5 |
emcu | 0:2ae1c92f5fba | 70 | DigitalOut RL1(A5); |
emcu | 0:2ae1c92f5fba | 71 | |
emcu | 0:2ae1c92f5fba | 72 | // Define the PC serial Port |
emcu | 0:2ae1c92f5fba | 73 | Serial pc(SERIAL_TX, SERIAL_RX); |
emcu | 0:2ae1c92f5fba | 74 | |
emcu | 0:2ae1c92f5fba | 75 | // Specify the pin of the NUCLEO-F334R8 where is connected |
emcu | 0:2ae1c92f5fba | 76 | // the pin.2 (DQ) of the DS18B20. |
emcu | 0:2ae1c92f5fba | 77 | DS1820 probe(DATA_PIN); |
emcu | 0:2ae1c92f5fba | 78 | |
emcu | 0:2ae1c92f5fba | 79 | // SetUp GPIO for drive the LCD |
emcu | 0:2ae1c92f5fba | 80 | // LCD (RS, E, D4, D5, D6, D7) |
emcu | 0:2ae1c92f5fba | 81 | TextLCD lcd(PA_9, PC_7, PB_5, PB_4, PB_10, PA_8); // LCD Shield for Arduino |
emcu | 0:2ae1c92f5fba | 82 | AnalogIn button(PA_0); // board button |
emcu | 0:2ae1c92f5fba | 83 | PwmOut backlight(PB_6); |
emcu | 0:2ae1c92f5fba | 84 | |
emcu | 0:2ae1c92f5fba | 85 | // COSTANTs |
emcu | 0:2ae1c92f5fba | 86 | #define ON 1 |
emcu | 0:2ae1c92f5fba | 87 | #define OFF 0 |
emcu | 0:2ae1c92f5fba | 88 | #define YES 1 |
emcu | 0:2ae1c92f5fba | 89 | #define NO 0 |
emcu | 0:2ae1c92f5fba | 90 | #define tStep 0.1 // Step minimo di Up e Down x le impostazioni dei valori |
emcu | 0:2ae1c92f5fba | 91 | #define tUp 1 |
emcu | 0:2ae1c92f5fba | 92 | #define tDown 2 |
emcu | 0:2ae1c92f5fba | 93 | #define tRigth 3 |
emcu | 0:2ae1c92f5fba | 94 | #define tLeft 4 |
emcu | 0:2ae1c92f5fba | 95 | #define tNone 5 |
emcu | 0:2ae1c92f5fba | 96 | #define NumConv 4 |
emcu | 0:2ae1c92f5fba | 97 | #define MaxError 30 |
emcu | 0:2ae1c92f5fba | 98 | #define TastoSU 15000 |
emcu | 0:2ae1c92f5fba | 99 | #define TastoGIU 30900 |
emcu | 0:2ae1c92f5fba | 100 | #define TastoDES DeltaTasti + 2 |
emcu | 0:2ae1c92f5fba | 101 | #define TastoSIN 48000 |
emcu | 0:2ae1c92f5fba | 102 | #define DeltaTasti 4000 |
emcu | 0:2ae1c92f5fba | 103 | #define TempSamplingTime 200 // 200 == 200 mS |
emcu | 0:2ae1c92f5fba | 104 | #define DelayTime 4 // It is used in congiunction to DelayLastLine |
emcu | 0:2ae1c92f5fba | 105 | #define MaxRelDly 50 // 10 == 10sec... 50 == 50 sec |
emcu | 0:2ae1c92f5fba | 106 | |
emcu | 0:2ae1c92f5fba | 107 | // VARIABLEs |
emcu | 0:2ae1c92f5fba | 108 | uint8_t n = 0; |
emcu | 0:2ae1c92f5fba | 109 | uint8_t FlashSeg = 0; |
emcu | 0:2ae1c92f5fba | 110 | uint8_t FlashLCDlastLine = 0; |
emcu | 0:2ae1c92f5fba | 111 | uint8_t DelayLastLine = 0; |
emcu | 0:2ae1c92f5fba | 112 | uint8_t rele = OFF; |
emcu | 0:2ae1c92f5fba | 113 | uint8_t TowerTemp = 0; |
emcu | 0:2ae1c92f5fba | 114 | uint8_t TlowerTemp = 0; |
emcu | 0:2ae1c92f5fba | 115 | float temperature = 0; |
emcu | 0:2ae1c92f5fba | 116 | float DeltaTemp = 0.5; |
emcu | 0:2ae1c92f5fba | 117 | float tempON = 21.00; |
emcu | 0:2ae1c92f5fba | 118 | float tempOFF = tempON + DeltaTemp; |
emcu | 0:2ae1c92f5fba | 119 | float temperaturePREVIOUS = 0; |
emcu | 0:2ae1c92f5fba | 120 | float temperatureMAX = 0; |
emcu | 0:2ae1c92f5fba | 121 | float temperatureMIN = 0; |
emcu | 0:2ae1c92f5fba | 122 | float MaxTempError = 0; |
emcu | 0:2ae1c92f5fba | 123 | unsigned long value = 0; |
emcu | 0:2ae1c92f5fba | 124 | uint8_t PowerON = YES; |
emcu | 0:2ae1c92f5fba | 125 | uint8_t LastButtonPressed = tNone; |
emcu | 0:2ae1c92f5fba | 126 | uint8_t DelayForOffOnRealy = 30; /* The OFF will be made if the temperature is exceeded by N seconds consecutively (see TowerTemp) |
emcu | 0:2ae1c92f5fba | 127 | The ON will be made if the temperature is less than N seconds consecutively (see TlowerTemp) |
emcu | 0:2ae1c92f5fba | 128 | N = 30 value is about 30sec |
emcu | 0:2ae1c92f5fba | 129 | */ |
emcu | 0:2ae1c92f5fba | 130 | |
emcu | 0:2ae1c92f5fba | 131 | // FUNCTIONs |
emcu | 0:2ae1c92f5fba | 132 | void CalcMed(void); |
emcu | 0:2ae1c92f5fba | 133 | void PrintTemperatures(void); |
emcu | 0:2ae1c92f5fba | 134 | uint8_t ReadButtonOnLCD1602(void); |
emcu | 0:2ae1c92f5fba | 135 | void SetUp(void); |
emcu | 0:2ae1c92f5fba | 136 | void ShowSetUp(void); |
emcu | 0:2ae1c92f5fba | 137 | void WaitingRightButton(void); |
emcu | 0:2ae1c92f5fba | 138 | |
emcu | 0:2ae1c92f5fba | 139 | |
emcu | 0:2ae1c92f5fba | 140 | int main() |
emcu | 0:2ae1c92f5fba | 141 | { |
emcu | 0:2ae1c92f5fba | 142 | // Configure USART speed |
emcu | 0:2ae1c92f5fba | 143 | pc.baud(9600); |
emcu | 0:2ae1c92f5fba | 144 | |
emcu | 0:2ae1c92f5fba | 145 | // SetUp the resolution of the DS18B20 to 12bit |
emcu | 0:2ae1c92f5fba | 146 | probe.setResolution(12); |
emcu | 0:2ae1c92f5fba | 147 | |
emcu | 0:2ae1c92f5fba | 148 | // StartUp Logo to the PC |
emcu | 0:2ae1c92f5fba | 149 | pc.printf("\r\n\r\nTemperature Control x Casa v.1.2 2015\n\rMade using:\n\r"); |
emcu | 0:2ae1c92f5fba | 150 | pc.printf("NUCLEO-F334R8 + DS18B20 (input on A1) + LCD1602 + RELAY (on A5).\n\r"); |
emcu | 0:2ae1c92f5fba | 151 | pc.printf("For more info look here:\n\r"); |
emcu | 0:2ae1c92f5fba | 152 | pc.printf(" http://www.emcu.it/NUCLEOevaBoards/mBed/QSG-Mbed-Library.pdf\n\r"); |
emcu | 0:2ae1c92f5fba | 153 | pc.printf("by: www.emcu.it\n\r\n\r"); |
emcu | 0:2ae1c92f5fba | 154 | |
emcu | 0:2ae1c92f5fba | 155 | // TurnOn the LCD backlight of the LCD1602 board |
emcu | 0:2ae1c92f5fba | 156 | backlight = ON; // ON: 1, OFF: 0 |
emcu | 0:2ae1c92f5fba | 157 | |
emcu | 0:2ae1c92f5fba | 158 | // StartUp Logo to the LCD1602 board |
emcu | 0:2ae1c92f5fba | 159 | lcd.cls(); |
emcu | 0:2ae1c92f5fba | 160 | lcd.locate(0,0); |
emcu | 0:2ae1c92f5fba | 161 | lcd.printf("By: www.emcu.it"); |
emcu | 0:2ae1c92f5fba | 162 | lcd.locate(0,1); |
emcu | 0:2ae1c92f5fba | 163 | lcd.printf("Ver1.2 2015 Casa"); |
emcu | 0:2ae1c92f5fba | 164 | |
emcu | 0:2ae1c92f5fba | 165 | // SetUp the temperatures after PowerOn |
emcu | 0:2ae1c92f5fba | 166 | probe.convertTemperature(true, DS1820::all_devices); //Start temperature conversion, wait until ready |
emcu | 0:2ae1c92f5fba | 167 | temperature = probe.temperature('c'); |
emcu | 0:2ae1c92f5fba | 168 | // Eliminate the wrong reading |
emcu | 0:2ae1c92f5fba | 169 | CalcMed(); |
emcu | 0:2ae1c92f5fba | 170 | temperaturePREVIOUS = temperature; |
emcu | 0:2ae1c92f5fba | 171 | temperatureMAX = temperature; |
emcu | 0:2ae1c92f5fba | 172 | temperatureMIN = 50.50; |
emcu | 0:2ae1c92f5fba | 173 | wait(1); |
emcu | 0:2ae1c92f5fba | 174 | |
emcu | 0:2ae1c92f5fba | 175 | while(1) |
emcu | 0:2ae1c92f5fba | 176 | { |
emcu | 0:2ae1c92f5fba | 177 | // READ BUTTON on LCD board +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
emcu | 0:2ae1c92f5fba | 178 | if (ReadButtonOnLCD1602() == tUp) |
emcu | 0:2ae1c92f5fba | 179 | { |
emcu | 0:2ae1c92f5fba | 180 | backlight = ON; |
emcu | 0:2ae1c92f5fba | 181 | PowerON = NO; |
emcu | 0:2ae1c92f5fba | 182 | lcd.locate(0,1); |
emcu | 0:2ae1c92f5fba | 183 | lcd.printf("Please wait....."); |
emcu | 0:2ae1c92f5fba | 184 | FlashLCDlastLine = 0; |
emcu | 0:2ae1c92f5fba | 185 | } |
emcu | 0:2ae1c92f5fba | 186 | else if (ReadButtonOnLCD1602() == tDown) |
emcu | 0:2ae1c92f5fba | 187 | { |
emcu | 0:2ae1c92f5fba | 188 | backlight = OFF; |
emcu | 0:2ae1c92f5fba | 189 | PowerON = NO; |
emcu | 0:2ae1c92f5fba | 190 | lcd.locate(0,1); |
emcu | 0:2ae1c92f5fba | 191 | lcd.printf("Please wait....."); |
emcu | 0:2ae1c92f5fba | 192 | FlashLCDlastLine = 0; |
emcu | 0:2ae1c92f5fba | 193 | } |
emcu | 0:2ae1c92f5fba | 194 | else if (ReadButtonOnLCD1602() == tRigth) |
emcu | 0:2ae1c92f5fba | 195 | ShowSetUp(); |
emcu | 0:2ae1c92f5fba | 196 | else if (ReadButtonOnLCD1602() == tLeft) |
emcu | 0:2ae1c92f5fba | 197 | SetUp(); |
emcu | 0:2ae1c92f5fba | 198 | else; |
emcu | 0:2ae1c92f5fba | 199 | // END READ BUTTON on LCD board +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
emcu | 0:2ae1c92f5fba | 200 | |
emcu | 0:2ae1c92f5fba | 201 | // READ and DISPLAY the TEMPERATURE and control RELAY +++++++++++++++++++++++++++++++++++++++++++++++ |
emcu | 0:2ae1c92f5fba | 202 | probe.convertTemperature(true, DS1820::all_devices); //Start temperature conversion, wait until ready |
emcu | 0:2ae1c92f5fba | 203 | temperature = probe.temperature('c'); |
emcu | 0:2ae1c92f5fba | 204 | wait_ms(TempSamplingTime); |
emcu | 0:2ae1c92f5fba | 205 | // Eliminate the wrong reading |
emcu | 0:2ae1c92f5fba | 206 | CalcMed(); |
emcu | 0:2ae1c92f5fba | 207 | |
emcu | 0:2ae1c92f5fba | 208 | // ON/OFF Relè ++++++++++++++++++++++++++++++++++++++++++++ |
emcu | 0:2ae1c92f5fba | 209 | if (temperature <= tempON) // ON Relè |
emcu | 0:2ae1c92f5fba | 210 | { |
emcu | 0:2ae1c92f5fba | 211 | if (rele == OFF) |
emcu | 0:2ae1c92f5fba | 212 | TlowerTemp ++; |
emcu | 0:2ae1c92f5fba | 213 | if (TlowerTemp >= DelayForOffOnRealy) |
emcu | 0:2ae1c92f5fba | 214 | { |
emcu | 0:2ae1c92f5fba | 215 | rele = ON; |
emcu | 0:2ae1c92f5fba | 216 | RL1 = 1; |
emcu | 0:2ae1c92f5fba | 217 | TowerTemp = 0; |
emcu | 0:2ae1c92f5fba | 218 | TlowerTemp = 0; |
emcu | 0:2ae1c92f5fba | 219 | } |
emcu | 0:2ae1c92f5fba | 220 | } |
emcu | 0:2ae1c92f5fba | 221 | else if (temperature >= tempOFF) // OFF Relè |
emcu | 0:2ae1c92f5fba | 222 | { |
emcu | 0:2ae1c92f5fba | 223 | if (rele == ON) |
emcu | 0:2ae1c92f5fba | 224 | TowerTemp ++; |
emcu | 0:2ae1c92f5fba | 225 | if (TowerTemp >= DelayForOffOnRealy) |
emcu | 0:2ae1c92f5fba | 226 | { |
emcu | 0:2ae1c92f5fba | 227 | rele = OFF; |
emcu | 0:2ae1c92f5fba | 228 | RL1 = 0; |
emcu | 0:2ae1c92f5fba | 229 | TowerTemp = 0; |
emcu | 0:2ae1c92f5fba | 230 | TlowerTemp = 0; |
emcu | 0:2ae1c92f5fba | 231 | } |
emcu | 0:2ae1c92f5fba | 232 | } |
emcu | 0:2ae1c92f5fba | 233 | else; |
emcu | 0:2ae1c92f5fba | 234 | // END ON/OFF Relè ++++++++++++++++++++++++++++++++++++++++ |
emcu | 0:2ae1c92f5fba | 235 | |
emcu | 0:2ae1c92f5fba | 236 | // Display status via Virtual COM |
emcu | 0:2ae1c92f5fba | 237 | PrintTemperatures(); |
emcu | 0:2ae1c92f5fba | 238 | |
emcu | 0:2ae1c92f5fba | 239 | // Display Status on the LCD1602 board |
emcu | 0:2ae1c92f5fba | 240 | // lcd.cls(); |
emcu | 0:2ae1c92f5fba | 241 | lcd.locate(0,0); |
emcu | 0:2ae1c92f5fba | 242 | if (rele == ON) |
emcu | 0:2ae1c92f5fba | 243 | lcd.printf("T %2.3f RELEon ", temperature); // probe.temperature('c')); |
emcu | 0:2ae1c92f5fba | 244 | if (rele == OFF) |
emcu | 0:2ae1c92f5fba | 245 | lcd.printf("T %2.3f RELEoff", temperature); // probe.temperature('c')); |
emcu | 0:2ae1c92f5fba | 246 | |
emcu | 0:2ae1c92f5fba | 247 | // END READ and DISPLAY the TEMPERATURE and control RELAY +++++++++++++++++++++++++++++++++++++++++++ |
emcu | 0:2ae1c92f5fba | 248 | |
emcu | 0:2ae1c92f5fba | 249 | |
emcu | 0:2ae1c92f5fba | 250 | // START Flashing * on the LCD ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
emcu | 0:2ae1c92f5fba | 251 | FlashSeg++; |
emcu | 0:2ae1c92f5fba | 252 | if (FlashSeg == 1) |
emcu | 0:2ae1c92f5fba | 253 | { |
emcu | 0:2ae1c92f5fba | 254 | lcd.locate(8,0); |
emcu | 0:2ae1c92f5fba | 255 | lcd.printf(" "); |
emcu | 0:2ae1c92f5fba | 256 | } |
emcu | 0:2ae1c92f5fba | 257 | if (FlashSeg == 2) |
emcu | 0:2ae1c92f5fba | 258 | { |
emcu | 0:2ae1c92f5fba | 259 | lcd.locate(8,0); |
emcu | 0:2ae1c92f5fba | 260 | lcd.printf("*"); |
emcu | 0:2ae1c92f5fba | 261 | FlashSeg = 0; |
emcu | 0:2ae1c92f5fba | 262 | } |
emcu | 0:2ae1c92f5fba | 263 | // END START Flashing * on the LCD ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
emcu | 0:2ae1c92f5fba | 264 | |
emcu | 0:2ae1c92f5fba | 265 | // LAST line on the LCD +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
emcu | 0:2ae1c92f5fba | 266 | if (PowerON == YES) // If failed 220Vac, is shown on the LCD |
emcu | 0:2ae1c92f5fba | 267 | { |
emcu | 0:2ae1c92f5fba | 268 | FlashLCDlastLine++; |
emcu | 0:2ae1c92f5fba | 269 | if (FlashLCDlastLine == 1) |
emcu | 0:2ae1c92f5fba | 270 | { |
emcu | 0:2ae1c92f5fba | 271 | backlight = ON; |
emcu | 0:2ae1c92f5fba | 272 | lcd.locate(0,1); |
emcu | 0:2ae1c92f5fba | 273 | lcd.printf("Failed 220Vac "); |
emcu | 0:2ae1c92f5fba | 274 | pc.printf("\n\rFailed 220Vac\n\r"); |
emcu | 0:2ae1c92f5fba | 275 | } |
emcu | 0:2ae1c92f5fba | 276 | if (FlashLCDlastLine == 2) |
emcu | 0:2ae1c92f5fba | 277 | { |
emcu | 0:2ae1c92f5fba | 278 | backlight = OFF; |
emcu | 0:2ae1c92f5fba | 279 | FlashLCDlastLine = 0; |
emcu | 0:2ae1c92f5fba | 280 | lcd.locate(0,1); |
emcu | 0:2ae1c92f5fba | 281 | lcd.printf("Failed 220Vac "); |
emcu | 0:2ae1c92f5fba | 282 | pc.printf("\n\rFailed 220Vac\n\r"); |
emcu | 0:2ae1c92f5fba | 283 | } |
emcu | 0:2ae1c92f5fba | 284 | } |
emcu | 0:2ae1c92f5fba | 285 | else // Show the configurations: Max and Min temperature, Relay ON/OFF temperature and Delay before RELAY goes ON or OFF |
emcu | 0:2ae1c92f5fba | 286 | { |
emcu | 0:2ae1c92f5fba | 287 | DelayLastLine++; |
emcu | 0:2ae1c92f5fba | 288 | if (DelayLastLine == DelayTime) // Show Tmax and Tmin |
emcu | 0:2ae1c92f5fba | 289 | { |
emcu | 0:2ae1c92f5fba | 290 | lcd.locate(0,1); |
emcu | 0:2ae1c92f5fba | 291 | lcd.printf("mx%2.3fmi%2.3f", temperatureMAX, temperatureMIN); |
emcu | 0:2ae1c92f5fba | 292 | } |
emcu | 0:2ae1c92f5fba | 293 | if (DelayLastLine == (DelayTime + DelayTime)) // Show Relay Tmin (tempON) e Tmax (tempOFF) |
emcu | 0:2ae1c92f5fba | 294 | { |
emcu | 0:2ae1c92f5fba | 295 | // DelayLastLine = 0; |
emcu | 0:2ae1c92f5fba | 296 | lcd.locate(0,1); |
emcu | 0:2ae1c92f5fba | 297 | lcd.printf("Rm%2.2f RM%2.2f ", tempON, tempOFF); |
emcu | 0:2ae1c92f5fba | 298 | } |
emcu | 0:2ae1c92f5fba | 299 | if (DelayLastLine == (DelayTime + DelayTime + DelayTime)) // Show DelayForOffOnRealy |
emcu | 0:2ae1c92f5fba | 300 | { |
emcu | 0:2ae1c92f5fba | 301 | DelayLastLine = 0; |
emcu | 0:2ae1c92f5fba | 302 | lcd.locate(0,1); |
emcu | 0:2ae1c92f5fba | 303 | lcd.printf(" "); |
emcu | 0:2ae1c92f5fba | 304 | lcd.locate(0,1); |
emcu | 0:2ae1c92f5fba | 305 | lcd.printf("DelayOnOff=%dsec", DelayForOffOnRealy); // ((DelayForOffOnRealy * TempSamplingTime)/1000)); |
emcu | 0:2ae1c92f5fba | 306 | } |
emcu | 0:2ae1c92f5fba | 307 | } |
emcu | 0:2ae1c92f5fba | 308 | // END LAST line on the LCD +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
emcu | 0:2ae1c92f5fba | 309 | } |
emcu | 0:2ae1c92f5fba | 310 | } |
emcu | 0:2ae1c92f5fba | 311 | |
emcu | 0:2ae1c92f5fba | 312 | |
emcu | 0:2ae1c92f5fba | 313 | /* |
emcu | 0:2ae1c92f5fba | 314 | **** ShowSetUp |
emcu | 0:2ae1c92f5fba | 315 | This function use the global variable: |
emcu | 0:2ae1c92f5fba | 316 | tempON |
emcu | 0:2ae1c92f5fba | 317 | tempOFF |
emcu | 0:2ae1c92f5fba | 318 | */ |
emcu | 0:2ae1c92f5fba | 319 | void ShowSetUp(void) |
emcu | 0:2ae1c92f5fba | 320 | { |
emcu | 0:2ae1c92f5fba | 321 | PowerON = NO; |
emcu | 0:2ae1c92f5fba | 322 | FlashLCDlastLine = 0; |
emcu | 0:2ae1c92f5fba | 323 | |
emcu | 0:2ae1c92f5fba | 324 | lcd.cls(); |
emcu | 0:2ae1c92f5fba | 325 | lcd.locate(0,0); |
emcu | 0:2ae1c92f5fba | 326 | lcd.printf(" www.emcu.it "); |
emcu | 0:2ae1c92f5fba | 327 | WaitingRightButton(); |
emcu | 0:2ae1c92f5fba | 328 | lcd.locate(0,1); |
emcu | 0:2ae1c92f5fba | 329 | lcd.printf("UP DOWN or LEFT "); |
emcu | 0:2ae1c92f5fba | 330 | |
emcu | 0:2ae1c92f5fba | 331 | // Awaiting the pressure of Left Button to finish this part |
emcu | 0:2ae1c92f5fba | 332 | while (ReadButtonOnLCD1602() != tLeft) |
emcu | 0:2ae1c92f5fba | 333 | { |
emcu | 0:2ae1c92f5fba | 334 | // Increase value |
emcu | 0:2ae1c92f5fba | 335 | if (ReadButtonOnLCD1602() == tUp) |
emcu | 0:2ae1c92f5fba | 336 | { |
emcu | 0:2ae1c92f5fba | 337 | rele = ON; |
emcu | 0:2ae1c92f5fba | 338 | RL1 = 1; |
emcu | 0:2ae1c92f5fba | 339 | // Awaiting the release of the tUp Button |
emcu | 0:2ae1c92f5fba | 340 | while (ReadButtonOnLCD1602() == tUp); |
emcu | 0:2ae1c92f5fba | 341 | } |
emcu | 0:2ae1c92f5fba | 342 | // Decrease value |
emcu | 0:2ae1c92f5fba | 343 | if (ReadButtonOnLCD1602() == tDown) |
emcu | 0:2ae1c92f5fba | 344 | { |
emcu | 0:2ae1c92f5fba | 345 | rele = OFF; |
emcu | 0:2ae1c92f5fba | 346 | RL1 = 0; |
emcu | 0:2ae1c92f5fba | 347 | // Awaiting the release of the tDown Button |
emcu | 0:2ae1c92f5fba | 348 | while (ReadButtonOnLCD1602() == tDown); |
emcu | 0:2ae1c92f5fba | 349 | } |
emcu | 0:2ae1c92f5fba | 350 | lcd.locate(0,0); |
emcu | 0:2ae1c92f5fba | 351 | if (rele == ON) |
emcu | 0:2ae1c92f5fba | 352 | lcd.printf("Rele is ON "); |
emcu | 0:2ae1c92f5fba | 353 | else |
emcu | 0:2ae1c92f5fba | 354 | lcd.printf("Rele is OFF "); |
emcu | 0:2ae1c92f5fba | 355 | } |
emcu | 0:2ae1c92f5fba | 356 | // Awaiting the release of the tLeft Button |
emcu | 0:2ae1c92f5fba | 357 | lcd.locate(0,1); |
emcu | 0:2ae1c92f5fba | 358 | lcd.printf("Release LEFT but"); |
emcu | 0:2ae1c92f5fba | 359 | while (ReadButtonOnLCD1602() == tLeft); |
emcu | 0:2ae1c92f5fba | 360 | |
emcu | 0:2ae1c92f5fba | 361 | lcd.cls(); |
emcu | 0:2ae1c92f5fba | 362 | lcd.locate(0,0); |
emcu | 0:2ae1c92f5fba | 363 | lcd.printf("Please wait....."); |
emcu | 0:2ae1c92f5fba | 364 | } |
emcu | 0:2ae1c92f5fba | 365 | |
emcu | 0:2ae1c92f5fba | 366 | |
emcu | 0:2ae1c92f5fba | 367 | /* |
emcu | 0:2ae1c92f5fba | 368 | **** WaitingRightButton |
emcu | 0:2ae1c92f5fba | 369 | This function waiting the Release and Pressure of the Rirght Button |
emcu | 0:2ae1c92f5fba | 370 | */ |
emcu | 0:2ae1c92f5fba | 371 | void WaitingRightButton(void) |
emcu | 0:2ae1c92f5fba | 372 | { |
emcu | 0:2ae1c92f5fba | 373 | // Awaiting the release of the Right Button |
emcu | 0:2ae1c92f5fba | 374 | lcd.locate(0,1); |
emcu | 0:2ae1c92f5fba | 375 | lcd.printf("Release RIGHT bu"); |
emcu | 0:2ae1c92f5fba | 376 | while (ReadButtonOnLCD1602() == tRigth); |
emcu | 0:2ae1c92f5fba | 377 | wait_ms(100); |
emcu | 0:2ae1c92f5fba | 378 | // Awaiting the pressure of the Rigth Button |
emcu | 0:2ae1c92f5fba | 379 | lcd.locate(0,1); |
emcu | 0:2ae1c92f5fba | 380 | lcd.printf("Press RIGTH but."); |
emcu | 0:2ae1c92f5fba | 381 | while (ReadButtonOnLCD1602() != tRigth); |
emcu | 0:2ae1c92f5fba | 382 | lcd.locate(0,1); |
emcu | 0:2ae1c92f5fba | 383 | lcd.printf(" "); |
emcu | 0:2ae1c92f5fba | 384 | } |
emcu | 0:2ae1c92f5fba | 385 | |
emcu | 0:2ae1c92f5fba | 386 | |
emcu | 0:2ae1c92f5fba | 387 | /* |
emcu | 0:2ae1c92f5fba | 388 | **** SetUp |
emcu | 0:2ae1c92f5fba | 389 | This function use the global variable: |
emcu | 0:2ae1c92f5fba | 390 | tempON |
emcu | 0:2ae1c92f5fba | 391 | tempOFF |
emcu | 0:2ae1c92f5fba | 392 | This function use this definitions: |
emcu | 0:2ae1c92f5fba | 393 | tUp |
emcu | 0:2ae1c92f5fba | 394 | tDown |
emcu | 0:2ae1c92f5fba | 395 | tRigth |
emcu | 0:2ae1c92f5fba | 396 | tLeft |
emcu | 0:2ae1c92f5fba | 397 | */ |
emcu | 0:2ae1c92f5fba | 398 | void SetUp(void) |
emcu | 0:2ae1c92f5fba | 399 | { |
emcu | 0:2ae1c92f5fba | 400 | PowerON = NO; |
emcu | 0:2ae1c92f5fba | 401 | FlashLCDlastLine = 0; |
emcu | 0:2ae1c92f5fba | 402 | lcd.locate(0,0); |
emcu | 0:2ae1c92f5fba | 403 | lcd.printf("Please wait....."); |
emcu | 0:2ae1c92f5fba | 404 | |
emcu | 0:2ae1c92f5fba | 405 | // TurnOn the LCD backlight of the LCD1602 board |
emcu | 0:2ae1c92f5fba | 406 | backlight = ON; // ON: 1, OFF: 0 |
emcu | 0:2ae1c92f5fba | 407 | |
emcu | 0:2ae1c92f5fba | 408 | // Show the SetUp related to: |
emcu | 0:2ae1c92f5fba | 409 | // TempMin (tempON) & TempMax (tempOFF) |
emcu | 0:2ae1c92f5fba | 410 | lcd.cls(); |
emcu | 0:2ae1c92f5fba | 411 | lcd.locate(0,0); |
emcu | 0:2ae1c92f5fba | 412 | lcd.printf("Rm%2.2f RM%2.2f ", tempON, tempOFF); |
emcu | 0:2ae1c92f5fba | 413 | |
emcu | 0:2ae1c92f5fba | 414 | // Awaiting the release of the Left Button |
emcu | 0:2ae1c92f5fba | 415 | lcd.locate(0,1); |
emcu | 0:2ae1c92f5fba | 416 | lcd.printf("Release LEFT but"); |
emcu | 0:2ae1c92f5fba | 417 | while (ReadButtonOnLCD1602() == tLeft); |
emcu | 0:2ae1c92f5fba | 418 | wait_ms(100); |
emcu | 0:2ae1c92f5fba | 419 | // Awaiting the pressure of the Left Button |
emcu | 0:2ae1c92f5fba | 420 | lcd.locate(0,1); |
emcu | 0:2ae1c92f5fba | 421 | lcd.printf("Press LEFT butt."); |
emcu | 0:2ae1c92f5fba | 422 | // Awaiting the release of the Left Button |
emcu | 0:2ae1c92f5fba | 423 | while (ReadButtonOnLCD1602() != tLeft); |
emcu | 0:2ae1c92f5fba | 424 | |
emcu | 0:2ae1c92f5fba | 425 | // Menù for SetUp the TempMin (tempON) |
emcu | 0:2ae1c92f5fba | 426 | lcd.cls(); |
emcu | 0:2ae1c92f5fba | 427 | lcd.locate(0,0); |
emcu | 0:2ae1c92f5fba | 428 | lcd.printf("RTempMin %2.2f", tempON); |
emcu | 0:2ae1c92f5fba | 429 | lcd.locate(0,1); |
emcu | 0:2ae1c92f5fba | 430 | lcd.printf("UP DOWN RIGHT"); |
emcu | 0:2ae1c92f5fba | 431 | // Awaiting the pressure of Right Button to finish this part |
emcu | 0:2ae1c92f5fba | 432 | while (ReadButtonOnLCD1602() != tRigth) |
emcu | 0:2ae1c92f5fba | 433 | { |
emcu | 0:2ae1c92f5fba | 434 | // Increase value |
emcu | 0:2ae1c92f5fba | 435 | if (ReadButtonOnLCD1602() == tUp) |
emcu | 0:2ae1c92f5fba | 436 | { |
emcu | 0:2ae1c92f5fba | 437 | tempON = tempON + float(tStep); |
emcu | 0:2ae1c92f5fba | 438 | // Awaiting the release of the tUp Button |
emcu | 0:2ae1c92f5fba | 439 | while (ReadButtonOnLCD1602() == tUp); |
emcu | 0:2ae1c92f5fba | 440 | } |
emcu | 0:2ae1c92f5fba | 441 | // Decrease value |
emcu | 0:2ae1c92f5fba | 442 | if (ReadButtonOnLCD1602() == tDown) |
emcu | 0:2ae1c92f5fba | 443 | { |
emcu | 0:2ae1c92f5fba | 444 | tempON = tempON - float(tStep); |
emcu | 0:2ae1c92f5fba | 445 | // Awaiting the release of the tDown Button |
emcu | 0:2ae1c92f5fba | 446 | while (ReadButtonOnLCD1602() == tDown); |
emcu | 0:2ae1c92f5fba | 447 | } |
emcu | 0:2ae1c92f5fba | 448 | lcd.locate(0,0); |
emcu | 0:2ae1c92f5fba | 449 | lcd.printf("RTempMin %2.2f", tempON); |
emcu | 0:2ae1c92f5fba | 450 | } |
emcu | 0:2ae1c92f5fba | 451 | lcd.locate(0,1); |
emcu | 0:2ae1c92f5fba | 452 | lcd.printf("Release RIGHT"); |
emcu | 0:2ae1c92f5fba | 453 | // Awaiting the release of the tRight Button |
emcu | 0:2ae1c92f5fba | 454 | while (ReadButtonOnLCD1602() == tRigth); |
emcu | 0:2ae1c92f5fba | 455 | wait_ms(100); |
emcu | 0:2ae1c92f5fba | 456 | |
emcu | 0:2ae1c92f5fba | 457 | // Menù for SetUp the TempMax (tempOFF) |
emcu | 0:2ae1c92f5fba | 458 | if (tempOFF <= tempON) |
emcu | 0:2ae1c92f5fba | 459 | tempOFF = tempON + float(tStep) + float(tStep); |
emcu | 0:2ae1c92f5fba | 460 | lcd.cls(); |
emcu | 0:2ae1c92f5fba | 461 | lcd.locate(0,0); |
emcu | 0:2ae1c92f5fba | 462 | lcd.printf("RTempMax %2.2f", tempOFF); |
emcu | 0:2ae1c92f5fba | 463 | lcd.locate(0,1); |
emcu | 0:2ae1c92f5fba | 464 | lcd.printf("UP DOWN LEFT"); |
emcu | 0:2ae1c92f5fba | 465 | // Awaiting the pressure of Left Button to finish this part |
emcu | 0:2ae1c92f5fba | 466 | while (ReadButtonOnLCD1602() != tLeft) |
emcu | 0:2ae1c92f5fba | 467 | { |
emcu | 0:2ae1c92f5fba | 468 | // Increase value |
emcu | 0:2ae1c92f5fba | 469 | if (ReadButtonOnLCD1602() == tUp) |
emcu | 0:2ae1c92f5fba | 470 | { |
emcu | 0:2ae1c92f5fba | 471 | tempOFF = tempOFF + float(tStep); |
emcu | 0:2ae1c92f5fba | 472 | // Awaiting the release of the tUp Button |
emcu | 0:2ae1c92f5fba | 473 | while (ReadButtonOnLCD1602() == tUp); |
emcu | 0:2ae1c92f5fba | 474 | } |
emcu | 0:2ae1c92f5fba | 475 | // Decrease value |
emcu | 0:2ae1c92f5fba | 476 | if (ReadButtonOnLCD1602() == tDown) |
emcu | 0:2ae1c92f5fba | 477 | { |
emcu | 0:2ae1c92f5fba | 478 | tempOFF = tempOFF - float(tStep); |
emcu | 0:2ae1c92f5fba | 479 | // Awaiting the release of the tDown Button |
emcu | 0:2ae1c92f5fba | 480 | while (ReadButtonOnLCD1602() == tDown); |
emcu | 0:2ae1c92f5fba | 481 | // Test tempOFF that must be superior to tempON + 2tStep |
emcu | 0:2ae1c92f5fba | 482 | if (tempOFF <= tempON + (float(tStep) + float(tStep))) |
emcu | 0:2ae1c92f5fba | 483 | { |
emcu | 0:2ae1c92f5fba | 484 | tempOFF = tempON + float(tStep) + float(tStep); |
emcu | 0:2ae1c92f5fba | 485 | lcd.locate(0,0); |
emcu | 0:2ae1c92f5fba | 486 | lcd.printf("TempMax>TempMin"); |
emcu | 0:2ae1c92f5fba | 487 | wait(2); |
emcu | 0:2ae1c92f5fba | 488 | } |
emcu | 0:2ae1c92f5fba | 489 | } |
emcu | 0:2ae1c92f5fba | 490 | lcd.locate(0,0); |
emcu | 0:2ae1c92f5fba | 491 | lcd.printf("RTempMax %2.2f ", tempOFF); |
emcu | 0:2ae1c92f5fba | 492 | } |
emcu | 0:2ae1c92f5fba | 493 | // Awaiting the release of the tLeft Button |
emcu | 0:2ae1c92f5fba | 494 | lcd.locate(0,1); |
emcu | 0:2ae1c92f5fba | 495 | lcd.printf("Release LEFT but"); |
emcu | 0:2ae1c92f5fba | 496 | while (ReadButtonOnLCD1602() == tLeft); |
emcu | 0:2ae1c92f5fba | 497 | |
emcu | 0:2ae1c92f5fba | 498 | // Menù for SetUp the Delay before to accept the On/Off of the relay (DelayForOffOnRealy) |
emcu | 0:2ae1c92f5fba | 499 | lcd.cls(); |
emcu | 0:2ae1c92f5fba | 500 | lcd.locate(0,0); |
emcu | 0:2ae1c92f5fba | 501 | lcd.printf("DelayOnOff=%dsec", DelayForOffOnRealy); // ((DelayForOffOnRealy * TempSamplingTime)/1000)); |
emcu | 0:2ae1c92f5fba | 502 | lcd.locate(0,1); |
emcu | 0:2ae1c92f5fba | 503 | lcd.printf("UP DOWN RIGHT"); |
emcu | 0:2ae1c92f5fba | 504 | // Awaiting the pressure of Right Button to finish this part |
emcu | 0:2ae1c92f5fba | 505 | while (ReadButtonOnLCD1602() != tRigth) |
emcu | 0:2ae1c92f5fba | 506 | { |
emcu | 0:2ae1c92f5fba | 507 | // Increase value |
emcu | 0:2ae1c92f5fba | 508 | if (ReadButtonOnLCD1602() == tUp) |
emcu | 0:2ae1c92f5fba | 509 | { |
emcu | 0:2ae1c92f5fba | 510 | DelayForOffOnRealy = DelayForOffOnRealy + 10; |
emcu | 0:2ae1c92f5fba | 511 | // Awaiting the release of the tUp Button |
emcu | 0:2ae1c92f5fba | 512 | while (ReadButtonOnLCD1602() == tUp); |
emcu | 0:2ae1c92f5fba | 513 | if (DelayForOffOnRealy >= MaxRelDly) |
emcu | 0:2ae1c92f5fba | 514 | DelayForOffOnRealy = MaxRelDly; |
emcu | 0:2ae1c92f5fba | 515 | } |
emcu | 0:2ae1c92f5fba | 516 | // Decrease value |
emcu | 0:2ae1c92f5fba | 517 | if (ReadButtonOnLCD1602() == tDown) |
emcu | 0:2ae1c92f5fba | 518 | { |
emcu | 0:2ae1c92f5fba | 519 | DelayForOffOnRealy = DelayForOffOnRealy - 10; |
emcu | 0:2ae1c92f5fba | 520 | // Awaiting the release of the tDown Button |
emcu | 0:2ae1c92f5fba | 521 | while (ReadButtonOnLCD1602() == tDown); |
emcu | 0:2ae1c92f5fba | 522 | if (DelayForOffOnRealy <= 10) |
emcu | 0:2ae1c92f5fba | 523 | DelayForOffOnRealy = 10; |
emcu | 0:2ae1c92f5fba | 524 | } |
emcu | 0:2ae1c92f5fba | 525 | lcd.locate(0,0); |
emcu | 0:2ae1c92f5fba | 526 | lcd.printf("DelayOnOff=%dsec", DelayForOffOnRealy); // ((DelayForOffOnRealy * TempSamplingTime)/1000)); |
emcu | 0:2ae1c92f5fba | 527 | } |
emcu | 0:2ae1c92f5fba | 528 | lcd.locate(0,1); |
emcu | 0:2ae1c92f5fba | 529 | lcd.printf("Release RIGHT"); |
emcu | 0:2ae1c92f5fba | 530 | // Awaiting the release of the tRight Button |
emcu | 0:2ae1c92f5fba | 531 | while (ReadButtonOnLCD1602() == tRigth); |
emcu | 0:2ae1c92f5fba | 532 | wait_ms(100); |
emcu | 0:2ae1c92f5fba | 533 | |
emcu | 0:2ae1c92f5fba | 534 | lcd.cls(); |
emcu | 0:2ae1c92f5fba | 535 | lcd.locate(0,0); |
emcu | 0:2ae1c92f5fba | 536 | lcd.printf("Please wait....."); |
emcu | 0:2ae1c92f5fba | 537 | |
emcu | 0:2ae1c92f5fba | 538 | return; |
emcu | 0:2ae1c92f5fba | 539 | } |
emcu | 0:2ae1c92f5fba | 540 | |
emcu | 0:2ae1c92f5fba | 541 | |
emcu | 0:2ae1c92f5fba | 542 | /* |
emcu | 0:2ae1c92f5fba | 543 | **** ReadButtonOnLCD1602 |
emcu | 0:2ae1c92f5fba | 544 | This function Read the button on the LCD1620 |
emcu | 0:2ae1c92f5fba | 545 | This function use the global variable: |
emcu | 0:2ae1c92f5fba | 546 | value |
emcu | 0:2ae1c92f5fba | 547 | LastButtonPressed |
emcu | 0:2ae1c92f5fba | 548 | This function use this definitions: |
emcu | 0:2ae1c92f5fba | 549 | TastoSU |
emcu | 0:2ae1c92f5fba | 550 | TastoGIU |
emcu | 0:2ae1c92f5fba | 551 | TastoDES |
emcu | 0:2ae1c92f5fba | 552 | TastoSIN |
emcu | 0:2ae1c92f5fba | 553 | DeltaTasti |
emcu | 0:2ae1c92f5fba | 554 | tUp |
emcu | 0:2ae1c92f5fba | 555 | tDown |
emcu | 0:2ae1c92f5fba | 556 | tRigth |
emcu | 0:2ae1c92f5fba | 557 | tLeft |
emcu | 0:2ae1c92f5fba | 558 | tNone |
emcu | 0:2ae1c92f5fba | 559 | */ |
emcu | 0:2ae1c92f5fba | 560 | uint8_t ReadButtonOnLCD1602(void) |
emcu | 0:2ae1c92f5fba | 561 | { |
emcu | 0:2ae1c92f5fba | 562 | value = button.read_u16(); |
emcu | 0:2ae1c92f5fba | 563 | // pc.printf("Button value = %d\n\r",value); |
emcu | 0:2ae1c92f5fba | 564 | |
emcu | 0:2ae1c92f5fba | 565 | if (value < (TastoSU + DeltaTasti) && value > (TastoSU - DeltaTasti)) // Button UP |
emcu | 0:2ae1c92f5fba | 566 | { |
emcu | 0:2ae1c92f5fba | 567 | // pc.printf("UP\n\r"); |
emcu | 0:2ae1c92f5fba | 568 | return tUp; |
emcu | 0:2ae1c92f5fba | 569 | } |
emcu | 0:2ae1c92f5fba | 570 | else if (value < (TastoGIU + DeltaTasti) && value > (TastoGIU - DeltaTasti)) // Button DOWN |
emcu | 0:2ae1c92f5fba | 571 | { |
emcu | 0:2ae1c92f5fba | 572 | // pc.printf("DOWN\n\r"); |
emcu | 0:2ae1c92f5fba | 573 | return tDown; |
emcu | 0:2ae1c92f5fba | 574 | } |
emcu | 0:2ae1c92f5fba | 575 | else if (value < (TastoDES + DeltaTasti) && value <= (TastoDES - DeltaTasti)) // Button RIGHT |
emcu | 0:2ae1c92f5fba | 576 | { |
emcu | 0:2ae1c92f5fba | 577 | // pc.printf("RIGHT\n\r"); |
emcu | 0:2ae1c92f5fba | 578 | return tRigth; |
emcu | 0:2ae1c92f5fba | 579 | } |
emcu | 0:2ae1c92f5fba | 580 | else if (value < (TastoSIN + DeltaTasti) && value > (TastoSIN - DeltaTasti)) // Button LEFT |
emcu | 0:2ae1c92f5fba | 581 | { |
emcu | 0:2ae1c92f5fba | 582 | // pc.printf("LEFT\n\r"); |
emcu | 0:2ae1c92f5fba | 583 | return tLeft; |
emcu | 0:2ae1c92f5fba | 584 | } |
emcu | 0:2ae1c92f5fba | 585 | else |
emcu | 0:2ae1c92f5fba | 586 | return tNone; |
emcu | 0:2ae1c92f5fba | 587 | } |
emcu | 0:2ae1c92f5fba | 588 | |
emcu | 0:2ae1c92f5fba | 589 | |
emcu | 0:2ae1c92f5fba | 590 | /* |
emcu | 0:2ae1c92f5fba | 591 | This function is use for eliminate the wrong reading and |
emcu | 0:2ae1c92f5fba | 592 | for setup the MAX and MIN temperature we have read. |
emcu | 0:2ae1c92f5fba | 593 | This function use the global variable: |
emcu | 0:2ae1c92f5fba | 594 | temperature |
emcu | 0:2ae1c92f5fba | 595 | MaxTempError |
emcu | 0:2ae1c92f5fba | 596 | temperaturePREVIOUS |
emcu | 0:2ae1c92f5fba | 597 | temperatureMAX |
emcu | 0:2ae1c92f5fba | 598 | temperatureMIN |
emcu | 0:2ae1c92f5fba | 599 | This function use this definition: |
emcu | 0:2ae1c92f5fba | 600 | MaxError |
emcu | 0:2ae1c92f5fba | 601 | */ |
emcu | 0:2ae1c92f5fba | 602 | void CalcMed(void) |
emcu | 0:2ae1c92f5fba | 603 | { |
emcu | 0:2ae1c92f5fba | 604 | // Remove a measure that exceed the +- MaxError |
emcu | 0:2ae1c92f5fba | 605 | MaxTempError = (temperature * MaxError) / 100; |
emcu | 0:2ae1c92f5fba | 606 | if (temperature > (temperature + MaxTempError)) |
emcu | 0:2ae1c92f5fba | 607 | temperature = temperaturePREVIOUS; |
emcu | 0:2ae1c92f5fba | 608 | else if (temperature < (temperature - MaxTempError)) |
emcu | 0:2ae1c92f5fba | 609 | temperature = temperaturePREVIOUS; |
emcu | 0:2ae1c92f5fba | 610 | else |
emcu | 0:2ae1c92f5fba | 611 | temperaturePREVIOUS = temperature; |
emcu | 0:2ae1c92f5fba | 612 | |
emcu | 0:2ae1c92f5fba | 613 | // SetUp the Max and Min temperature measured |
emcu | 0:2ae1c92f5fba | 614 | if (temperature > temperatureMAX) |
emcu | 0:2ae1c92f5fba | 615 | temperatureMAX = temperature; |
emcu | 0:2ae1c92f5fba | 616 | if (temperature < temperatureMIN) |
emcu | 0:2ae1c92f5fba | 617 | temperatureMIN = temperature; |
emcu | 0:2ae1c92f5fba | 618 | } |
emcu | 0:2ae1c92f5fba | 619 | |
emcu | 0:2ae1c92f5fba | 620 | |
emcu | 0:2ae1c92f5fba | 621 | /* |
emcu | 0:2ae1c92f5fba | 622 | This function Display temperatures on the PC |
emcu | 0:2ae1c92f5fba | 623 | */ |
emcu | 0:2ae1c92f5fba | 624 | void PrintTemperatures(void) |
emcu | 0:2ae1c92f5fba | 625 | { |
emcu | 0:2ae1c92f5fba | 626 | pc.printf("TEMPERATURE Control v.1.2 2015 Casa\n\rTEMPERATURE is: %2.3f Centigrade/Centigradi\r\n", temperature); |
emcu | 0:2ae1c92f5fba | 627 | // pc.printf("DeltaTemp = %2.3f\r\n", DeltaTemp); |
emcu | 0:2ae1c92f5fba | 628 | pc.printf("RELAY - tempON = %2.3f ", tempON); |
emcu | 0:2ae1c92f5fba | 629 | pc.printf("tempOFF = %2.3f\r\n", tempOFF); |
emcu | 0:2ae1c92f5fba | 630 | pc.printf("Delay for OFF or ON realy = %d sec.\n\r", DelayForOffOnRealy); // ((DelayForOffOnRealy * TempSamplingTime)/1000)); |
emcu | 0:2ae1c92f5fba | 631 | // pc.printf("Temperature MIN measured = %d - Temperature MAX measured = %d\n\r", TlowerTemp, TowerTemp); |
emcu | 0:2ae1c92f5fba | 632 | if (rele == ON) |
emcu | 0:2ae1c92f5fba | 633 | pc.printf("RELAY is ON\n\r"); |
emcu | 0:2ae1c92f5fba | 634 | else |
emcu | 0:2ae1c92f5fba | 635 | pc.printf("RELAY is OFF\n\r"); |
emcu | 0:2ae1c92f5fba | 636 | pc.printf("MaxTempError = %2.3f\r\n", MaxTempError); |
emcu | 0:2ae1c92f5fba | 637 | pc.printf("temperaturePREVIOUS = %2.3f\r\n", temperaturePREVIOUS); |
emcu | 0:2ae1c92f5fba | 638 | pc.printf("TEMPERATURE measured - MAX = %2.3f ", temperatureMAX); |
emcu | 0:2ae1c92f5fba | 639 | pc.printf("MIN = %2.3f\r\n\r\n", temperatureMIN); |
emcu | 0:2ae1c92f5fba | 640 | } |