Components and supplies
Arduino UNO
Nextion NX8048T070 - Generic 7.0" HMI TFT LCD Touch Display
Tools and machines
Soldering iron (generic)
Project description
Code
Source code for Arduino
c_cpp
1/* 2 * HVAC car control with Arduino 3 * Version 1.0 4 * Copyright (C) 2018 Hartmut Wendt www.hwhardsoft.de 5 * 6 * 7 * 8 * This program is free software: you can redistribute it and/or modify 9 * it under the terms of the GNU General Public License as published by 10 * the Free Software Foundation, either version 3 of the License, or 11 * (at your option) any later version. 12 * 13 * This program is distributed in the hope that it will be useful, 14 * but WITHOUT ANY WARRANTY; without even the implied warranty of 15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16 * GNU General Public License for more details. 17 * 18 * You should have received a copy of the GNU General Public License 19 * along with this program. If not, see <http://www.gnu.org/licenses/>. 20*/ 21 22 23#include <OneWire.h> 24#include <TimerOne.h> 25 26 27// Portkonfiguration 28#define REL_VENT_FRONT 5 //relay output for ventilation front 29#define REL_VENT_FOOT 6 //relay output for ventilation footwell area 30#define REL_VENT_WINDOW 7 //relay output for ventilation window 31#define REL_FAN_PWR 8 //relay output for fan power 32#define PWM_FAN_PIN 9 //PWM output for fan power 33#define REL_COMPRESSOR 11 //relay output for AC compressorr 34#define REL_HEATING 12 //relay output for heating valve 35#define REL_AIR_CIRCULATION 13 //relay output for air circulation 36#define REL_FOG_LIGHT 14 //relay output for fog light 37#define REL_HEATING_WINDOW_FRONT 15 //relay output for window heating front 38#define REL_HEATING_WINDOW_REAR 16 //relay output for window heating rear 39#define TEST_PIN 19 // output for sw tests 40 41// OneWire DS18S20, DS18B20, DS1822 Temperature sensor 42OneWire sens_out(2); // outside temperature sensor on D2 43OneWire sens_in_right(3); // inside right side temperature sensor on D3 44OneWire sens_in_left(4); // inside left side temperature sensor on D4 45 46int temp_out = 20; // measured outside temperature 47int temp_in_right = 20; // measured inside right side temperature 48int temp_in_left = 20; // measured inside left side temperature 49int set_in_right = 20; // setted inside right side temperature 50int set_in_left = 20; // setted inside left side temperature 51 52 53 54// Variables 55int i1; 56char *test; 57String s1; 58String inputString; 59boolean AC_ENABLED = false; 60int bscheduler = 0; 61 62/** Wird beim Start einmal ausgefhrt */ 63void setup() 64{ 65 // set port direction 66 pinMode(REL_VENT_FRONT, OUTPUT); 67 pinMode(REL_VENT_FOOT, OUTPUT); 68 pinMode(REL_VENT_WINDOW, OUTPUT); 69 pinMode(REL_FAN_PWR, OUTPUT); 70 pinMode(REL_COMPRESSOR, OUTPUT); 71 pinMode(REL_HEATING, OUTPUT); 72 pinMode(REL_AIR_CIRCULATION, OUTPUT); 73 pinMode(REL_FOG_LIGHT, OUTPUT); 74 pinMode(REL_HEATING_WINDOW_FRONT, OUTPUT); 75 pinMode(REL_HEATING_WINDOW_REAR, OUTPUT); 76 pinMode(TEST_PIN, OUTPUT); 77 78 // init serial port for nextion communication. 79 Serial.begin(9600); 80 delay(250); 81 82 // first read in of temperatures 83 temp_out = read_temperature(sens_out); 84 delay(100); 85 temp_in_right = read_temperature(sens_in_right); 86 delay(100); 87 temp_in_left = read_temperature(sens_in_left); 88 89 //pwm init 90 Timer1.initialize(1000); // 1.000 us = 1 kHz 91 Timer1.pwm (PWM_FAN_PIN, 0); 92 93} 94 95 96// ----- Main loop ----------------------------------------------------------------------------------- 97void loop() 98{ 99 // processing of incomming messages from nextion 100 Nextion_processing(); 101 102 switch(bscheduler) 103 { 104 105 // measure outside temperature 106 case 0: 107 temp_out = read_temperature(sens_out); 108 // transmit outside temperature to nextion display 109 Serial.print("ID1.val="); 110 Serial.print(temp_out); 111 Serial.write(0xff); 112 Serial.write(0xff); 113 Serial.write(0xff); 114 break; 115 116 // measure inside right temperature 117 case 25: 118 temp_in_right = read_temperature(sens_in_right); 119 break; 120 121 // measure inside left temperature 122 case 50: 123 temp_in_left = read_temperature(sens_in_left); 124 break; 125 126 // HVAC control 127 case 75: 128 clima_control(); 129 break; 130 131 132 } 133 bscheduler++; 134 if (bscheduler > 100) bscheduler = 0; 135 136 delay(10); 137 138 139} 140 141 142// read temperature from a connected 1wire temperature sensor 143int read_temperature(OneWire ds) { 144 byte i; 145 byte present = 0; 146 byte type_s; 147 byte data[12]; 148 byte addr[8]; 149 150 if ( !ds.search(addr)) 151 { 152 ds.reset_search(); 153 delay(250); 154 return(97); 155 } 156 157 if (OneWire::crc8(addr, 7) != addr[7]) 158 { 159 return(98); 160 } 161 162 163 // the first ROM byte indicates which chip 164 switch (addr[0]) 165 { 166 case 0x10: 167 type_s = 1; 168 break; 169 case 0x28: 170 type_s = 0; 171 break; 172 case 0x22: 173 type_s = 0; 174 break; 175 default: 176 return(99); 177 } 178 179 ds.reset(); 180 ds.select(addr); 181 ds.write(0x44, 1); // start conversion, with parasite power on at the end 182 delay(750); 183 present = ds.reset(); 184 ds.select(addr); 185 ds.write(0xBE); // Read Scratchpad 186 187 for ( i = 0; i < 9; i++) 188 { 189 data[i] = ds.read(); 190 } 191 192 // Convert the data to actual temperature 193 int16_t raw = (data[1] << 8) | data[0]; 194 195 if (type_s) { 196 197 raw = raw << 3; // 9 bit resolution default 198 if (data[7] == 0x10) 199 { 200 digitalWrite(TEST_PIN, HIGH); 201 raw = (raw & 0xFFF0) + 12 - data[6]; 202 } 203 } 204 else 205 { 206 byte cfg = (data[4] & 0x60); 207 if (cfg == 0x00) raw = raw & ~7; // 9 bit resolution, 93.75 ms 208 else if (cfg == 0x20) raw = raw & ~3; // 10 bit res, 187.5 ms 209 else if (cfg == 0x40) raw = raw & ~1; // 11 bit res, 375 ms 210 211 } 212 213 return((int)raw / 16.0); 214} 215 216 217 218 219 220unsigned long StrToHex(String str, byte digits) 221{ 222 char ConvByte[10]; 223 str.toCharArray(ConvByte, digits); 224 return (unsigned long) strtol(ConvByte, NULL, 16); 225} 226 227 228// ------ receiving and processing of incomming data from nextion 229void Nextion_processing() 230{ 231 int i1; 232 String s1; 233 while (Serial.available()) { 234 // get the new byte: 235 char inChar = (char)Serial.read(); 236 // add it to the inputString: 237 inputString += inChar; 238 if (inChar != '|') return; 239 } 240 241 int i2=inputString.indexOf("="); 242 if (i2 > 0) { 243 #ifdef _debug_snd 244 Serial.print("Nextion: "); 245 Serial.print(inputString); 246 Serial.println(" - "); 247 Serial.print(inputString.substring(i2-2,i2)); 248 Serial.print("="); 249 Serial.println(inputString[i2+1]); 250 #endif 251 252 //- id2 FOG LIGHT - 253 //------------------------------------------------------------------------------------------------ 254 if (inputString.indexOf("id02=1")> -1) { 255 // FOG LIGHT on 256 digitalWrite(REL_FOG_LIGHT, HIGH); 257 258 } 259 else if(inputString.indexOf("id02=0")> -1) { 260 // FOG LIGHT off 261 digitalWrite(REL_FOG_LIGHT, LOW); 262 } 263 264 //- id5 ventilation footwell + window - 265 //------------------------------------------------------------------------------------------------ 266 if (inputString.indexOf("id05=1")> -1) { 267 // set ventilation to foot well & window 268 digitalWrite(REL_VENT_FRONT, LOW); 269 digitalWrite(REL_VENT_FOOT, HIGH); 270 digitalWrite(REL_VENT_WINDOW, HIGH); 271 272 } 273 else if(inputString.indexOf("id05=0")> -1) { 274 // switch all ventilation off 275 digitalWrite(REL_VENT_FRONT, LOW); 276 digitalWrite(REL_VENT_FOOT, LOW); 277 digitalWrite(REL_VENT_WINDOW, LOW); 278 } 279 280 //- id9 ventilation footwell - 281 //------------------------------------------------------------------------------------------------ 282 if (inputString.indexOf("id09=1")> -1) { 283 // set ventilation to foot well 284 digitalWrite(REL_VENT_FRONT, LOW); 285 digitalWrite(REL_VENT_FOOT, HIGH); 286 digitalWrite(REL_VENT_WINDOW, LOW); 287 288 } 289 else if(inputString.indexOf("id09=0")> -1) { 290 // switch all ventilation off 291 digitalWrite(REL_VENT_FRONT, LOW); 292 digitalWrite(REL_VENT_FOOT, LOW); 293 digitalWrite(REL_VENT_WINDOW, LOW); 294 } 295 296 //- id14 ventilation front - 297 //------------------------------------------------------------------------------------------------ 298 if (inputString.indexOf("id14=1")> -1) { 299 // set ventilation to front 300 digitalWrite(REL_VENT_FRONT, HIGH); 301 digitalWrite(REL_VENT_FOOT, LOW); 302 digitalWrite(REL_VENT_WINDOW, LOW); 303 304 } 305 else if(inputString.indexOf("id14=0")> -1) { 306 // switch all ventilation off 307 digitalWrite(REL_VENT_FRONT, LOW); 308 digitalWrite(REL_VENT_FOOT, LOW); 309 digitalWrite(REL_VENT_WINDOW, LOW); 310 } 311 312 //- id22 ventilation front + footwell - 313 //------------------------------------------------------------------------------------------------ 314 if (inputString.indexOf("id22=1")> -1) { 315 // set ventilation to front + foot well 316 digitalWrite(REL_VENT_FRONT, HIGH); 317 digitalWrite(REL_VENT_FOOT, HIGH); 318 digitalWrite(REL_VENT_WINDOW, LOW); 319 320 } 321 else if(inputString.indexOf("id22=0")> -1) { 322 // switch all ventilation off 323 digitalWrite(REL_VENT_FRONT, LOW); 324 digitalWrite(REL_VENT_FOOT, LOW); 325 digitalWrite(REL_VENT_WINDOW, LOW); 326 } 327 328 //- id4 electrical window heating rear - 329 //------------------------------------------------------------------------------------------------ 330 if (inputString.indexOf("id04=1")> -1) { 331 // window heating on 332 digitalWrite(REL_HEATING_WINDOW_REAR, HIGH); 333 334 } 335 else if(inputString.indexOf("id04=0")> -1) { 336 // window heating off 337 digitalWrite(REL_HEATING_WINDOW_REAR, LOW); 338 } 339 340 //- id6 electrical window heating front - 341 //------------------------------------------------------------------------------------------------ 342 if (inputString.indexOf("id06=1")> -1) { 343 // window heating on 344 digitalWrite(REL_HEATING_WINDOW_FRONT, HIGH); 345 346 } 347 else if(inputString.indexOf("id06=0")> -1) { 348 // window heating off 349 digitalWrite(REL_HEATING_WINDOW_FRONT, LOW); 350 } 351 352 353 //- id7 air circulation - 354 //------------------------------------------------------------------------------------------------ 355 if (inputString.indexOf("id07=1")> -1) { 356 // air circulation on 357 digitalWrite(REL_AIR_CIRCULATION, HIGH); 358 359 } 360 else if(inputString.indexOf("id07=0")> -1) { 361 //air circulation off 362 digitalWrite(REL_AIR_CIRCULATION, LOW); 363 } 364 365 366 //- id10 Air Condition enabled/disabled - 367 //------------------------------------------------------------------------------------------------ 368 if (inputString.indexOf("id10=1")> -1) { 369 // AC enabled 370 AC_ENABLED = true; 371 } 372 else if(inputString.indexOf("id10=0")> -1) { 373 // AC disabled 374 AC_ENABLED = false; 375 } 376 377 378 //- id18 HVAC on/off - 379 //------------------------------------------------------------------------------------------------ 380 if (inputString.indexOf("id18=1")> -1) { 381 // HVAC on 382 383 } 384 else if(inputString.indexOf("id18=0")> -1) { 385 // HVAC off 386 AC_ENABLED = false; 387 388 // FAN off 389 digitalWrite(REL_FAN_PWR, LOW); 390 Timer1.pwm (PWM_FAN_PIN, 0); 391 392 //air circulation off 393 digitalWrite(REL_AIR_CIRCULATION, LOW); 394 395 // window heating off 396 digitalWrite(REL_HEATING_WINDOW_REAR, LOW); 397 digitalWrite(REL_HEATING_WINDOW_FRONT, LOW); 398 399 // switch all ventilation off 400 digitalWrite(REL_VENT_FRONT, LOW); 401 digitalWrite(REL_VENT_FOOT, LOW); 402 digitalWrite(REL_VENT_WINDOW, LOW); 403 } 404 405 406 //- id13 FAN control - 407 //------------------------------------------------------------------------------------------------ 408 if (inputString.indexOf("id13=0")> -1) { 409 // FAN off 410 digitalWrite(REL_FAN_PWR, LOW); 411 Timer1.pwm (PWM_FAN_PIN, 0); 412 } 413 else if(inputString.indexOf("id13=1")> -1) { 414 // FAN level 1 415 digitalWrite(REL_FAN_PWR, HIGH); 416 Timer1.pwm (PWM_FAN_PIN, 146); 417 } 418 else if(inputString.indexOf("id13=2")> -1) { 419 // FAN level 2 420 digitalWrite(REL_FAN_PWR, HIGH); 421 Timer1.pwm (PWM_FAN_PIN, 293); 422 } 423 else if(inputString.indexOf("id13=3")> -1) { 424 // FAN level 3 425 digitalWrite(REL_FAN_PWR, HIGH); 426 Timer1.pwm (PWM_FAN_PIN, 439); 427 } 428 else if(inputString.indexOf("id13=4")> -1) { 429 // FAN level 4 430 digitalWrite(REL_FAN_PWR, HIGH); 431 Timer1.pwm (PWM_FAN_PIN, 585); 432 } 433 else if(inputString.indexOf("id13=5")> -1) { 434 // FAN level 5 435 digitalWrite(REL_FAN_PWR, HIGH); 436 Timer1.pwm (PWM_FAN_PIN, 731); 437 } 438 else if(inputString.indexOf("id13=6")> -1) { 439 // FAN level 6 440 digitalWrite(REL_FAN_PWR, HIGH); 441 Timer1.pwm (PWM_FAN_PIN, 877); 442 } 443 else if(inputString.indexOf("id13=7")> -1) { 444 // FAN level Max 445 digitalWrite(REL_FAN_PWR, HIGH); 446 Timer1.pwm (PWM_FAN_PIN, 1023); 447 } 448 449 //-- setted temperature right -- 450 //------------------------------------------------------------------------------------------------ 451 i1 = inputString.indexOf("id20="); 452 if (i1 > -1) 453 { 454 set_in_right = inputString.charAt(i1 + 5) - 48; 455 } 456 457 //-- setted temperature left -- 458 //------------------------------------------------------------------------------------------------ 459 i1 = inputString.indexOf("id16="); 460 if (i1 > -1) 461 { 462 set_in_left = inputString.charAt(i1 + 5) - 48; 463 } 464 465 466 } 467 468 while(Serial.available()) {Serial.read();} 469 inputString = ""; 470 471} 472 473 474// HVAC control 475void clima_control() { 476 477 // cooling or heating requiredn? 478 if (temp_out < set_in_left) { 479 // heating 480 digitalWrite(REL_COMPRESSOR, LOW); 481 digitalWrite(REL_HEATING, HIGH); 482 483 484 } else if ((temp_out > (set_in_left + 1)) && (temp_out > 15) && (AC_ENABLED == true)) { 485 // cooling 486 digitalWrite(REL_COMPRESSOR, HIGH); 487 digitalWrite(REL_HEATING, LOW); 488 489 490 } else { 491 // temperature ok - no further action required 492 digitalWrite(REL_COMPRESSOR, LOW); 493 digitalWrite(REL_HEATING, LOW); 494 } 495} 496 497 498
Source code for Arduino
c_cpp
1/* 2 * HVAC car control with Arduino 3 * Version 1.0 4 * Copyright (C) 2018 Hartmut Wendt www.hwhardsoft.de 5 * 6 * 7 * 8 * This program is free software: you can redistribute it and/or modify 9 * it under the terms of the GNU General Public License as published by 10 * the Free Software Foundation, either version 3 of the License, or 11 * (at your option) any later version. 12 * 13 * This program is distributed in the hope that it will be useful, 14 * but WITHOUT ANY WARRANTY; without even the implied warranty of 15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16 * GNU General Public License for more details. 17 * 18 * You should have received a copy of the GNU General Public License 19 * along with this program. If not, see <http://www.gnu.org/licenses/>. 20*/ 21 22 23#include <OneWire.h> 24#include <TimerOne.h> 25 26 27// Portkonfiguration 28#define REL_VENT_FRONT 5 //relay output for ventilation front 29#define REL_VENT_FOOT 6 //relay output for ventilation footwell area 30#define REL_VENT_WINDOW 7 //relay output for ventilation window 31#define REL_FAN_PWR 8 //relay output for fan power 32#define PWM_FAN_PIN 9 //PWM output for fan power 33#define REL_COMPRESSOR 11 //relay output for AC compressorr 34#define REL_HEATING 12 //relay output for heating valve 35#define REL_AIR_CIRCULATION 13 //relay output for air circulation 36#define REL_FOG_LIGHT 14 //relay output for fog light 37#define REL_HEATING_WINDOW_FRONT 15 //relay output for window heating front 38#define REL_HEATING_WINDOW_REAR 16 //relay output for window heating rear 39#define TEST_PIN 19 // output for sw tests 40 41// OneWire DS18S20, DS18B20, DS1822 Temperature sensor 42OneWire sens_out(2); // outside temperature sensor on D2 43OneWire sens_in_right(3); // inside right side temperature sensor on D3 44OneWire sens_in_left(4); // inside left side temperature sensor on D4 45 46int temp_out = 20; // measured outside temperature 47int temp_in_right = 20; // measured inside right side temperature 48int temp_in_left = 20; // measured inside left side temperature 49int set_in_right = 20; // setted inside right side temperature 50int set_in_left = 20; // setted inside left side temperature 51 52 53 54// Variables 55int i1; 56char *test; 57String s1; 58String inputString; 59boolean AC_ENABLED = false; 60int bscheduler = 0; 61 62/** Wird beim Start einmal ausgefhrt */ 63void setup() 64{ 65 // set port direction 66 pinMode(REL_VENT_FRONT, OUTPUT); 67 pinMode(REL_VENT_FOOT, OUTPUT); 68 pinMode(REL_VENT_WINDOW, OUTPUT); 69 pinMode(REL_FAN_PWR, OUTPUT); 70 pinMode(REL_COMPRESSOR, OUTPUT); 71 pinMode(REL_HEATING, OUTPUT); 72 pinMode(REL_AIR_CIRCULATION, OUTPUT); 73 pinMode(REL_FOG_LIGHT, OUTPUT); 74 pinMode(REL_HEATING_WINDOW_FRONT, OUTPUT); 75 pinMode(REL_HEATING_WINDOW_REAR, OUTPUT); 76 pinMode(TEST_PIN, OUTPUT); 77 78 // init serial port for nextion communication. 79 Serial.begin(9600); 80 delay(250); 81 82 // first read in of temperatures 83 temp_out = read_temperature(sens_out); 84 delay(100); 85 temp_in_right = read_temperature(sens_in_right); 86 delay(100); 87 temp_in_left = read_temperature(sens_in_left); 88 89 //pwm init 90 Timer1.initialize(1000); // 1.000 us = 1 kHz 91 Timer1.pwm (PWM_FAN_PIN, 0); 92 93} 94 95 96// ----- Main loop ----------------------------------------------------------------------------------- 97void loop() 98{ 99 // processing of incomming messages from nextion 100 Nextion_processing(); 101 102 switch(bscheduler) 103 { 104 105 // measure outside temperature 106 case 0: 107 temp_out = read_temperature(sens_out); 108 // transmit outside temperature to nextion display 109 Serial.print("ID1.val="); 110 Serial.print(temp_out); 111 Serial.write(0xff); 112 Serial.write(0xff); 113 Serial.write(0xff); 114 break; 115 116 // measure inside right temperature 117 case 25: 118 temp_in_right = read_temperature(sens_in_right); 119 break; 120 121 // measure inside left temperature 122 case 50: 123 temp_in_left = read_temperature(sens_in_left); 124 break; 125 126 // HVAC control 127 case 75: 128 clima_control(); 129 break; 130 131 132 } 133 bscheduler++; 134 if (bscheduler > 100) bscheduler = 0; 135 136 delay(10); 137 138 139} 140 141 142// read temperature from a connected 1wire temperature sensor 143int read_temperature(OneWire ds) { 144 byte i; 145 byte present = 0; 146 byte type_s; 147 byte data[12]; 148 byte addr[8]; 149 150 if ( !ds.search(addr)) 151 { 152 ds.reset_search(); 153 delay(250); 154 return(97); 155 } 156 157 if (OneWire::crc8(addr, 7) != addr[7]) 158 { 159 return(98); 160 } 161 162 163 // the first ROM byte indicates which chip 164 switch (addr[0]) 165 { 166 case 0x10: 167 type_s = 1; 168 break; 169 case 0x28: 170 type_s = 0; 171 break; 172 case 0x22: 173 type_s = 0; 174 break; 175 default: 176 return(99); 177 } 178 179 ds.reset(); 180 ds.select(addr); 181 ds.write(0x44, 1); // start conversion, with parasite power on at the end 182 delay(750); 183 present = ds.reset(); 184 ds.select(addr); 185 ds.write(0xBE); // Read Scratchpad 186 187 for ( i = 0; i < 9; i++) 188 { 189 data[i] = ds.read(); 190 } 191 192 // Convert the data to actual temperature 193 int16_t raw = (data[1] << 8) | data[0]; 194 195 if (type_s) { 196 197 raw = raw << 3; // 9 bit resolution default 198 if (data[7] == 0x10) 199 { 200 digitalWrite(TEST_PIN, HIGH); 201 raw = (raw & 0xFFF0) + 12 - data[6]; 202 } 203 } 204 else 205 { 206 byte cfg = (data[4] & 0x60); 207 if (cfg == 0x00) raw = raw & ~7; // 9 bit resolution, 93.75 ms 208 else if (cfg == 0x20) raw = raw & ~3; // 10 bit res, 187.5 ms 209 else if (cfg == 0x40) raw = raw & ~1; // 11 bit res, 375 ms 210 211 } 212 213 return((int)raw / 16.0); 214} 215 216 217 218 219 220unsigned long StrToHex(String str, byte digits) 221{ 222 char ConvByte[10]; 223 str.toCharArray(ConvByte, digits); 224 return (unsigned long) strtol(ConvByte, NULL, 16); 225} 226 227 228// ------ receiving and processing of incomming data from nextion 229void Nextion_processing() 230{ 231 int i1; 232 String s1; 233 while (Serial.available()) { 234 // get the new byte: 235 char inChar = (char)Serial.read(); 236 // add it to the inputString: 237 inputString += inChar; 238 if (inChar != '|') return; 239 } 240 241 int i2=inputString.indexOf("="); 242 if (i2 > 0) { 243 #ifdef _debug_snd 244 Serial.print("Nextion: "); 245 Serial.print(inputString); 246 Serial.println(" - "); 247 Serial.print(inputString.substring(i2-2,i2)); 248 Serial.print("="); 249 Serial.println(inputString[i2+1]); 250 #endif 251 252 //- id2 FOG LIGHT - 253 //------------------------------------------------------------------------------------------------ 254 if (inputString.indexOf("id02=1")> -1) { 255 // FOG LIGHT on 256 digitalWrite(REL_FOG_LIGHT, HIGH); 257 258 } 259 else if(inputString.indexOf("id02=0")> -1) { 260 // FOG LIGHT off 261 digitalWrite(REL_FOG_LIGHT, LOW); 262 } 263 264 //- id5 ventilation footwell + window - 265 //------------------------------------------------------------------------------------------------ 266 if (inputString.indexOf("id05=1")> -1) { 267 // set ventilation to foot well & window 268 digitalWrite(REL_VENT_FRONT, LOW); 269 digitalWrite(REL_VENT_FOOT, HIGH); 270 digitalWrite(REL_VENT_WINDOW, HIGH); 271 272 } 273 else if(inputString.indexOf("id05=0")> -1) { 274 // switch all ventilation off 275 digitalWrite(REL_VENT_FRONT, LOW); 276 digitalWrite(REL_VENT_FOOT, LOW); 277 digitalWrite(REL_VENT_WINDOW, LOW); 278 } 279 280 //- id9 ventilation footwell - 281 //------------------------------------------------------------------------------------------------ 282 if (inputString.indexOf("id09=1")> -1) { 283 // set ventilation to foot well 284 digitalWrite(REL_VENT_FRONT, LOW); 285 digitalWrite(REL_VENT_FOOT, HIGH); 286 digitalWrite(REL_VENT_WINDOW, LOW); 287 288 } 289 else if(inputString.indexOf("id09=0")> -1) { 290 // switch all ventilation off 291 digitalWrite(REL_VENT_FRONT, LOW); 292 digitalWrite(REL_VENT_FOOT, LOW); 293 digitalWrite(REL_VENT_WINDOW, LOW); 294 } 295 296 //- id14 ventilation front - 297 //------------------------------------------------------------------------------------------------ 298 if (inputString.indexOf("id14=1")> -1) { 299 // set ventilation to front 300 digitalWrite(REL_VENT_FRONT, HIGH); 301 digitalWrite(REL_VENT_FOOT, LOW); 302 digitalWrite(REL_VENT_WINDOW, LOW); 303 304 } 305 else if(inputString.indexOf("id14=0")> -1) { 306 // switch all ventilation off 307 digitalWrite(REL_VENT_FRONT, LOW); 308 digitalWrite(REL_VENT_FOOT, LOW); 309 digitalWrite(REL_VENT_WINDOW, LOW); 310 } 311 312 //- id22 ventilation front + footwell - 313 //------------------------------------------------------------------------------------------------ 314 if (inputString.indexOf("id22=1")> -1) { 315 // set ventilation to front + foot well 316 digitalWrite(REL_VENT_FRONT, HIGH); 317 digitalWrite(REL_VENT_FOOT, HIGH); 318 digitalWrite(REL_VENT_WINDOW, LOW); 319 320 } 321 else if(inputString.indexOf("id22=0")> -1) { 322 // switch all ventilation off 323 digitalWrite(REL_VENT_FRONT, LOW); 324 digitalWrite(REL_VENT_FOOT, LOW); 325 digitalWrite(REL_VENT_WINDOW, LOW); 326 } 327 328 //- id4 electrical window heating rear - 329 //------------------------------------------------------------------------------------------------ 330 if (inputString.indexOf("id04=1")> -1) { 331 // window heating on 332 digitalWrite(REL_HEATING_WINDOW_REAR, HIGH); 333 334 } 335 else if(inputString.indexOf("id04=0")> -1) { 336 // window heating off 337 digitalWrite(REL_HEATING_WINDOW_REAR, LOW); 338 } 339 340 //- id6 electrical window heating front - 341 //------------------------------------------------------------------------------------------------ 342 if (inputString.indexOf("id06=1")> -1) { 343 // window heating on 344 digitalWrite(REL_HEATING_WINDOW_FRONT, HIGH); 345 346 } 347 else if(inputString.indexOf("id06=0")> -1) { 348 // window heating off 349 digitalWrite(REL_HEATING_WINDOW_FRONT, LOW); 350 } 351 352 353 //- id7 air circulation - 354 //------------------------------------------------------------------------------------------------ 355 if (inputString.indexOf("id07=1")> -1) { 356 // air circulation on 357 digitalWrite(REL_AIR_CIRCULATION, HIGH); 358 359 } 360 else if(inputString.indexOf("id07=0")> -1) { 361 //air circulation off 362 digitalWrite(REL_AIR_CIRCULATION, LOW); 363 } 364 365 366 //- id10 Air Condition enabled/disabled - 367 //------------------------------------------------------------------------------------------------ 368 if (inputString.indexOf("id10=1")> -1) { 369 // AC enabled 370 AC_ENABLED = true; 371 } 372 else if(inputString.indexOf("id10=0")> -1) { 373 // AC disabled 374 AC_ENABLED = false; 375 } 376 377 378 //- id18 HVAC on/off - 379 //------------------------------------------------------------------------------------------------ 380 if (inputString.indexOf("id18=1")> -1) { 381 // HVAC on 382 383 } 384 else if(inputString.indexOf("id18=0")> -1) { 385 // HVAC off 386 AC_ENABLED = false; 387 388 // FAN off 389 digitalWrite(REL_FAN_PWR, LOW); 390 Timer1.pwm (PWM_FAN_PIN, 0); 391 392 //air circulation off 393 digitalWrite(REL_AIR_CIRCULATION, LOW); 394 395 // window heating off 396 digitalWrite(REL_HEATING_WINDOW_REAR, LOW); 397 digitalWrite(REL_HEATING_WINDOW_FRONT, LOW); 398 399 // switch all ventilation off 400 digitalWrite(REL_VENT_FRONT, LOW); 401 digitalWrite(REL_VENT_FOOT, LOW); 402 digitalWrite(REL_VENT_WINDOW, LOW); 403 } 404 405 406 //- id13 FAN control - 407 //------------------------------------------------------------------------------------------------ 408 if (inputString.indexOf("id13=0")> -1) { 409 // FAN off 410 digitalWrite(REL_FAN_PWR, LOW); 411 Timer1.pwm (PWM_FAN_PIN, 0); 412 } 413 else if(inputString.indexOf("id13=1")> -1) { 414 // FAN level 1 415 digitalWrite(REL_FAN_PWR, HIGH); 416 Timer1.pwm (PWM_FAN_PIN, 146); 417 } 418 else if(inputString.indexOf("id13=2")> -1) { 419 // FAN level 2 420 digitalWrite(REL_FAN_PWR, HIGH); 421 Timer1.pwm (PWM_FAN_PIN, 293); 422 } 423 else if(inputString.indexOf("id13=3")> -1) { 424 // FAN level 3 425 digitalWrite(REL_FAN_PWR, HIGH); 426 Timer1.pwm (PWM_FAN_PIN, 439); 427 } 428 else if(inputString.indexOf("id13=4")> -1) { 429 // FAN level 4 430 digitalWrite(REL_FAN_PWR, HIGH); 431 Timer1.pwm (PWM_FAN_PIN, 585); 432 } 433 else if(inputString.indexOf("id13=5")> -1) { 434 // FAN level 5 435 digitalWrite(REL_FAN_PWR, HIGH); 436 Timer1.pwm (PWM_FAN_PIN, 731); 437 } 438 else if(inputString.indexOf("id13=6")> -1) { 439 // FAN level 6 440 digitalWrite(REL_FAN_PWR, HIGH); 441 Timer1.pwm (PWM_FAN_PIN, 877); 442 } 443 else if(inputString.indexOf("id13=7")> -1) { 444 // FAN level Max 445 digitalWrite(REL_FAN_PWR, HIGH); 446 Timer1.pwm (PWM_FAN_PIN, 1023); 447 } 448 449 //-- setted temperature right -- 450 //------------------------------------------------------------------------------------------------ 451 i1 = inputString.indexOf("id20="); 452 if (i1 > -1) 453 { 454 set_in_right = inputString.charAt(i1 + 5) - 48; 455 } 456 457 //-- setted temperature left -- 458 //------------------------------------------------------------------------------------------------ 459 i1 = inputString.indexOf("id16="); 460 if (i1 > -1) 461 { 462 set_in_left = inputString.charAt(i1 + 5) - 48; 463 } 464 465 466 } 467 468 while(Serial.available()) {Serial.read();} 469 inputString = ""; 470 471} 472 473 474// HVAC control 475void clima_control() { 476 477 // cooling or heating requiredn? 478 if (temp_out < set_in_left) { 479 // heating 480 digitalWrite(REL_COMPRESSOR, LOW); 481 digitalWrite(REL_HEATING, HIGH); 482 483 484 } else if ((temp_out > (set_in_left + 1)) && (temp_out > 15) && (AC_ENABLED == true)) { 485 // cooling 486 digitalWrite(REL_COMPRESSOR, HIGH); 487 digitalWrite(REL_HEATING, LOW); 488 489 490 } else { 491 // temperature ok - no further action required 492 digitalWrite(REL_COMPRESSOR, LOW); 493 digitalWrite(REL_HEATING, LOW); 494 } 495} 496 497 498
Downloadable files
Port usage overview Arduino NANO
This picture will show you the usage of all ports of an connected Arduino Nano or Uno
Port usage overview Arduino NANO
Documentation
Nextion file
GUI file for Nextion touch
Nextion file
Nextion file
GUI file for Nextion touch
Nextion file
Comments
Only logged in users can leave comments
hwhardsoft
0 Followers
•0 Projects
Table of contents
Intro
18
0