Components and supplies
w5200 Ethernet Shield
DHT22 Temperature Sensor
2.8 TFT Touch Shield V2.0
Arduino Mega 2560
SEEED Studio Relay Shield
Temperature Sensor
Pmod RTCC
Apps and platforms
Arduino IDE
Project description
Code
Harold and Kumar w/out IP code
c_cpp
Arduino
1#include <SD.h> 2#include <stdint.h> 3#include <SeeedTouchScreen.h> 4#include <TFTv2.h> 5#include <SPI.h> 6#include <Time.h> 7#include <TimeLib.h> 8#include <DHT.h> 9#include <DHT_U.h> 10#include <OneWire.h> 11#include <DS3232RTC.h> 12#include <Adafruit_Sensor.h> 13#include <TimeLord.h> 14#include <Wire.h> 15#include "DHT.h" 16#include <DallasTemperature.h> 17#include <EthernetV2_0.h> 18#include "TFTv2.h" 19int page; 20int firsttimeon = 1; 21//time veriables 22int daynow; 23int monthnow; 24int yearnow; 25int minutenow; 26int hournow; 27int tpage; 28int npage; 29int dnchan; 30float const LONGITUDE = -1.41503959; 31float const LATITUDE = 8.528874379; 32//temp and humid veriables 33float humidmin; 34float humidminset; 35int humidday; 36#define DHTPIN 22 // temp/humidity sensor 37#define DHTTYPE DHT22 38DHT dht(DHTPIN, DHTTYPE); 39float hkhr1temp; 40float hkhr2temp; 41float hkdaytemp; 42float hknighttemp; 43float ambitempcur; 44float ambitempdisp; 45float hkdaytempdisp; 46float hknighttempdisp; 47float humidcur; 48float humiddisp; 49#define hr1 23 50#define hr2 24 51OneWire oneWire_hr1(hr1); 52OneWire oneWire_hr2(hr2); 53DallasTemperature sensor_hr1(&oneWire_hr1); 54DallasTemperature sensor_hr2(&oneWire_hr2); 55float hr1tempcur; 56float hr1tempdisp; 57float hr2tempcur; 58float hr2tempdisp; 59int ambitempday; 60int ambitempnight; 61float roomtemp; 62float roomtempdisp; 63//light cycle veriables 64int srhour; 65int srminute; 66int srsecond; 67int srhourset; 68int srminuteset; 69int srhoursetdisp; 70int srminutesetdisp; 71int srsecondset; 72int srday; 73int sshour; 74int ssminute; 75int sssecond; 76int sshourset; 77int ssminuteset; 78int sssecondset; 79int ssminutesetdisp; 80int sshoursetdisp; 81int ssday = 0; 82int night; 83byte todaysr[] = {0, 0, 0, 0, 0, 0}; 84byte todayss[] = {0, 0, 0, 0, 0, 0}; 85byte dlstime[] = {0, 0, hour(), day(), month(), year()}; 86long timenow; 87long timess; 88long timesr; 89//pin variables 90//ambient heat/humidity is pin 22 91// heat rock 1 temp is pin 23 92// heat rock 2 temp is pin 24 93// ds3231rtc SCL is on analog pin A5 94// ds3231rtc SDA is on analog pin A4 95const int dnlamp = 25; 96const int fogger = 26; 97const int hrock1 = 27; 98const int hrock2 = 28; 99const int fan = 29; 100const int foggerwater = 31; 101const int hlamp = 30; 102const int rset = 41; 103// sensor quality veriables 104int ambithsen; 105int hr1sen; 106int hr2sen; 107int foggersen; 108//power on veriables 109int dlpwr; 110int hlpwr; 111int hr1pwr; 112int hr2pwr; 113int fogpwr; 114int fanpwr; 115int foggerpwr; 116TouchScreen ts = TouchScreen(XP, YP, XM, YM); //init TouchScreen port pins 117// file varieables 118String myData; 119String myDoc; 120File myFile; 121/*Cat5 wires 122 Red Taped ---- Relay Box 123 Solid Brown = 5v 124 White Brown = Ground 125 Solid Green = Pin 7 of always on relay -- Heat Rock 2 Power -- Arduino Pin = 28 126 White Green = Pin 6 of always on relay -- Heat Rock 1 Power -- Arduino Pin = 27 127 Solid Blue = Pin 5 of always on relay -- Heat Lamp Power -- Arduino Pin = 30 128 White Blue = Pin 4 of always on relay -- Day/Night Lights Power -- Arduino Pin = 25 129 Solid Orange = Pin 5 of power save relay -- Fogger Power -- Arduino Pin = 26 130 White Orange = Pin 4 of power save relay -- Unused 131 // 132 White Taped ---- Relay Box 133 Solid Green = Pin 7 of power save relay -- Fan Relay -- Arduino Pin = 29 134 White Green = Unused 135 Solid Blue = J1 Open Fan relay 136 White Blue = J1 Common Fan relay 137 Solid Brown = Unused 138 White Brown = Unused 139 Solid Orange = 5v 140 White Orange = Ground 141 // 142 Yellow Tape ---- Sensors 143 Solid Brown = Fan Power 144 White Brown = Fan Ground 145 Solid Green = Ambiant Temperature/Humidity Sensor -- Arduino Pin = 22 146 White Green = Heat Rock 1 Sensor -- Arduino Pin = 23 147 Solid Blue = Heat Rock 2 Sensor -- Arduino Pin = 24 148 White Blue = UNUSED 149 Solid Orange = 5v 150 White Orange = Ground 151 // 152 Red Yellow Tape ---- Touch Screen 153 Solid Brown = Top Right ICSP 154 White Brown = Analog 3 155 Solid Green = Analog 2 156 White Green = Analog 1 157 Solid Blue = Analog 0 158 White Blue = Reset 159 Solid Orange = 5v 160 White Orange = Ground 161 // 162 Red White Tape ---- Touch Screen 163 Solid Brown = Digital 7 164 White Brown = Digital 6 165 Solid Green = Digital 5 166 White Green = Bottom Left ICSP 167 Solid Blue = Top Left ICSP 168 White Blue = Bottom Middle ICSP 169 Solid Orange = Top MiddleICSP 170 White Orange = Bottom Right ICSP 171*/ 172// Enter a MAC address and IP address for your controller below. 173// The IP address will be dependent on your local network: 174byte mac[] = { 175 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED 176}; 177IPAddress ip(192, 168, 1, 109); 178// Initialize the Ethernet server library 179// with the IP address and port you want to use 180// (port 80 is default for HTTP): 181EthernetServer server(6113); 182#define W5200_CS 10 183#define SDCARD_CS 4 184//Camera definitions 185#define VC0706_PROTOCOL_SIGN 0x56 186#define VC0706_Serial2_NUMBER 0x00 187#define VC0706_COMMAND_RESET 0x26 188#define VC0706_COMMAND_GEN_VERSION 0x11 189#define VC0706_COMMAND_TV_OUT_CTRL 0x44 190#define VC0706_COMMAND_OSD_ADD_CHAR 0x45 191#define VC0706_COMMAND_DOWNSIZE_SIZE 0x53 192#define VC0706_COMMAND_READ_FBUF 0x32 193#define FBUF_CURRENT_FRAME 0 194#define FBUF_NEXT_FRAME 0 195#define VC0706_COMMAND_FBUF_CTRL 0x36 196#define VC0706_COMMAND_COMM_MOTION_CTRL 0x37 197#define VC0706_COMMAND_COMM_MOTION_DETECTED 0x39 198#define VC0706_COMMAND_POWER_SAVE_CTRL 0x3E 199#define VC0706_COMMAND_COLOR_CTRL 0x3C 200#define VC0706_COMMAND_MOTION_CTRL 0x42 201#define VC0706_COMMAND_WRITE_DATA 0x31 202#define VC0706_COMMAND_GET_FBUF_LEN 0x34 203#define READ_DATA_BLOCK_NO 56 204unsigned char tx_counter; 205unsigned char tx_vcbuffer[20]; 206bool tx_ready; 207bool rx_ready; 208unsigned char rx_counter; 209unsigned char VC0706_rx_buffer[80]; 210uint32_t frame_length = 0; 211uint32_t vc_frame_address = 0; 212uint32_t last_data_length = 0; 213// one Integer Variable to count for photo 214// increase if you have difficulties conenctiong 215// but it then will refresh less often 216int waitForPhoto = 4; 217int waitCount; 218////////////////////// 219void setup() { 220 // reset w5100 221 pinMode(10, OUTPUT); 222 digitalWrite(10, HIGH); 223 // open Serial2 connection to the camera 224 Serial2.begin(115200); 225 // set the jpeg compression of the camera 226 // smaller number means smaller file, but less quality 227 VC0706_compression_ratio(15); 228 delay(100); 229 pinMode(SDCARD_CS, OUTPUT); 230 Sd2Card card; 231 card.init(SPI_FULL_SPEED, SDCARD_CS); 232 if (!SD.begin(SDCARD_CS)) { 233 rsetFunc(); 234 } 235 // start the Ethernet connection and the server: 236 Ethernet.begin(mac, ip); 237 server.begin(); 238 // put your setup code here, to run once: 239 TFT_BL_ON; 240 Tft.TFTinit(); 241 setSyncProvider(RTC.get); 242 page = 1; 243 monthnow = month(); 244 yearnow = year(); 245 minutenow = minute(); 246 hournow = hour(); 247 npage = 1; 248 humidmin = 50.00; 249 dht.begin(); 250 sensor_hr1.begin(); 251 sensor_hr2.begin(); 252 TimeLord tardis; 253 tardis.TimeZone(0); 254 tardis.Position(LATITUDE, LONGITUDE); 255 // pins 256 pinMode(dnlamp, OUTPUT); 257 pinMode(fogger, OUTPUT); 258 pinMode(hlamp, OUTPUT); 259 pinMode(hrock1, OUTPUT); 260 pinMode(hrock2, OUTPUT); 261 pinMode(fan, OUTPUT); 262 pinMode(foggerwater, INPUT); 263 myDoc = "daynow.txt"; 264 readsd(); 265 daynow = myData.toInt(); 266 myDoc = "hd.txt"; 267 readsd(); 268 humidday = myData.toInt(); 269 myDoc = "hs.txt"; 270 readsd(); 271 humidminset = myData.toFloat(); 272 myDoc = "atd.txt"; 273 readsd(); 274 ambitempday = myData.toInt(); 275 myDoc = "atdset.txt"; 276 readsd(); 277 hkdaytempdisp = myData.toFloat(); 278 myDoc = "atn.txt"; 279 readsd(); 280 ambitempnight = myData.toInt(); 281 myDoc = "atnset.txt"; 282 readsd(); 283 hknighttempdisp = myData.toFloat(); 284 myDoc = "ssetday.txt"; 285 readsd(); 286 ssday = myData.toInt(); 287 myDoc = "sriseday.txt"; 288 readsd(); 289 srday = myData.toInt(); 290 myDoc = "ssetmin.txt"; 291 readsd(); 292 ssminutesetdisp = myData.toInt(); 293 myDoc = "srisemin.txt"; 294 readsd(); 295 srminutesetdisp = myData.toInt(); 296 myDoc = "sriseh.txt"; 297 readsd(); 298 srhoursetdisp = myData.toInt(); 299 myDoc = "ssethour.txt"; 300 readsd(); 301 sshoursetdisp = myData.toInt(); 302} 303////////////////////// 304void loop() { 305 // put your main code here, to run repeatedly: 306 TimeLord tardis; 307 tardis.DstRules(3, 2, 11, 1, 60); 308 if (firsttimeon == 1) { 309 tardis.TimeZone(-5 * 60); 310 tardis.Position(LATITUDE, LONGITUDE); 311 dlstime[5] = (year() - 2000); 312 dlstime[4] = month(); 313 dlstime[3] = day(); 314 dlstime[2] = hour(); 315 dlstime[1] = minute(); 316 tardis.DST(dlstime); 317 firsttimeon = 0; 318 } 319 // count down for photo time 320 waitCount = waitCount - 1; 321 if (waitCount < 2) { 322 capture_photo("live.jpg"); 323 waitCount = waitForPhoto; 324 } 325 // Create a client connection 326 EthernetClient client = server.available(); 327 if (client) { 328 int pos = 0; 329 char clientReq[100]; 330 while (client.connected()) { 331 if (client.available()) { 332 // read what the client is requesting 333 char c = client.read(); 334 if (c != '\n' && c != '\r') { 335 clientReq[pos] = c; 336 pos++; 337 if (pos >= 100) pos = 99; // dont let the buffer overflow... 338 continue; 339 } 340 // send a jpeg file or send html to display files 341 // if there is a character after the 'GET /' request 342 // send the jpeg file 343 if ( clientReq[5] != ' ' ) { 344 // ###### FIND OUT WHICH FILE THE CLIENT REQUEST HERE !!! 345 File myFile = SD.open("live.jpg"); 346 // try to open file 347 // if successfull, send header and jpeg data 348 if (myFile) { 349 client.println("HTTP/1.1 200 OK"); 350 client.println("Content-Type: image/jpg"); 351 client.println(); 352 byte clientBuf[64]; 353 int clientCount = 0; 354 while (myFile.available()) 355 { 356 clientBuf[clientCount] = myFile.read(); 357 clientCount++; 358 if (clientCount > 63) { 359 client.write(clientBuf, 64); 360 clientCount = 0; 361 } 362 } 363 if (clientCount > 0) { 364 client.write(clientBuf, clientCount); 365 } 366 myFile.close(); 367 } 368 } else { 369 // there is no character after the 'GET /' 370 // send HTML site 371 client.println("HTTP/1.1 200 OK"); 372 client.println("Content-Type: text/html"); 373 client.println("Connection: close"); 374 client.println("Refresh: 2"); 375 client.println(); 376 client.println("<!DOCTYPE HTML>"); 377 client.println("<html>"); 378 client.print("Harold & Kumar's Enclosure"); 379 client.println("<br />"); 380 client.print(dayStr(weekday(now()))); 381 client.print(", "); 382 client.print(monthStr(dlstime[4])); 383 client.print(" "); 384 client.print(dlstime[3]); 385 client.print(", "); 386 client.print(year()); 387 client.print(" at "); 388 if (dlstime[2] < 10) { 389 client.print("0"); 390 } 391 client.print(dlstime[2]); 392 client.print(":"); 393 if (minute() < 10) { 394 client.print("0"); 395 } 396 client.print(minute()); 397 client.print(":"); 398 if (second() < 10) { 399 client.print("0"); 400 } 401 client.print(second()); 402 client.println("<br />"); 403 client.println("<br />"); 404 client.print("Room Temperature = "); 405 client.print(roomtemp); 406 client.print(" "); 407 client.print(char(176)); 408 client.print("F"); 409 client.println("<br />"); 410 client.println("<br />"); 411 client.print("Ambient Temperature = "); 412 client.print(ambitempdisp); 413 client.print(" "); 414 client.print(char(176)); 415 client.print("F"); 416 client.println("<br />"); 417 client.print(" Range = "); 418 if (night == 0) { 419 client.print(hkdaytempdisp - .5); 420 } else { 421 client.print(hknighttempdisp - .5); 422 } 423 client.print(" "); 424 client.print(char(176)); 425 client.print("F - "); 426 if (night == 0) { 427 client.print(hkdaytempdisp + .5); 428 } else { 429 client.print(hknighttempdisp + .5); 430 } 431 client.print(" "); 432 client.print(char(176)); 433 client.print("F "); 434 if (night == 0 && ambitempday > 0) { 435 client.print("For "); 436 client.print(ambitempday); 437 client.print(" Day(s)"); 438 } 439 if (night == 1 && ambitempnight > 0) { 440 client.print(" For "); 441 client.print(ambitempnight); 442 client.print(" Day(s)"); 443 } 444 client.println("<br />"); 445 client.println("<br />"); 446 client.print("Basking Temperature = "); 447 client.print(hr1tempdisp); 448 client.print(" "); 449 client.print(char(176)); 450 client.print("F"); 451 client.println("<br />"); 452 client.print(" Range = "); 453 client.print(88); 454 client.print(" "); 455 client.print(char(176)); 456 client.print("F - "); 457 client.print(96); 458 client.print(" "); 459 client.print(char(176)); 460 client.print("F"); 461 client.println("<br />"); 462 client.println("<br />"); 463 client.print("Borrow Temperature = "); 464 client.print(hr2tempdisp); 465 client.print(" "); 466 client.print(char(176)); 467 client.print("F"); 468 client.println("<br />"); 469 client.print(" Range = "); 470 if (night == 0) { 471 client.print(hkdaytempdisp - .5); 472 } else { 473 client.print(hknighttempdisp - .5); 474 } 475 client.print(" "); 476 client.print(char(176)); 477 client.print("F - "); 478 if (night == 0) { 479 client.print(hkdaytempdisp + .5); 480 } else { 481 client.print(hknighttempdisp + .5); 482 } 483 client.print(" "); 484 client.print(char(176)); 485 client.print("F"); 486 if (night == 0 && ambitempday > 0) { 487 client.print(" For "); 488 client.print(ambitempday); 489 client.print(" Day(s)"); 490 } 491 if (night == 1 && ambitempnight > 0) { 492 client.print(" For "); 493 client.print(ambitempnight); 494 client.print(" Day(s)"); 495 } 496 client.println("<br />"); 497 client.println("<br />"); 498 client.print("Humidity = "); 499 client.print(humiddisp); 500 client.print("%"); 501 client.println("<br />"); 502 client.print(" Range = "); 503 client.print(humidminset); 504 client.print("% - "); 505 client.print(humidminset + 10); 506 client.print("% "); 507 if ( humidday > 0) { 508 client.print("For "); 509 client.print(humidday); 510 client.print(" Day(s)"); 511 } 512 client.println("<br />"); 513 client.println("<br />"); 514 client.print("Water Level = "); 515 if (digitalRead(foggerwater) == HIGH) { 516 client.print("Good"); 517 } else { 518 client.print("Fill Now!"); 519 } 520 client.println("<br />"); 521 client.print("Time = "); 522 if (night == 0) { 523 client.print("Day"); 524 } else { 525 client.print("Night"); 526 } 527 client.println("<br />"); 528 client.print("Sunrise Time = "); 529 if (srhoursetdisp < 10) { 530 client.print("0"); 531 } 532 client.print(srhoursetdisp); 533 client.print(":"); 534 if (srminutesetdisp < 10) { 535 client.print("0"); 536 } 537 client.print(srminutesetdisp); 538 if (srday > 0) { 539 client.print(" For "); 540 client.print(srday); 541 client.print(" Day(s)"); 542 } 543 client.println("<br />"); 544 client.print("Sunset Time = "); 545 if (sshoursetdisp < 10) { 546 client.print("0"); 547 } 548 client.print(sshoursetdisp); 549 client.print(":"); 550 if (ssminutesetdisp < 10) { 551 client.print("0"); 552 } 553 client.print(ssminutesetdisp); 554 if (ssday > 0) { 555 client.print(" For "); 556 client.print(ssday); 557 client.print(" Day(s)"); 558 } 559 client.println("<br />"); 560 client.println("<br />"); 561 client.print("Heat Lamp = "); 562 if (hlpwr == 1) { 563 client.print("ON"); 564 } else { 565 client.print("OFF"); 566 } 567 client.println("<br />"); 568 client.print("Fans = "); 569 if (fanpwr == 1) { 570 client.print("ON"); 571 } else { 572 client.print("OFF"); 573 } 574 client.println("<br />"); 575 client.print("Basking Rock = "); 576 if (hr1pwr == 1) { 577 client.print("ON"); 578 } else { 579 client.print("OFF"); 580 } 581 client.println("<br />"); 582 client.print("Borrow Rock = "); 583 if (hr2pwr == 1) { 584 client.print("ON"); 585 } else { 586 client.print("OFF"); 587 } 588 client.println("<br />"); 589 client.print("Fogger = "); 590 if (foggerpwr == 1) { 591 client.print("ON"); 592 } else { 593 client.print("OFF"); 594 } 595 client.println("<br />"); 596 client.println("<div align=center><img src='live.jpg' width='640' height='480'>"); 597 client.println("<p>"); 598 client.println("Live from Harold & Kumar</div>"); 599 client.println("</html>"); 600 } 601 delay(1); 602 //stopping client 603 client.stop(); 604 } 605 } 606 } 607 //new touch point 608 Point p = ts.getPoint(); 609 p.x = map(p.x, TS_MINX, TS_MAXX, 0, 240); 610 p.y = map(p.y, TS_MINY, TS_MAXY, 0, 320); 611 if (p.z > __PRESURE) { 612 // New Page 613 if ((p.x < 120) && (p.y > 40) && (p.y < 70)) { 614 if (page == 1) { 615 page = 2; 616 npage = 1; 617 } else { 618 page = 1; 619 npage = 1; 620 } 621 } 622 if ((p.x > 120) && (p.y > 40) && (p.y < 70)) { 623 if (page > 2) { 624 page = 2; 625 npage = 1; 626 } else { 627 page = 3; 628 npage = 1; 629 } 630 } 631 if ((p.x < 120) && (p.y > 70) && (p.y < 100)) { 632 if (page > 3) { 633 page = 3; 634 npage = 1; 635 } else { 636 page = 4; 637 npage = 1; 638 } 639 } 640 if ((p.x > 120) && (p.y > 70) && (p.y < 100)) { 641 if (page == 5) { 642 page = 4; 643 npage = 1; 644 } else { 645 page = 5; 646 npage = 1; 647 } 648 } 649 if (page == 2) { 650 if ((p.x > 140) && (p.x < 170) && (p.y > 220) && (p.y < 250)) { //+ set 651 if (night == 1) { 652 if (dnchan == 0) { 653 hknighttempdisp = hknighttempdisp + .5; 654 Tft.fillRectangle(48, 230, 72, 15, BLACK); 655 Tft.drawFloat(hknighttempdisp, 48, 230, 2, CYAN); 656 if (ambitempnight == 0 ) { 657 ambitempnight = ambitempnight + 1; 658 Tft.fillRectangle(84, 270, 36, 15, BLACK); 659 Tft.drawNumber(ambitempnight, 84, 270, 2, CYAN); 660 } 661 } else { 662 hkdaytempdisp = hkdaytempdisp + .5; 663 Tft.fillRectangle(48, 230, 72, 15, BLACK); 664 Tft.drawFloat(hkdaytempdisp, 48, 230, 2, CYAN); 665 if (ambitempday == 0 ) { 666 ambitempday = ambitempday + 1; 667 Tft.fillRectangle(84, 270, 36, 15, BLACK); 668 Tft.drawNumber(ambitempday, 84, 270, 2, CYAN); 669 } 670 } 671 } else { 672 if (dnchan == 0) { 673 hkdaytempdisp = hkdaytempdisp + .5; 674 Tft.fillRectangle(48, 230, 72, 15, BLACK); 675 Tft.drawFloat(hkdaytempdisp, 48, 230, 2, CYAN); 676 if (ambitempday == 0 ) { 677 ambitempday = ambitempday + 1; 678 Tft.fillRectangle(84, 270, 36, 15, BLACK); 679 Tft.drawNumber(ambitempday, 84, 270, 2, CYAN); 680 } 681 } else { 682 hknighttempdisp = hknighttempdisp + .5; 683 Tft.fillRectangle(48, 230, 72, 15, BLACK); 684 Tft.drawFloat(hknighttempdisp, 48, 230, 2, CYAN); 685 if (ambitempnight == 0 ) { 686 ambitempnight = ambitempnight + 1; 687 Tft.fillRectangle(84, 270, 36, 15, BLACK); 688 Tft.drawNumber(ambitempnight, 84, 270, 2, CYAN); 689 } 690 } 691 } 692 } 693 if ((p.x > 200) && (p.x < 230) && (p.y > 220) && (p.y < 250)) { //- set 694 if (night == 1) { 695 if (dnchan == 0) { 696 hknighttempdisp = hknighttempdisp - .5; 697 Tft.fillRectangle(48, 230, 72, 15, BLACK); 698 Tft.drawFloat(hknighttempdisp, 48, 230, 2, CYAN); 699 if (ambitempnight == 0 ) { 700 ambitempnight = ambitempnight + 1; 701 Tft.fillRectangle(84, 270, 36, 15, BLACK); 702 Tft.drawNumber(ambitempnight, 84, 270, 2, CYAN); 703 } 704 } else { 705 hkdaytempdisp = hkdaytempdisp - .5; 706 Tft.fillRectangle(48, 230, 72, 15, BLACK); 707 Tft.drawFloat(hkdaytempdisp, 48, 230, 2, CYAN); 708 if (ambitempday == 0 ) { 709 ambitempday = ambitempday + 1; 710 Tft.fillRectangle(84, 270, 36, 15, BLACK); 711 Tft.drawNumber(ambitempday, 84, 270, 2, CYAN); 712 } 713 } 714 } else { 715 if (dnchan == 0) { 716 hkdaytempdisp = hkdaytempdisp * .5; 717 Tft.fillRectangle(48, 230, 72, 15, BLACK); 718 Tft.drawFloat(hkdaytempdisp, 48, 230, 2, CYAN); 719 if (ambitempday == 0 ) { 720 ambitempday = ambitempday + 1; 721 Tft.fillRectangle(84, 270, 36, 15, BLACK); 722 Tft.drawNumber(ambitempday, 84, 270, 2, CYAN); 723 } 724 } else { 725 hknighttempdisp = hknighttempdisp - .5; 726 Tft.fillRectangle(48, 230, 72, 15, BLACK); 727 Tft.drawFloat(hknighttempdisp, 48, 230, 2, CYAN); 728 if (ambitempnight == 0 ) { 729 ambitempnight = ambitempnight + 1; 730 Tft.fillRectangle(84, 270, 36, 15, BLACK); 731 Tft.drawNumber(ambitempnight, 84, 270, 2, CYAN); 732 } 733 } 734 } 735 } 736 if ((p.x > 140) && (p.x < 170) && (p.y > 260) && (p.y < 290)) { //+ day 737 if (night == 1) { 738 if (dnchan == 0) { 739 ambitempnight = ambitempnight + 1; 740 Tft.fillRectangle(84, 270, 36, 15, BLACK); 741 Tft.drawNumber(ambitempnight, 84, 270, 2, CYAN); 742 } else { 743 ambitempday = ambitempday + 1; 744 Tft.fillRectangle(84, 270, 36, 15, BLACK); 745 Tft.drawNumber(ambitempday, 84, 270, 2, CYAN); 746 } 747 } else { 748 if (dnchan == 0) { 749 ambitempday = ambitempday + 1; 750 Tft.fillRectangle(84, 270, 36, 15, BLACK); 751 Tft.drawNumber(ambitempday, 84, 270, 2, CYAN); 752 } else { 753 ambitempnight = ambitempnight + 1; 754 Tft.fillRectangle(84, 270, 36, 15, BLACK); 755 Tft.drawNumber(ambitempnight, 84, 270, 2, CYAN); 756 } 757 } 758 } 759 if ((p.x > 200) && (p.x < 230) && (p.y > 260) && (p.y < 290)) { //- day 760 if (night == 1) { 761 if (dnchan == 0) { 762 ambitempnight = ambitempnight - 1; 763 Tft.fillRectangle(84, 270, 36, 15, BLACK); 764 Tft.drawNumber(ambitempnight, 84, 270, 2, CYAN); 765 } else { 766 ambitempday = ambitempday - 1; 767 Tft.fillRectangle(84, 270, 36, 15, BLACK); 768 Tft.drawNumber(ambitempday, 84, 270, 2, CYAN); 769 } 770 } else { 771 if (dnchan == 0) { 772 ambitempday = ambitempday - 1; 773 Tft.fillRectangle(84, 270, 36, 15, BLACK); 774 Tft.drawNumber(ambitempday, 84, 270, 2, CYAN); 775 } else { 776 ambitempnight = ambitempnight - 1; 777 Tft.fillRectangle(84, 270, 36, 15, BLACK); 778 Tft.drawNumber(ambitempnight, 84, 270, 2, CYAN); 779 } 780 } 781 } 782 if ((p.x > 60) && (p.x < 180) && (p.y > 300) && (p.y < 330)) { 783 if (dnchan == 0) { 784 dnchan = 1; 785 } else { 786 dnchan = 0; 787 } 788 npage = 1; 789 } 790 } 791 if (page == 3) { 792 if ((p.x > 60) && (p.x < 90) && (p.y > 170) && (p.y < 200)) { //+ humidity 793 humidminset = humidminset + 1; 794 if (humidday == 0) { 795 humidday = 1; 796 Tft.fillRectangle(60, 210, 36, 15, BLACK); 797 Tft.drawNumber(humidday, 60, 210, 2, CYAN); 798 } 799 Tft.fillRectangle(72, 150, 60, 15, BLACK); 800 Tft.drawFloat(humidminset, 72, 150, 2, CYAN); 801 Tft.fillRectangle(146, 150, 60, 15, BLACK); 802 Tft.drawFloat(humidminset + 10, 146, 150, 2, CYAN); 803 } 804 if ((p.x > 120) && (p.x < 150) && (p.y > 170) && (p.y < 200)) { // - Humidity 805 humidminset = humidminset - 1; 806 if (humidday == 0) { 807 humidday = 1; 808 Tft.fillRectangle(60, 210, 36, 15, BLACK); 809 Tft.drawNumber(humidday, 60, 210, 2, CYAN); 810 } 811 Tft.fillRectangle(72, 150, 60, 15, BLACK); 812 Tft.drawFloat(humidminset, 72, 150, 2, CYAN); 813 Tft.fillRectangle(146, 150, 60, 15, BLACK); 814 Tft.drawFloat(humidminset + 10, 146, 150, 2, CYAN); 815 } 816 if ((p.x > 60) && (p.x < 90) && (p.y > 230) && (p.y < 260)) { // + humid day 817 humidday = humidday + 1; 818 Tft.fillRectangle(60, 210, 36, 15, BLACK); 819 Tft.drawNumber(humidday, 60, 210, 2, CYAN); 820 } 821 if ((p.x > 120) && (p.x < 150) && (p.y > 230) && (p.y < 260)) { // - humid day 822 humidday = humidday - 1; 823 if (humidday < 0) { 824 humidday = 0; 825 } 826 Tft.fillRectangle(60, 210, 36, 15, BLACK); 827 Tft.drawNumber(humidday, 60, 210, 2, CYAN); 828 } 829 } 830 if (page == 4) { 831 if ((p.x > 60) && (p.x < 90) && (p.y > 130) && (p.y < 160)) { // + min on sunrise 832 srminutesetdisp = srminutesetdisp + 1; 833 if (srminutesetdisp > 59) { 834 srminutesetdisp = 0; 835 srhoursetdisp = srhoursetdisp + 1; 836 if (srhoursetdisp > 24) { 837 srhoursetdisp = 0; 838 } 839 } 840 if (srday == 0) { 841 srday = 1; 842 Tft.fillRectangle(60, 170, 36, 15, BLACK); 843 Tft.drawNumber(srday, 60, 170, 2, CYAN); 844 } 845 Tft.fillRectangle(110, 110, 24, 15, BLACK); 846 if (srhoursetdisp > 9) { 847 Tft.drawNumber(srhoursetdisp, 110, 110, 2, CYAN); 848 } else { 849 Tft.drawNumber(0, 110, 110, 2, CYAN); 850 Tft.drawNumber(srhoursetdisp, 122, 110, 2, CYAN); 851 } 852 Tft.fillRectangle(146, 110, 24, 15, BLACK); 853 if (srminutesetdisp > 9) { 854 Tft.drawNumber(srminutesetdisp, 146, 110, 2, CYAN); 855 } else { 856 Tft.drawNumber(0, 146, 110, 2, CYAN); 857 Tft.drawNumber(srminutesetdisp, 158, 110, 2, CYAN); 858 } 859 } 860 if ((p.x > 120) && (p.x < 150) && (p.y > 130) && (p.y < 160)) { // - min on sunrise 861 srminutesetdisp = srminutesetdisp - 1; 862 if (srminutesetdisp < 0) { 863 srminutesetdisp = 59; 864 srhoursetdisp = srhoursetdisp - 1; 865 if (srhoursetdisp < 0) { 866 srhoursetdisp = 24; 867 } 868 } 869 if (srday == 0) { 870 srday = 1; 871 Tft.fillRectangle(60, 170, 36, 15, BLACK); 872 Tft.drawNumber(srday, 60, 170, 2, CYAN); 873 } 874 Tft.fillRectangle(110, 110, 24, 15, BLACK); 875 if (srhoursetdisp > 9) { 876 Tft.drawNumber(srhoursetdisp, 110, 110, 2, CYAN); 877 } else { 878 Tft.drawNumber(0, 110, 110, 2, CYAN); 879 Tft.drawNumber(srhoursetdisp, 122, 110, 2, CYAN); 880 } 881 Tft.fillRectangle(146, 110, 24, 15, BLACK); 882 if (srminutesetdisp > 9) { 883 Tft.drawNumber(srminutesetdisp, 146, 110, 2, CYAN); 884 } else { 885 Tft.drawNumber(0, 146, 110, 2, CYAN); 886 Tft.drawNumber(srminutesetdisp, 158, 110, 2, CYAN); 887 } 888 } 889 if ((p.x > 110) && (p.x < 140) && (p.y > 170) && (p.y < 200)) { // +day set for sunrise 890 srday = srday + 1; 891 Tft.fillRectangle(60, 170, 36, 15, BLACK); 892 Tft.drawNumber(srday, 60, 170, 2, CYAN); 893 } 894 if ((p.x > 170) && (p.x < 200) && (p.y > 170) && (p.y < 200)) { // - day set for sunrise 895 srday = srday - 1; 896 if (srday < 0) { 897 srday = 0; 898 } 899 Tft.fillRectangle(60, 170, 36, 15, BLACK); 900 Tft.drawNumber(srday, 60, 170, 2, CYAN); 901 } 902 if ((p.x > 60) && (p.x < 90) && (p.y > 230) && (p.y < 260)) { // + min sunset 903 ssminutesetdisp = ssminutesetdisp + 1; 904 if (ssminutesetdisp > 59) { 905 ssminutesetdisp = 0; 906 sshoursetdisp = sshoursetdisp + 1; 907 if (sshoursetdisp > 24) { 908 sshoursetdisp = 0; 909 } 910 } 911 if (ssday == 0) { 912 ssday = 1; 913 Tft.fillRectangle(60, 270, 36, 15, BLACK); 914 Tft.drawNumber(ssday, 60, 270, 2, CYAN); 915 } 916 Tft.fillRectangle(110, 210, 24, 15, BLACK); 917 if (sshoursetdisp > 9) { 918 Tft.drawNumber(sshoursetdisp, 110, 210, 2, CYAN); 919 } else { 920 Tft.drawNumber(0, 110, 210, 2, CYAN); 921 Tft.drawNumber(sshoursetdisp, 122, 210, 2, CYAN); 922 } 923 Tft.fillRectangle(146, 210, 24, 15, BLACK); 924 if (ssminutesetdisp > 9) { 925 Tft.drawNumber(ssminutesetdisp, 146, 210, 2, CYAN); 926 } else { 927 Tft.drawNumber(0, 146, 210, 2, CYAN); 928 Tft.drawNumber(ssminutesetdisp, 158, 210, 2, CYAN); 929 } 930 } 931 if ((p.x > 120) && (p.x < 150) && (p.y > 230) && (p.y < 260)) { //- min for sunset 932 ssminutesetdisp = ssminutesetdisp - 1; 933 if (ssminutesetdisp < 0) { 934 ssminutesetdisp = 59; 935 sshoursetdisp = sshoursetdisp - 1; 936 if (sshoursetdisp < 0) { 937 sshoursetdisp = 24; 938 } 939 } 940 if (ssday == 0) { 941 ssday = 1; 942 Tft.fillRectangle(60, 270, 36, 15, BLACK); 943 Tft.drawNumber(ssday, 60, 270, 2, CYAN); 944 } 945 Tft.fillRectangle(110, 210, 24, 15, BLACK); 946 if (sshoursetdisp > 9) { 947 Tft.drawNumber(sshoursetdisp, 110, 210, 2, CYAN); 948 } else { 949 Tft.drawNumber(0, 110, 210, 2, CYAN); 950 Tft.drawNumber(sshoursetdisp, 122, 210, 2, CYAN); 951 } 952 Tft.fillRectangle(146, 210, 24, 15, BLACK); 953 if (ssminutesetdisp > 9) { 954 Tft.drawNumber(ssminutesetdisp, 146, 210, 2, CYAN); 955 } else { 956 Tft.drawNumber(0, 146, 210, 2, CYAN); 957 Tft.drawNumber(ssminutesetdisp, 158, 210, 2, CYAN); 958 } 959 } 960 if ((p.x > 110) && (p.x < 140) && (p.y > 270) && (p.y < 300)) { //+ day for sunset 961 ssday = ssday + 1; 962 Tft.fillRectangle(60, 270, 36, 15, BLACK); 963 Tft.drawNumber(ssday, 60, 270, 2, CYAN); 964 } 965 if ((p.x > 170) && (p.x < 200) && (p.y > 270) && (p.y < 300)) { //- day set for sunset 966 ssday = ssday - 1; 967 if (ssday < 0) { 968 ssday = 0; 969 } 970 Tft.fillRectangle(60, 270, 36, 15, BLACK); 971 Tft.drawNumber(ssday, 60, 270, 2, CYAN); 972 } 973 } 974 tpage = minute() + 5; 975 if (tpage > 59) { 976 tpage = tpage - 60; 977 } 978 } 979 //page change 980 if (npage == 1) { 981 if (page == 1) { 982 allpage(); 983 pageone(); 984 } 985 if (page == 2) { 986 allpage(); 987 pagetwo(); 988 } 989 if (page == 3) { 990 allpage(); 991 pagethree(); 992 } 993 if (page == 4) { 994 allpage(); 995 pagefour(); 996 } 997 if (page == 5) { 998 allpage(); 999 pagefive(); 1000 } 1001 npage = 0; 1002 tpage = minute() + 5; 1003 if (tpage > 59) { 1004 tpage = tpage - 60; 1005 } 1006 } 1007 if (tpage == minute()) { 1008 page = page + 1; 1009 dnchan = 0; 1010 if (page > 5) { 1011 page = 1; 1012 } 1013 npage = 1; 1014 } 1015 //time change 1016 if (minutenow != minute()) { 1017 Tft.fillRectangle(56, 20, 25, 15, BLACK); 1018 if (minute() > 9) { 1019 Tft.drawNumber(minute(), 56, 20, 2, CYAN); 1020 } else { 1021 Tft.drawNumber(0, 56, 20, 2, CYAN); 1022 Tft.drawNumber(minute(), 68, 20, 2, CYAN); 1023 } 1024 minutenow = minute(); 1025 } 1026 if (daynow != day()) { 1027 settemp(); 1028 daynow = day(); 1029 //temp day - 1 1030 if (ambitempday > 0) { 1031 ambitempday = ambitempday - 1; 1032 } 1033 if (ambitempnight > 0) { 1034 ambitempnight = ambitempnight - 1; 1035 } 1036 //humid day - 1 1037 if (humidday > 0) { 1038 humidday = humidday - 1; 1039 } 1040 //SR/SS day - 1 1041 if (ssday > 0) { 1042 ssday = ssday - 1; 1043 } 1044 if (srday > 0) { 1045 srday = srday - 1; 1046 } 1047 } 1048 if (hournow != hour()) { 1049 dlstime[5] = (year() - 2000); 1050 dlstime[4] = month(); 1051 dlstime[3] = day(); 1052 dlstime[2] = hour(); 1053 tardis.DST(dlstime); 1054 Tft.fillRectangle(20, 20, 25, 15, BLACK); 1055 if (dlstime[2] > 9) { 1056 Tft.drawNumber(dlstime[2], 20, 20, 2, CYAN); 1057 } else { 1058 Tft.drawNumber(0, 20, 20, 2, CYAN); 1059 Tft.drawNumber(dlstime[2], 32, 20, 2, CYAN); 1060 Tft.fillRectangle(144, 20, 25, 15, BLACK); 1061 } 1062 if (day() > 9) { 1063 Tft.drawNumber(day(), 144, 20, 2, CYAN); 1064 } else { 1065 Tft.drawNumber(0, 144, 20, 2, CYAN); 1066 Tft.drawNumber(day(), 156, 20, 2, CYAN); 1067 } 1068 hournow = hour(); 1069 myDoc = "daynow.txt"; 1070 myData = String(daynow); 1071 writesd(); 1072 myDoc = "hd.txt"; 1073 myData = String(humidday); 1074 writesd(); 1075 myDoc = "hs.txt"; 1076 myData = String(humidminset); 1077 writesd(); 1078 myDoc = "atd.txt"; 1079 myData = String(ambitempday); 1080 writesd(); 1081 myDoc = "atdset.txt"; 1082 myData = String(hkdaytempdisp); 1083 writesd(); 1084 myDoc = "atn.txt"; 1085 myData = String(ambitempnight); 1086 writesd(); 1087 myDoc = "atnset.txt"; 1088 myData = String(hknighttempdisp); 1089 writesd(); 1090 myDoc = "ssetday.txt"; 1091 myData = String(ssday); 1092 writesd(); 1093 myDoc = "sriseday.txt"; 1094 myData = String(srday); 1095 writesd(); 1096 myDoc = "ssetmin.txt"; 1097 myData = String(ssminutesetdisp); 1098 writesd(); 1099 myDoc = "srisemin.txt"; 1100 myData = String(srminutesetdisp); 1101 writesd(); 1102 myDoc = "ssethour.txt"; 1103 myData = String(sshoursetdisp); 1104 writesd(); 1105 myDoc = "sriseh.txt"; 1106 myData = String(srhoursetdisp); 1107 writesd(); 1108 delay(10); 1109 rsetFunc(); 1110 } 1111 if (monthnow != month()) { 1112 Tft.fillRectangle(120, 20, 25, 15, BLACK); 1113 if (month() > 9) { 1114 Tft.drawNumber(month(), 108, 20, 2, CYAN); 1115 } else { 1116 Tft.drawNumber(0, 108, 20, 2, CYAN); 1117 Tft.drawNumber(month(), 120, 20, 2, CYAN); 1118 } 1119 monthnow = month(); 1120 } 1121 if (yearnow != year()) { 1122 Tft.fillRectangle(180, 20, 48, 15, BLACK); 1123 Tft.drawNumber(year(), 180, 20, 2, CYAN); 1124 yearnow = year(); 1125 } 1126 //ambient temp and humid 1127 ambitempcur = dht.readTemperature(true); 1128 if (ambitempcur != ambitempdisp) { 1129 ambitempdisp = ambitempcur; 1130 if (page == 2) { 1131 Tft.fillRectangle(0, 110, 72, 25, BLACK); 1132 Tft.drawFloat(ambitempdisp, 0, 115, 2, CYAN); 1133 } 1134 } 1135 humidcur = dht.readHumidity(); 1136 if (humidcur != humiddisp) { 1137 humiddisp = humidcur; 1138 if (page == 3) { 1139 Tft.fillRectangle(0, 110, 92, 30, BLACK); 1140 Tft.drawFloat(humiddisp, 0, 115, 3, CYAN); 1141 } 1142 } 1143 sensor_hr1.requestTemperatures(); 1144 hr1tempcur = 32 + (sensor_hr1.getTempCByIndex(0) * 1.8); 1145 if (hr1tempcur != hr1tempdisp) { 1146 hr1tempdisp = hr1tempcur; 1147 if (page == 2) { 1148 Tft.fillRectangle(0, 150, 72, 25, BLACK); 1149 Tft.drawFloat(hr1tempdisp, 0, 155, 2, CYAN - 8); 1150 } 1151 } 1152 roomtemp = (RTC.temperature() / 4) * 9 / 5 + 32; 1153 if (roomtemp != roomtempdisp) { 1154 roomtempdisp = roomtemp; 1155 if (page == 5) { 1156 Tft.fillRectangle(120, 255, 62, 25, BLACK); 1157 Tft.drawFloat(roomtempdisp, 120, 255, 2, CYAN); 1158 } 1159 } 1160 if ((hr1tempdisp < 88) && (hr1sen == 0)) { 1161 digitalWrite(hrock1, HIGH); 1162 if ((page == 5) && (hr1pwr == 0)) { 1163 Tft.fillRectangle(0, 223, 110, 12, GREEN); 1164 Tft.drawString("Heat Rock 1: ON", 0, 225, 1, BLACK); 1165 } 1166 hr1pwr = 1; 1167 } 1168 if ((hr1tempdisp > 96) || (hr1sen == 1)) { 1169 digitalWrite(hrock1, LOW); 1170 if ((page == 5) && (hr1pwr == 1)) { 1171 Tft.fillRectangle(0, 223, 110, 12, RED); 1172 Tft.drawString("Heat Rock 1: OFF", 0, 225, 1, CYAN); 1173 } 1174 hr1pwr = 0; 1175 } 1176 sensor_hr2.requestTemperatures(); 1177 hr2tempcur = 32 + (sensor_hr2.getTempCByIndex(0) * 1.8); 1178 if (hr2tempcur != hr2tempdisp) { 1179 hr2tempdisp = hr2tempcur; 1180 if (page == 2) { 1181 Tft.fillRectangle(0, 190, 72, 25, BLACK); 1182 Tft.drawFloat(hr2tempdisp, 0, 195, 2, CYAN); 1183 } 1184 } 1185 if (night == 1) { 1186 if ((hr2tempdisp < hknighttempdisp - .5) && (hr2sen == 0)) { 1187 digitalWrite(hrock2, HIGH); 1188 if ((page == 5) && (hr2pwr == 0)) { 1189 Tft.fillRectangle(115, 223, 110, 12, GREEN); 1190 Tft.drawString("Heat Rock 2: ON", 115, 225, 1, BLACK); 1191 } 1192 hr2pwr = 1; 1193 } 1194 if ((hr2tempdisp > hknighttempdisp + .5) || (hr2sen == 1)) { 1195 digitalWrite(hrock2, LOW); 1196 if ((page == 5) && (hr2pwr == 1)) { 1197 Tft.fillRectangle(115, 223, 110, 12, RED); 1198 Tft.drawString("Heat Rock 2: OFF", 115, 225, 1, CYAN); 1199 } 1200 hr2pwr = 0; 1201 } 1202 } else { 1203 if ((hr2tempdisp < hkdaytempdisp - .5) && (hr2sen == 0)) { 1204 digitalWrite(hrock2, HIGH); 1205 if ((page == 5) && (hr2pwr == 0)) { 1206 Tft.fillRectangle(115, 223, 110, 12, GREEN); 1207 Tft.drawString("Heat Rock 2: ON", 115, 225, 1, BLACK); 1208 } 1209 hr2pwr = 1; 1210 } 1211 if ((hr2tempdisp > hkdaytempdisp + .5) || (hr2sen == 1)) { 1212 digitalWrite(hrock2, LOW); 1213 if ((page == 5) && (hr2pwr == 1)) { 1214 Tft.fillRectangle(115, 223, 110, 12, RED); 1215 Tft.drawString("Heat Rock 2: OFF", 115, 225, 1, CYAN); 1216 } 1217 hr2pwr = 0; 1218 } 1219 } 1220 if (ambitempday == 0) { 1221 settemp(); 1222 if (hkdaytemp != hkdaytempdisp) { 1223 hkdaytempdisp = hkdaytemp; 1224 if ((page == 2) && (night == 0)) { 1225 Tft.fillRectangle(48, 230, 72, 30, BLACK); 1226 Tft.drawFloat(hkdaytempdisp, 48, 230, 2, CYAN); 1227 } 1228 } 1229 } 1230 if (ambitempnight == 0) { 1231 settemp(); 1232 if (hknighttemp != hknighttempdisp) { 1233 hknighttempdisp = hknighttemp; 1234 if ((page == 2) && (night == 1)) { 1235 Tft.fillRectangle(48, 230, 72, 30, BLACK); 1236 Tft.drawFloat(hknighttempdisp, 48, 230, 2, CYAN); 1237 } 1238 } 1239 } 1240 if (humidday == 0) { 1241 if ((page == 3) && (humidminset != humidmin)) { 1242 Tft.fillRectangle(72, 150, 60, 15, BLACK); 1243 Tft.fillRectangle(146, 150, 60, 15, BLACK); 1244 Tft.drawFloat (humidminset, 72, 150, 2, CYAN); 1245 Tft.drawFloat(humidminset + 10, 146, 150, 2, CYAN); 1246 } 1247 humidminset = humidmin; 1248 } 1249 if (ambithsen == 0) { 1250 if (night == 0) { 1251 if (ambitempdisp < (hkdaytempdisp - .5)) { 1252 digitalWrite(hlamp, HIGH); 1253 if ((page == 5) && (hlpwr == 0)) { 1254 Tft.fillRectangle(0, 208, 110, 12, GREEN); 1255 Tft.drawString("Heat Lamp: ON", 0, 210, 1, BLACK); 1256 } 1257 hlpwr = 1; 1258 } 1259 if (ambitempdisp > (hkdaytempdisp + .5)) { 1260 digitalWrite(hlamp, LOW); 1261 if ((page == 5) && (hlpwr == 1)) { 1262 Tft.fillRectangle(0, 208, 110, 12, RED); 1263 Tft.drawString("Heat Lamp: OFF", 0, 210, 1, CYAN); 1264 } 1265 hlpwr = 0; 1266 } 1267 if (ambitempdisp < (hkdaytempdisp + 2)) { 1268 digitalWrite(fan, LOW); 1269 if ((page == 5) && (fanpwr == 1)) { 1270 Tft.fillRectangle(115, 208, 110, 12, RED); 1271 Tft.drawString("Fan: OFF", 115, 210, 1, CYAN); 1272 } 1273 fanpwr = 0; 1274 } 1275 if (ambitempdisp > (hkdaytempdisp + 5)) { 1276 digitalWrite(fan, HIGH); 1277 if ((page == 5) && (fanpwr == 0)) { 1278 Tft.fillRectangle(115, 208, 110, 12, GREEN); 1279 Tft.drawString("Fan: ON", 115, 210, 1, BLACK); 1280 } 1281 fanpwr = 1; 1282 } 1283 } else { 1284 if (ambitempdisp < (hknighttempdisp - .5)) { 1285 digitalWrite(hlamp, HIGH); 1286 if ((page == 5) && (hlpwr == 0)) { 1287 Tft.fillRectangle(0, 208, 110, 12, GREEN); 1288 Tft.drawString("Heat Lamp: ON", 0, 210, 1, BLACK); 1289 } 1290 hlpwr = 1; 1291 } 1292 if (ambitempdisp > (hknighttempdisp + .5)) { 1293 digitalWrite(hlamp, LOW); 1294 if ((page == 5) && (hlpwr == 1)) { 1295 Tft.fillRectangle(0, 208, 110, 12, RED); 1296 Tft.drawString("Heat Lamp: OFF", 0, 210, 1, CYAN); 1297 } 1298 hlpwr = 0; 1299 } 1300 if (ambitempdisp < (hknighttempdisp + 2)) { 1301 digitalWrite(fan, LOW); 1302 if ((page == 5) && (fanpwr == 1)) { 1303 Tft.fillRectangle(115, 208, 110, 12, RED); 1304 Tft.drawString("Fan: OFF", 115, 210, 1, CYAN); 1305 } 1306 fanpwr = 0; 1307 } 1308 if (ambitempdisp > (hknighttempdisp + 5)) { 1309 digitalWrite(fan, HIGH); 1310 if ((page == 5) && (fanpwr == 0)) { 1311 Tft.fillRectangle(115, 208, 110, 12, GREEN); 1312 Tft.drawString("Fan: ON", 115, 210, 1, BLACK); 1313 } 1314 fanpwr = 1; 1315 } 1316 } 1317 if ((humiddisp < humidminset) && (fanpwr == 0) && (foggersen == 0)) { 1318 digitalWrite(fogger, HIGH); 1319 if ((page == 5) && (foggerpwr == 0)) { 1320 Tft.fillRectangle(0, 238, 110, 12, GREEN); 1321 Tft.drawString("Fogger: ON", 0 1322 , 240, 1, BLACK); 1323 } 1324 foggerpwr = 1; 1325 } 1326 if ((humiddisp > (humidminset + 10)) || (fanpwr == 1) || (foggersen == 1)) { 1327 digitalWrite(fogger, LOW); 1328 if ((page == 5) && (foggerpwr == 1)) { 1329 Tft.fillRectangle(0, 238, 110, 12, RED); 1330 Tft.drawString("Fogger: OFF", 0, 240, 1, CYAN); 1331 } 1332 foggerpwr = 0; 1333 } 1334 } else { 1335 digitalWrite(hlamp, LOW); 1336 digitalWrite(fogger, LOW); 1337 if ((page == 5) && ((hlpwr == 1) || (foggerpwr == 1))) { 1338 Tft.fillRectangle(0, 208, 110, 12, RED); 1339 Tft.drawString("Heat Lamp: OFF", 0, 210, 1, CYAN); 1340 Tft.fillRectangle(115, 238, 110, 12, RED); 1341 Tft.drawString("Fogger: OFF", 115, 240, 1, CYAN); 1342 } 1343 foggerpwr = 0; 1344 hlpwr = 0; 1345 } 1346 //light cycle set 1347 if (srday == 0) { 1348 todaysr[3] = day(); 1349 todaysr[4] = month(); 1350 todaysr[5] = year(); 1351 tardis.SunRise(todaysr); 1352 tardis.DST(todaysr); 1353 srhourset = todaysr[2]; 1354 srminuteset = todaysr[1]; 1355 if (page == 4) { 1356 if (srhoursetdisp != srhourset) { 1357 Tft.fillRectangle(110, 110, 25, 14, BLACK); 1358 if (srhourset > 9) { 1359 Tft.drawNumber(srhourset, 110, 110, 2, CYAN); 1360 } else { 1361 Tft.drawNumber(0, 110, 110, 2, CYAN); 1362 Tft.drawNumber(srhourset, 122, 110, 2, CYAN); 1363 } 1364 } 1365 if (srminutesetdisp != srminuteset) { 1366 Tft.fillRectangle(146, 110, 25, 14, BLACK); 1367 if (srminuteset > 9) { 1368 Tft.drawNumber(srminuteset, 146, 110, 2, CYAN); 1369 } else { 1370 Tft.drawNumber(0, 146, 110, 2, CYAN); 1371 Tft.drawNumber(srminuteset, 158, 110, 2, CYAN); 1372 } 1373 } 1374 } 1375 srhoursetdisp = srhourset; 1376 srminutesetdisp = srminuteset; 1377 } 1378 if (ssday == 0) { 1379 todayss[3] = day(); 1380 todayss[4] = month(); 1381 todayss[5] = year(); 1382 tardis.SunSet(todayss); 1383 tardis.DST(todayss); 1384 sshourset = todayss[2]; 1385 ssminuteset = todayss[1]; 1386 if (page == 4) { 1387 if (sshoursetdisp != sshourset) { 1388 Tft.fillRectangle(110, 210, 25, 14, BLACK); 1389 if (sshourset > 9) { 1390 Tft.drawNumber(sshourset, 110, 210, 2, CYAN); 1391 } else { 1392 Tft.drawNumber(0, 110, 210, 2, CYAN); 1393 Tft.drawNumber(sshourset, 122, 210, 2, CYAN); 1394 } 1395 } 1396 if (ssminutesetdisp != ssminuteset) { 1397 Tft.fillRectangle(146, 210, 25, 14, BLACK); 1398 if (ssminuteset > 9) { 1399 Tft.drawNumber(ssminuteset, 146, 210, 2, CYAN); 1400 } else { 1401 Tft.drawNumber(0, 146, 210, 2, CYAN); 1402 Tft.drawNumber(ssminuteset, 158, 210, 2, CYAN); 1403 } 1404 } 1405 } 1406 sshoursetdisp = sshourset; 1407 ssminutesetdisp = ssminuteset; 1408 } 1409 timenow = (100 * dlstime[2]) + dlstime[1]; 1410 timesr = (100 * srhoursetdisp) + srminutesetdisp; 1411 timess = (100 * sshoursetdisp) + ssminutesetdisp; 1412 if ((timenow > timesr) && (timenow < timess)) { 1413 night = 0; 1414 digitalWrite(dnlamp, HIGH); 1415 if ((page == 5) && (dlpwr == 0)) { 1416 Tft.fillRectangle(0, 193, 110, 12, GREEN); 1417 Tft.drawString("Day Light: ON", 0, 195, 1, BLACK); 1418 Tft.fillRectangle(115, 193, 110, 12, RED); 1419 Tft.drawString("Night Light: OFF", 115, 195, 1, CYAN); 1420 } 1421 dlpwr = 1; 1422 } else { 1423 night = 1; 1424 digitalWrite(dnlamp, LOW); 1425 if ((page == 5) && (dlpwr == 1)) { 1426 Tft.fillRectangle(0, 193, 110, 12, RED); 1427 Tft.drawString("Day Light: OFF", 0, 195, 1, CYAN); 1428 Tft.fillRectangle(115, 193, 110, 12, GREEN); 1429 Tft.drawString("Night Light: ON", 115, 195, 1, BLACK); 1430 } 1431 dlpwr = 0; 1432 } 1433 //water level low or high 1434 if (digitalRead(foggerwater) == HIGH) { 1435 if ((page == 5) && (foggersen == 1)) { 1436 Tft.fillRectangle(135, 128, 130, 12, GREEN); 1437 Tft.drawString("Water Level: GOOD", 135, 130, 1, BLACK); 1438 Tft.fillRectangle(0, 238, 110, 12, GREEN); 1439 Tft.drawString("Water Level OK", 0, 240, 1, BLACK); 1440 } 1441 foggersen = 0; 1442 } else { 1443 if ((page == 5) && (foggersen == 0)) { 1444 Tft.fillRectangle(135, 128, 130, 12, RED); 1445 Tft.drawString("Water Level: LOW", 135, 130, 1, CYAN); 1446 Tft.fillRectangle(0, 238, 110, 12, RED); 1447 Tft.drawString("Fill Fogger", 0, 240, 1, CYAN); 1448 } 1449 foggersen = 1; 1450 } 1451 //sensor quality check 1452 if ((isnan(dht.readTemperature(true))) || (isnan(dht.readHumidity()))) { 1453 if ((ambithsen == 0) && (page == 5)) { 1454 Tft.fillRectangle(0, 128, 130, 12, RED); 1455 Tft.drawString("Ambient Temp: BAD", 0, 130, 1, CYAN); 1456 } 1457 ambithsen = 1; 1458 } else { 1459 if ((ambithsen == 1) && (page == 5)) { 1460 Tft.fillRectangle(0, 128, 130, 12, GREEN); 1461 Tft.drawString("Ambient Temp: GOOD", 0, 130, 1, BLACK); 1462 } 1463 ambithsen = 0; 1464 } 1465 if ( hr1tempdisp < -196) { 1466 if ((hr1sen == 0) && (page == 5)) { 1467 Tft.fillRectangle(0, 143, 130, 12, RED); 1468 Tft.drawString("Heatrock 1 Temp: BAD", 0, 145, 1, CYAN); 1469 } 1470 hr1sen = 1; 1471 } else { 1472 if ((hr1sen == 1) && (page == 5)) { 1473 Tft.fillRectangle(0, 143, 130, 12, GREEN); 1474 Tft.drawString("Heatrock 1 Temp: GOOD", 0, 145, 1, BLACK); 1475 } 1476 hr1sen = 0; 1477 } 1478 if (hr2tempdisp < -196) { 1479 if ((hr2sen == 0) && (page == 5)) { 1480 Tft.fillRectangle(0, 158, 130, 12, RED); 1481 Tft.drawString("Heatrock 2 Temp: BAD", 0, 160, 1, CYAN); 1482 } 1483 hr2sen = 1; 1484 } else { 1485 if ((hr2sen == 1) && (page == 5)) { 1486 Tft.fillRectangle(0, 158, 130, 12, GREEN); 1487 Tft.drawString("Heatrock 2 Temp: GOOD", 0, 160, 1, BLACK); 1488 } 1489 hr2sen = 0; 1490 } 1491} 1492////////////////////// 1493void settemp() { 1494 if (month() == 1) { 1495 hkdaytemp = 82.17647059 + (day() * -0.125237192); 1496 hknighttemp = 69.28571429 + (day() * -0.061443932); 1497 } 1498 if (month() == 2) { 1499 hkdaytemp = 78.29411765 + (day() * -0.046218487); 1500 hknighttemp = 67.38095238 + (day() * -0.013605442); 1501 }//end of day/night temps 1502 if (month() == 3) { 1503 hkdaytemp = 77 + (day() * 0.146110057); 1504 hknighttemp = 67 + (day() * 0.061443932); 1505 } 1506 if (month() == 4) { 1507 hkdaytemp = 81.52941176 + (day() * 0.129411765); 1508 hknighttemp = 68.9047619 + (day() * 0.088888889); 1509 } 1510 if (month() == 5) { 1511 hkdaytemp = 85.41176471 + (day() * 0.083491461); 1512 hknighttemp = 71.57142857 + (day() * 0.086021505); 1513 } 1514 if (month() == 6) { 1515 hkdaytemp = 88 + (day() * -0.021568627); 1516 hknighttemp = 74.23809524 + (day() * 0.025396825); 1517 } 1518 if (month() == 7) { 1519 hkdaytemp = 87.35294118 + (day() * -0.104364326); 1520 hknighttemp = 75 + (day() * -0.049155146); 1521 } 1522 if (month() == 8) { 1523 hkdaytemp = 84.11764706 + (day() * -0.146110057); 1524 hknighttemp = 73.47619048 + (day() * -0.036866359); 1525 } 1526 if (month() == 9) { 1527 hkdaytemp = 79.58823529 + (day() * -0.064705882); 1528 hknighttemp = 72.33333333 + (day() * -0.025396825); 1529 } 1530 if (month() == 10) { 1531 hkdaytemp = 77.64705882 + (day() * 0.083491461); 1532 hknighttemp = 71.57142857 + (day() * 0.012288786); 1533 } 1534 if (month() == 11) { 1535 hkdaytemp = 80.23529412 + (day() * 0.107843137); 1536 hknighttemp = 71.95238095 + (day() * 0.012698413); 1537 } 1538 if (month() == 12) { 1539 hkdaytemp = 83.47058824 + (day() * -0.041745731); 1540 hknighttemp = 72.33333333 + (day() * -0.098310292); 1541 } 1542 return hkdaytemp, hknighttemp; 1543} 1544////////////////////// 1545void allpage() { 1546 Tft.fillScreen(0, 240, 0, 320, BLACK); 1547 Tft.drawString("Harold & Kumar", 0, 0, 2, CYAN); 1548 if (dlstime[2] > 9) { 1549 Tft.drawNumber(dlstime[2], 20, 20, 2, CYAN); 1550 } else { 1551 Tft.drawNumber(0, 20, 20, 2, CYAN); 1552 Tft.drawNumber(dlstime[2], 32, 20, 2, CYAN); 1553 } 1554 Tft.drawChar(':', 44, 20, 2, CYAN); 1555 if (minute() > 9) { 1556 Tft.drawNumber(minute(), 56, 20, 2, CYAN); 1557 } else { 1558 Tft.drawNumber(0, 56, 20, 2, CYAN); 1559 Tft.drawNumber(minute(), 68, 20, 2, CYAN); 1560 } 1561 if (month() > 9) { 1562 Tft.drawNumber(month(), 108, 20, 2, CYAN); 1563 } else { 1564 Tft.drawNumber(0, 108, 20, 2, CYAN); 1565 Tft.drawNumber(month(), 120, 20, 2, CYAN); 1566 } 1567 Tft.drawChar('/', 132, 20, 2, CYAN); 1568 if (day() > 9) { 1569 Tft.drawNumber(day(), 144, 20, 2, CYAN); 1570 } else { 1571 Tft.drawNumber(0, 144, 20, 2, CYAN); 1572 Tft.drawNumber(day(), 156, 20, 2, CYAN); 1573 } 1574 Tft.drawChar('/', 168, 20, 2, CYAN); 1575 Tft.drawNumber(year(), 180, 20, 2, CYAN); 1576 Tft.drawRectangle(0, 40, 120, 30, CYAN); 1577 Tft.drawRectangle(0, 70, 120, 30, CYAN); 1578 Tft.drawRectangle(120, 40, 120, 30, CYAN); 1579 Tft.drawRectangle(120, 70, 120, 30, CYAN); 1580 return; 1581} 1582////////////////////// 1583void pageone() { //Main 1584 Tft.fillRectangle(180, 0, 61, 15, BLACK); 1585 Tft.drawString("Main", 180, 0, 2, CYAN); 1586 Tft.drawString("Temperature", 24, 50, 1, CYAN); 1587 Tft.drawString("Light Cycle", 24, 80, 1, CYAN); 1588 Tft.drawString("Humidity", 144, 50, 1, CYAN); 1589 Tft.drawString("Settings", 144, 80, 1, CYAN); 1590 Tft.drawString("Harold & Kumar", 0, 110, 2, CYAN); 1591 Tft.drawString("Python Regius", 0, 140, 2, CYAN); 1592 Tft.drawString("Ball or Royal Python", 0, 170, 2, CYAN); 1593 Tft.drawString("Native Countries:", 0, 200, 2, CYAN); 1594 Tft.drawString("Niger, Chad, Guinea, Sierra Leone,", 0, 220, 1, CYAN); 1595 Tft.drawString("Liberia, Ivory Coast, Ghana, Togo,", 0, 235, 1, CYAN); 1596 Tft.drawString("Burkina Faso, Nigeria,", 0, 250, 1, CYAN); 1597 Tft.drawString("Benin and Cameroon", 0, 265, 1, CYAN); 1598 return; 1599} 1600////////////////////// 1601void pagetwo() { //Temperature 1602 Tft.fillRectangle(180, 0, 61, 15, BLACK); 1603 Tft.drawString("Temp", 180, 0, 2, CYAN); 1604 Tft.drawString("Main", 24, 50, 1, CYAN); 1605 Tft.drawString("Light Cycle", 24, 80, 1, CYAN); 1606 Tft.drawString("Humidity", 144, 50, 1, CYAN); 1607 Tft.drawString("Settings", 144, 80, 1, CYAN); 1608 Tft.drawFloat(ambitempdisp, 0, 115, 2, CYAN); 1609 Tft.drawChar('o', 85, 110, 1, CYAN); 1610 Tft.drawChar('F', 89, 110, 3, CYAN); 1611 Tft.drawString("Ambient", 110, 110, 3, CYAN); 1612 Tft.drawFloat(hr1tempdisp, 0, 155, 2, CYAN); 1613 Tft.drawChar('o', 85, 150, 1, CYAN); 1614 Tft.drawChar('F', 89, 150, 3, CYAN); 1615 Tft.drawString("Basking", 110, 150, 3, CYAN); 1616 Tft.drawFloat(hr2tempdisp, 0, 195, 2, CYAN); 1617 Tft.drawChar('o', 85, 190, 1, CYAN); 1618 Tft.drawChar('F', 89, 190, 3, CYAN); 1619 Tft.drawString("Burrow", 110, 190, 3, CYAN); 1620 Tft.drawString("Set", 0, 230, 2, CYAN); 1621 Tft.drawChar('o', 120, 230, 1, CYAN); 1622 Tft.drawChar('F', 125, 230, 2, CYAN); 1623 Tft.drawRectangle(140, 220, 30, 30, CYAN); 1624 Tft.drawChar('+', 148, 228, 2, CYAN); 1625 Tft.drawRectangle(200, 220, 30, 30, CYAN); 1626 Tft.drawChar('-', 208, 228, 2, CYAN); 1627 if (dnchan == 0) { 1628 if (night == 1) { 1629 Tft.drawString("Nights", 0, 270, 2, CYAN); 1630 Tft.drawNumber(ambitempnight, 84, 270, 2, CYAN); 1631 Tft.drawFloat(hknighttempdisp, 48, 230, 2, CYAN); 1632 } else { 1633 Tft.drawString("Days", 0, 270, 2, CYAN); 1634 Tft.drawNumber(ambitempday, 84, 270, 2, CYAN); 1635 Tft.drawFloat(hkdaytempdisp, 48, 230, 2, CYAN); 1636 } 1637 } else { 1638 if (night == 0) { 1639 Tft.drawString("Nights", 0, 270, 2, CYAN); 1640 Tft.drawNumber(ambitempnight, 84, 270, 2, CYAN); 1641 Tft.drawFloat(hknighttempdisp, 48, 230, 2, CYAN); 1642 } else { 1643 Tft.drawString("Days", 0, 270, 2, CYAN); 1644 Tft.drawNumber(ambitempday, 84, 270, 2, CYAN); 1645 Tft.drawFloat(hkdaytempdisp, 48, 230, 2, CYAN); 1646 } 1647 } 1648 Tft.drawRectangle(140, 260, 30, 30, CYAN); 1649 Tft.drawChar('+', 148, 268, 2, CYAN); 1650 Tft.drawRectangle(200, 260, 30, 30, CYAN); 1651 Tft.drawChar('-', 208, 268, 2, CYAN); 1652 Tft.drawRectangle(60, 300, 120, 30, CYAN); 1653 Tft.drawString("Switch", 105, 304, 1, CYAN); 1654 return; 1655} 1656////////////////////// 1657void pagethree() { //Humidity 1658 Tft.fillRectangle(180, 0, 61, 15, BLACK); 1659 Tft.drawString("Humid", 180, 0, 2, CYAN); 1660 Tft.drawString("Main", 24, 50, 1, CYAN); 1661 Tft.drawString("Light Cycle", 24, 80, 1, CYAN); 1662 Tft.drawString("Temperature", 144, 50, 1, CYAN); 1663 Tft.drawString("Settings", 144, 80, 1, CYAN); 1664 Tft.drawFloat(humiddisp, 0, 115, 3, CYAN); 1665 Tft.drawChar('O', 147, 113, 1, CYAN); 1666 Tft.drawChar('/', 144, 110, 4, CYAN); 1667 Tft.drawChar('O', 162, 128, 1, CYAN); 1668 Tft.drawString("Range", 0, 150, 2, CYAN); 1669 Tft.drawFloat (humidminset, 72, 150, 2, CYAN); 1670 Tft.drawChar('-', 133, 150, 2, CYAN); 1671 Tft.drawFloat(humidminset + 10, 146, 150, 2, CYAN); 1672 Tft.drawChar('%', 207, 150, 2, CYAN); 1673 Tft.drawRectangle(60, 170, 30, 30, CYAN); 1674 Tft.drawChar('+', 68, 178, 2, CYAN); 1675 Tft.drawRectangle(120, 170, 30, 30, CYAN); 1676 Tft.drawChar('-', 128, 178, 2, CYAN); 1677 Tft.drawString("Days", 0, 210, 2, CYAN); 1678 Tft.drawNumber(humidday, 60, 210, 2, CYAN); 1679 Tft.drawRectangle(60, 230, 30, 30, CYAN); 1680 Tft.drawChar('+', 68, 238, 2, CYAN); 1681 Tft.drawRectangle(120, 230, 30, 30, CYAN); 1682 Tft.drawChar('-', 128, 238, 2, CYAN); 1683 return; 1684} 1685////////////////////// 1686void pagefour() { //Light Cycle 1687 Tft.fillRectangle(180, 0, 61, 15, BLACK); 1688 Tft.drawString("Light", 180, 0, 2, CYAN); 1689 Tft.drawString("Main", 24, 50, 1, CYAN); 1690 Tft.drawString("Humidity", 24, 80, 1, CYAN); 1691 Tft.drawString("Temperature", 144, 50, 1, CYAN); 1692 Tft.drawString("Settings", 144, 80, 1, CYAN); 1693 Tft.drawString("Sunrise", 0, 110, 2, CYAN); 1694 if (srhoursetdisp > 9) { 1695 Tft.drawNumber(srhoursetdisp, 110, 110, 2, CYAN); 1696 } else { 1697 Tft.drawNumber(0, 110, 110, 2, CYAN); 1698 Tft.drawNumber(srhoursetdisp, 122, 110, 2, CYAN); 1699 } 1700 Tft.drawChar(':', 134, 110, 2, CYAN); 1701 if (srminutesetdisp > 9) { 1702 Tft.drawNumber(srminutesetdisp, 146, 110, 2, CYAN); 1703 } else { 1704 Tft.drawNumber(0, 146, 110, 2, CYAN); 1705 Tft.drawNumber(srminutesetdisp, 158, 110, 2, CYAN); 1706 } 1707 Tft.drawChar(':', 170, 110, 2, CYAN); 1708 if (srsecondset > 9) { 1709 Tft.drawNumber(srsecondset, 182, 110, 2, CYAN); 1710 } else { 1711 Tft.drawNumber(0, 182, 110, 2, CYAN); 1712 Tft.drawNumber(srsecondset, 194, 110, 2, CYAN); 1713 } 1714 Tft.drawRectangle(60, 130, 30, 30, CYAN); 1715 Tft.drawChar('+', 68, 138, 2, CYAN); 1716 Tft.drawRectangle(120, 130, 30, 30, CYAN); 1717 Tft.drawChar('-', 128, 138, 2, CYAN); 1718 Tft.drawString("Days", 0, 170, 2, CYAN); 1719 Tft.drawNumber(srday, 60, 170, 2, CYAN); 1720 Tft.drawRectangle(110, 170, 30, 30, CYAN); 1721 Tft.drawChar('+', 118, 178, 2, CYAN); 1722 Tft.drawRectangle(170, 170, 30, 30, CYAN); 1723 Tft.drawChar('-', 178, 178, 2, CYAN); 1724 Tft.drawString("Sunset", 0, 210, 2, CYAN); 1725 if (sshoursetdisp > 9) { 1726 Tft.drawNumber(sshoursetdisp, 110, 210, 2, CYAN); 1727 } else { 1728 Tft.drawNumber(0, 110, 210, 2, CYAN); 1729 Tft.drawNumber(sshoursetdisp, 122, 210, 2, CYAN); 1730 } 1731 Tft.drawChar(':', 134, 210, 2, CYAN); 1732 if (ssminutesetdisp > 9) { 1733 Tft.drawNumber(ssminutesetdisp, 146, 210, 2, CYAN); 1734 } else { 1735 Tft.drawNumber(0, 146, 210, 2, CYAN); 1736 Tft.drawNumber(ssminutesetdisp, 158, 210, 2, CYAN); 1737 } 1738 Tft.drawChar(':', 170, 210, 2, CYAN); 1739 if (sssecondset > 9) { 1740 Tft.drawNumber(sssecondset, 182, 210, 2, CYAN); 1741 } else { 1742 Tft.drawNumber(0, 182, 210, 2, CYAN); 1743 Tft.drawNumber(sssecondset, 194, 210, 2, CYAN); 1744 } 1745 Tft.drawRectangle(60, 230, 30, 30, CYAN); 1746 Tft.drawChar('+', 68, 238, 2, CYAN); 1747 Tft.drawRectangle(120, 230, 30, 30, CYAN); 1748 Tft.drawChar('-', 128, 238, 2, CYAN); 1749 Tft.drawString("Days", 0, 270, 2, CYAN); 1750 Tft.drawNumber(ssday, 60, 270, 2, CYAN); 1751 Tft.drawRectangle(110, 270, 30, 30, CYAN); 1752 Tft.drawChar('+', 118, 278, 2, CYAN); 1753 Tft.drawRectangle(170, 270, 30, 30, CYAN); 1754 Tft.drawChar('-', 178, 278, 2, CYAN); 1755 return; 1756} 1757////////////////////// 1758void pagefive() { //Settings 1759 Tft.fillRectangle(180, 0, 61, 15, BLACK); 1760 Tft.drawString("Setup", 180, 0, 2, CYAN); 1761 Tft.drawString("Main", 24, 50, 1, CYAN); 1762 Tft.drawString("Humidity", 24, 80, 1, CYAN); 1763 Tft.drawString("Temperature", 144, 50, 1, CYAN); 1764 Tft.drawString("Light Cycle", 144, 80, 1, CYAN); 1765 Tft.drawString("Sensors:", 0, 110, 2, CYAN); 1766 if (ambithsen == 1) { 1767 Tft.fillRectangle(0, 128, 130, 12, RED); 1768 Tft.drawString("Ambient Temp: BAD", 0, 130, 1, CYAN); 1769 } else { 1770 Tft.fillRectangle(0, 128, 130, 12, GREEN); 1771 Tft.drawString("Ambient Temp: GOOD", 0, 130, 1, BLACK); 1772 } 1773 if (foggersen == 1) { 1774 Tft.fillRectangle(135, 128, 130, 12, RED); 1775 Tft.drawString("Water Level: LOW", 135, 130, 1, CYAN); 1776 } else { 1777 Tft.fillRectangle(135, 128, 130, 12, GREEN); 1778 Tft.drawString("Water Level: GOOD", 135, 130, 1, BLACK); 1779 } 1780 if (hr1sen == 1) { 1781 Tft.fillRectangle(0, 143, 130, 12, RED); 1782 Tft.drawString("Heatrock 1 Temp: BAD", 0, 145, 1, CYAN); 1783 } else { 1784 Tft.fillRectangle(0, 143, 130, 12, GREEN); 1785 Tft.drawString("Heatrock 1 Temp: GOOD", 0, 145, 1, BLACK); 1786 } 1787 if (hr2sen == 1) { 1788 Tft.fillRectangle(0, 158, 130, 12, RED); 1789 Tft.drawString("Heatrock 2 Temp: BAD", 0, 160, 1, CYAN); 1790 } else { 1791 Tft.fillRectangle(0, 158, 130, 12, GREEN); 1792 Tft.drawString("Heatrock 2 Temp: GOOD", 0, 160, 1, BLACK); 1793 } 1794 Tft.drawString("Power:", 0, 175, 2, CYAN); 1795 if (dlpwr == 0) { 1796 Tft.fillRectangle(0, 193, 110, 12, RED); 1797 Tft.drawString("Day Light: OFF", 0, 195, 1, CYAN); 1798 Tft.fillRectangle(115, 193, 110, 12, GREEN); 1799 Tft.drawString("Night Light: ON", 115, 195, 1, BLACK); 1800 } else { 1801 Tft.fillRectangle(0, 193, 110, 12, GREEN); 1802 Tft.drawString("Day Light: ON", 0, 195, 1, BLACK); 1803 Tft.fillRectangle(115, 193, 110, 12, RED); 1804 Tft.drawString("Night Light: OFF", 115, 195, 1, CYAN); 1805 } 1806 if (hlpwr == 0) { 1807 Tft.fillRectangle(0, 208, 110, 12, RED); 1808 Tft.drawString("Heat Lamp: OFF", 0, 210, 1, CYAN); 1809 } else { 1810 Tft.fillRectangle(0, 208, 110, 12, GREEN); 1811 Tft.drawString("Heat Lamp: ON", 0, 210, 1, BLACK); 1812 } 1813 if (fanpwr == 0) { 1814 Tft.fillRectangle(115, 208, 110, 12, RED); 1815 Tft.drawString("Fan: OFF", 115, 210, 1, CYAN); 1816 } else { 1817 Tft.fillRectangle(115, 208, 110, 12, GREEN); 1818 Tft.drawString("Fan: ON", 115, 210, 1, BLACK); 1819 } 1820 if (hr1pwr == 0) { 1821 Tft.fillRectangle(0, 223, 110, 12, RED); 1822 Tft.drawString("Heat Rock 1: OFF", 0, 225, 1, CYAN); 1823 } else { 1824 Tft.fillRectangle(0, 223, 110, 12, GREEN); 1825 Tft.drawString("Heat Rock 1: ON", 0, 225, 1, BLACK); 1826 } 1827 if (hr2pwr == 0) { 1828 Tft.fillRectangle(115, 223, 110, 12, RED); 1829 Tft.drawString("Heat Rock 2: OFF", 115, 225, 1, CYAN); 1830 } else { 1831 Tft.fillRectangle(115, 223, 110, 12, GREEN); 1832 Tft.drawString("Heat Rock 2: ON", 115, 225, 1, BLACK); 1833 } 1834 if (foggerpwr == 0) { 1835 Tft.fillRectangle(0, 238, 110, 12, RED); 1836 Tft.drawString("Fogger: OFF", 0, 240, 1, CYAN); 1837 } else { 1838 Tft.fillRectangle(0, 238, 110, 12, GREEN); 1839 Tft.drawString("Fogger: ON", 0, 240, 1, BLACK); 1840 } 1841 Tft.drawString("Room Temp:", 0, 255, 2, CYAN); 1842 Tft.drawFloat(roomtemp, 120, 255, 2, CYAN); 1843 Tft.drawChar('o', 185, 255, 1, CYAN); 1844 Tft.drawChar('F', 190, 255, 2, CYAN); 1845 return; 1846} 1847////////////////////// 1848void readsd() { 1849 myData = ""; 1850 digitalWrite(W5200_CS, HIGH); 1851 myFile = SD.open(myDoc); 1852 if (myFile) { 1853 // read all data from the file 1854 while (myFile.available()) { 1855 //send the content onto the serial monitor 1856 myData += char(myFile.read()); 1857 } 1858 // close the file 1859 myFile.close(); 1860 } 1861 digitalWrite(SDCARD_CS, HIGH); //Deselect the SD card 1862} 1863////////////////////// 1864void writesd() { 1865 digitalWrite(W5200_CS, HIGH); 1866 SD.remove(myDoc); 1867 myFile = SD.open(myDoc, FILE_WRITE); 1868 //write to the file after it's successfully opened or created: 1869 if (myFile) { 1870 myFile.print(myData); 1871 // close the file 1872 myFile.close(); 1873 } 1874 digitalWrite(SDCARD_CS, HIGH); //Deselect the SD card 1875} 1876////////////////////// 1877void rsetFunc() { 1878 pinMode(rset, OUTPUT); 1879 digitalWrite(rset, LOW); 1880} 1881////////////////////// 1882/******************************************************************************* 1883 Function Name: capture_photo 1884 Description: capture a photo and store the file named temp.jpg into SD 1885 Input: None 1886 Output : None 1887 Return : None 1888 *******************************************************************************/ 1889void capture_photo(char myFileName[]) { 1890 VC0706_frame_control(3); 1891 delay(10); 1892 // Check to see if the file exists: 1893 // if exists,delete the file: 1894 if (SD.exists(myFileName)) SD.remove(myFileName); 1895 VC0706_frame_control(0); 1896 delay(10); 1897 rx_ready = false; 1898 rx_counter = 0; 1899 Serial2.end();// clear all rx buffer 1900 delay(5); 1901 Serial2.begin(115200); 1902 //get frame buffer length 1903 VC0706_get_framebuffer_length(0); 1904 delay(10); 1905 buffer_read(); 1906 // store frame buffer length for coming reading 1907 frame_length = (VC0706_rx_buffer[5] << 8) + VC0706_rx_buffer[6]; 1908 frame_length = frame_length << 16; 1909 frame_length = frame_length + (0x0ff00 & (VC0706_rx_buffer[7] << 8)) + VC0706_rx_buffer[8]; 1910 vc_frame_address = READ_DATA_BLOCK_NO; 1911 myFile = SD.open(myFileName, FILE_WRITE); 1912 while (vc_frame_address < frame_length) { 1913 VC0706_read_frame_buffer(vc_frame_address - READ_DATA_BLOCK_NO, READ_DATA_BLOCK_NO); 1914 delay(9); 1915 //get the data with length=READ_DATA_BLOCK_NObytes 1916 rx_ready = false; 1917 rx_counter = 0; 1918 buffer_read(); 1919 // write data to file 1920 myFile.write(VC0706_rx_buffer + 5, READ_DATA_BLOCK_NO); 1921 //read next READ_DATA_BLOCK_NO bytes from frame buffer 1922 vc_frame_address = vc_frame_address + READ_DATA_BLOCK_NO; 1923 } 1924 // get the last data 1925 vc_frame_address = vc_frame_address - READ_DATA_BLOCK_NO; 1926 last_data_length = frame_length - vc_frame_address; 1927 VC0706_read_frame_buffer(vc_frame_address, last_data_length); 1928 delay(9); 1929 //get the data 1930 rx_ready = false; 1931 rx_counter = 0; 1932 buffer_read(); 1933 myFile.write(VC0706_rx_buffer + 5, last_data_length); 1934 myFile.close(); 1935 VC0706_frame_control(3); 1936 delay(10); 1937} 1938/******************************************************************************* 1939 Function Name: VC0706_read_frame_buffer 1940 Description: read image data from FBUF 1941 Input: buffer_address(4 bytes); buffer_length(4 bytes) ******YO!****** 1942 Output : None 1943 Return : None 1944 *******************************************************************************/ 1945void VC0706_read_frame_buffer(unsigned long buffer_address, unsigned long buffer_length) { 1946 tx_vcbuffer[0] = VC0706_PROTOCOL_SIGN; 1947 tx_vcbuffer[1] = VC0706_Serial2_NUMBER; 1948 tx_vcbuffer[2] = VC0706_COMMAND_READ_FBUF; 1949 tx_vcbuffer[3] = 0x0c; 1950 tx_vcbuffer[4] = FBUF_CURRENT_FRAME; 1951 tx_vcbuffer[5] = 0x0a; // 0x0a=data transfer by MCU mode; 0x0f=data transfer by SPI interface 1952 tx_vcbuffer[6] = buffer_address >> 24; //starting address 1953 tx_vcbuffer[7] = buffer_address >> 16; 1954 tx_vcbuffer[8] = buffer_address >> 8; 1955 tx_vcbuffer[9] = buffer_address & 0x0ff; 1956 tx_vcbuffer[10] = buffer_length >> 24; // data length 1957 tx_vcbuffer[11] = buffer_length >> 16; 1958 tx_vcbuffer[12] = buffer_length >> 8; 1959 tx_vcbuffer[13] = buffer_length & 0x0ff; 1960 tx_vcbuffer[14] = 0x00; // delay time 1961 tx_vcbuffer[15] = 0x0a; 1962 tx_counter = 16; 1963 buffer_send(); 1964} 1965/******************************************************************************* 1966 Function Name: VC0706_frame_control 1967 Description: control frame buffer register ******YO!****** 1968 Input: frame_control=control flag(1byte) 1969 : 0 = stop current frame ; 1= stop next frame;2=step frame;3 =resume frame; 1970 Output : None 1971 Return : None 1972 *******************************************************************************/ 1973void VC0706_frame_control(byte frame_control) { 1974 if (frame_control > 3)frame_control = 3; 1975 tx_vcbuffer[0] = VC0706_PROTOCOL_SIGN; 1976 tx_vcbuffer[1] = VC0706_Serial2_NUMBER; 1977 tx_vcbuffer[2] = VC0706_COMMAND_FBUF_CTRL; 1978 tx_vcbuffer[3] = 0x01; 1979 tx_vcbuffer[4] = frame_control; 1980 tx_counter = 5; 1981 buffer_send(); 1982} 1983/******************************************************************************* 1984 Function Name: VC0706_get_framebuffer_length 1985 Description: get byte-lengths in FBUF 1986 Input: fbuf_type =current or next frame 1987 0 =current frame ******YO!****** 1988 1 =next frame 1989 Output : None 1990 Return : None 1991 *******************************************************************************/ 1992void VC0706_get_framebuffer_length(byte fbuf_type) { 1993 if (fbuf_type > 1)fbuf_type = 1; 1994 tx_vcbuffer[0] = VC0706_PROTOCOL_SIGN; 1995 tx_vcbuffer[1] = VC0706_Serial2_NUMBER; 1996 tx_vcbuffer[2] = VC0706_COMMAND_GET_FBUF_LEN; 1997 tx_vcbuffer[3] = 0x01; 1998 tx_vcbuffer[4] = fbuf_type; 1999 tx_counter = 5; 2000 buffer_send(); 2001} 2002/******************************************************************************* 2003 Function Name: VC0706_uart_power_save 2004 Description: stop current frame for reading 2005 Input: power_on =1start power-save 2006 = 0stop power-save 2007 Output : None 2008 Return : None 2009 *******************************************************************************/ 2010void VC0706_uart_power_save(byte power_save_on) { 2011 tx_vcbuffer[0] = VC0706_PROTOCOL_SIGN; 2012 tx_vcbuffer[1] = VC0706_Serial2_NUMBER; 2013 tx_vcbuffer[2] = VC0706_COMMAND_POWER_SAVE_CTRL; 2014 tx_vcbuffer[3] = 0x03; 2015 tx_vcbuffer[4] = 00; //power save control mode 2016 tx_vcbuffer[5] = 01; // control by UART 2017 tx_vcbuffer[6] = power_save_on; //start power save 2018 tx_counter = 7; 2019 buffer_send(); 2020} 2021/******************************************************************************* 2022 Function Name: VC0706_compression_ratio 2023 Description: stop current frame for reading 2024 Input: ration>13(minimum) ******YO!****** 2025 <63(max) 2026 Output : None 2027 Return : None 2028 *******************************************************************************/ 2029void VC0706_compression_ratio(int ratio) { 2030 if (ratio > 63)ratio = 63; 2031 if (ratio < 13)ratio = 13; 2032 int vc_comp_ratio = (ratio - 13) * 4 + 53; 2033 tx_vcbuffer[0] = VC0706_PROTOCOL_SIGN; 2034 tx_vcbuffer[1] = VC0706_Serial2_NUMBER; 2035 tx_vcbuffer[2] = VC0706_COMMAND_WRITE_DATA; 2036 tx_vcbuffer[3] = 0x05; 2037 tx_vcbuffer[4] = 01; //chip register 2038 tx_vcbuffer[5] = 0x01; //data num ready to write 2039 tx_vcbuffer[6] = 0x12; //register address 2040 tx_vcbuffer[7] = 0x04; 2041 tx_vcbuffer[8] = vc_comp_ratio; //data 2042 tx_counter = 9; 2043 buffer_send(); 2044} 2045/******************************************************************************* 2046 Function Name: buffer_send 2047 Description: Transmit buffer to VC0706 2048 Input: tx_vcbuffer 2049 Output : None 2050 Return : None 2051 *******************************************************************************/ 2052void buffer_send() { 2053 int i = 0; 2054 for (i = 0; i < tx_counter; i++) 2055 Serial2.write(tx_vcbuffer[i]); 2056 tx_ready = true; 2057} 2058/******************************************************************************* 2059 Function Name: buffer_read 2060 Description: Receive buffer from VC0706 2061 Input: None 2062 Output : rx_buffer, rx_ready 2063 Return : None 2064 *******************************************************************************/ 2065void buffer_read() { 2066 bool validity = true; 2067 if (rx_ready) // if something unread in buffer, just quit 2068 return; 2069 rx_counter = 0; 2070 VC0706_rx_buffer[0] = 0; 2071 while (Serial2.available() > 0) 2072 { 2073 VC0706_rx_buffer[rx_counter++] = Serial2.read(); 2074 //delay(1); 2075 } 2076 if (VC0706_rx_buffer[0] != 0x76) 2077 validity = false; 2078 if (VC0706_rx_buffer[1] != VC0706_Serial2_NUMBER) 2079 validity = false; 2080 if (validity) rx_ready = true; 2081}
Harold and Kumar w/out IP code
c_cpp
Arduino
1#include <SD.h> 2#include <stdint.h> 3#include <SeeedTouchScreen.h> 4#include 5 <TFTv2.h> 6#include <SPI.h> 7#include <Time.h> 8#include <TimeLib.h> 9#include 10 <DHT.h> 11#include <DHT_U.h> 12#include <OneWire.h> 13#include <DS3232RTC.h> 14#include 15 <Adafruit_Sensor.h> 16#include <TimeLord.h> 17#include <Wire.h> 18#include "DHT.h" 19#include 20 <DallasTemperature.h> 21#include <EthernetV2_0.h> 22#include "TFTv2.h" 23int 24 page; 25int firsttimeon = 1; 26//time veriables 27int daynow; 28int monthnow; 29int 30 yearnow; 31int minutenow; 32int hournow; 33int tpage; 34int npage; 35int dnchan; 36float 37 const LONGITUDE = -1.41503959; 38float const LATITUDE = 8.528874379; 39//temp 40 and humid veriables 41float humidmin; 42float humidminset; 43int humidday; 44#define 45 DHTPIN 22 // temp/humidity sensor 46#define DHTTYPE DHT22 47DHT dht(DHTPIN, DHTTYPE); 48float 49 hkhr1temp; 50float hkhr2temp; 51float hkdaytemp; 52float hknighttemp; 53float 54 ambitempcur; 55float ambitempdisp; 56float hkdaytempdisp; 57float hknighttempdisp; 58float 59 humidcur; 60float humiddisp; 61#define hr1 23 62#define hr2 24 63OneWire oneWire_hr1(hr1); 64OneWire 65 oneWire_hr2(hr2); 66DallasTemperature sensor_hr1(&oneWire_hr1); 67DallasTemperature 68 sensor_hr2(&oneWire_hr2); 69float hr1tempcur; 70float hr1tempdisp; 71float hr2tempcur; 72float 73 hr2tempdisp; 74int ambitempday; 75int ambitempnight; 76float roomtemp; 77float 78 roomtempdisp; 79//light cycle veriables 80int srhour; 81int srminute; 82int 83 srsecond; 84int srhourset; 85int srminuteset; 86int srhoursetdisp; 87int srminutesetdisp; 88int 89 srsecondset; 90int srday; 91int sshour; 92int ssminute; 93int sssecond; 94int 95 sshourset; 96int ssminuteset; 97int sssecondset; 98int ssminutesetdisp; 99int 100 sshoursetdisp; 101int ssday = 0; 102int night; 103byte todaysr[] = {0, 0, 0, 0, 104 0, 0}; 105byte todayss[] = {0, 0, 0, 0, 0, 0}; 106byte dlstime[] = {0, 0, hour(), 107 day(), month(), year()}; 108long timenow; 109long timess; 110long timesr; 111//pin 112 variables 113//ambient heat/humidity is pin 22 114// heat rock 1 temp is pin 23 115// 116 heat rock 2 temp is pin 24 117// ds3231rtc SCL is on analog pin A5 118// ds3231rtc 119 SDA is on analog pin A4 120const int dnlamp = 25; 121const int fogger = 26; 122const 123 int hrock1 = 27; 124const int hrock2 = 28; 125const int fan = 29; 126const int foggerwater 127 = 31; 128const int hlamp = 30; 129const int rset = 41; 130// sensor quality veriables 131int 132 ambithsen; 133int hr1sen; 134int hr2sen; 135int foggersen; 136//power on veriables 137int 138 dlpwr; 139int hlpwr; 140int hr1pwr; 141int hr2pwr; 142int fogpwr; 143int fanpwr; 144int 145 foggerpwr; 146TouchScreen ts = TouchScreen(XP, YP, XM, YM); //init TouchScreen port 147 pins 148// file varieables 149String myData; 150String myDoc; 151File myFile; 152/*Cat5 153 wires 154 Red Taped ---- Relay Box 155 Solid Brown = 5v 156 White Brown = Ground 157 158 Solid Green = Pin 7 of always on relay -- Heat Rock 2 Power -- Arduino Pin = 28 159 160 White Green = Pin 6 of always on relay -- Heat Rock 1 Power -- Arduino Pin = 27 161 162 Solid Blue = Pin 5 of always on relay -- Heat Lamp Power -- Arduino Pin = 30 163 164 White Blue = Pin 4 of always on relay -- Day/Night Lights Power -- Arduino Pin 165 = 25 166 Solid Orange = Pin 5 of power save relay -- Fogger Power -- Arduino Pin 167 = 26 168 White Orange = Pin 4 of power save relay -- Unused 169 // 170 White 171 Taped ---- Relay Box 172 Solid Green = Pin 7 of power save relay -- Fan Relay -- 173 Arduino Pin = 29 174 White Green = Unused 175 Solid Blue = J1 Open Fan relay 176 177 White Blue = J1 Common Fan relay 178 Solid Brown = Unused 179 White Brown = 180 Unused 181 Solid Orange = 5v 182 White Orange = Ground 183 // 184 Yellow Tape 185 ---- Sensors 186 Solid Brown = Fan Power 187 White Brown = Fan Ground 188 Solid 189 Green = Ambiant Temperature/Humidity Sensor -- Arduino Pin = 22 190 White Green 191 = Heat Rock 1 Sensor -- Arduino Pin = 23 192 Solid Blue = Heat Rock 2 Sensor -- 193 Arduino Pin = 24 194 White Blue = UNUSED 195 Solid Orange = 5v 196 White Orange 197 = Ground 198 // 199 Red Yellow Tape ---- Touch Screen 200 Solid Brown = Top Right 201 ICSP 202 White Brown = Analog 3 203 Solid Green = Analog 2 204 White Green = 205 Analog 1 206 Solid Blue = Analog 0 207 White Blue = Reset 208 Solid Orange = 209 5v 210 White Orange = Ground 211 // 212 Red White Tape ---- Touch Screen 213 214 Solid Brown = Digital 7 215 White Brown = Digital 6 216 Solid Green = Digital 217 5 218 White Green = Bottom Left ICSP 219 Solid Blue = Top Left ICSP 220 White 221 Blue = Bottom Middle ICSP 222 Solid Orange = Top MiddleICSP 223 White Orange = 224 Bottom Right ICSP 225*/ 226// Enter a MAC address and IP address for your controller 227 below. 228// The IP address will be dependent on your local network: 229byte mac[] 230 = { 231 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED 232}; 233IPAddress ip(192, 168, 1, 109); 234// 235 Initialize the Ethernet server library 236// with the IP address and port you want 237 to use 238// (port 80 is default for HTTP): 239EthernetServer server(6113); 240#define 241 W5200_CS 10 242#define SDCARD_CS 4 243//Camera definitions 244#define VC0706_PROTOCOL_SIGN 245 0x56 246#define VC0706_Serial2_NUMBER 0x00 247#define VC0706_COMMAND_RESET 248 0x26 249#define VC0706_COMMAND_GEN_VERSION 0x11 250#define VC0706_COMMAND_TV_OUT_CTRL 251 0x44 252#define VC0706_COMMAND_OSD_ADD_CHAR 0x45 253#define VC0706_COMMAND_DOWNSIZE_SIZE 254 0x53 255#define VC0706_COMMAND_READ_FBUF 0x32 256#define FBUF_CURRENT_FRAME 257 0 258#define FBUF_NEXT_FRAME 0 259#define VC0706_COMMAND_FBUF_CTRL 0x36 260#define 261 VC0706_COMMAND_COMM_MOTION_CTRL 0x37 262#define VC0706_COMMAND_COMM_MOTION_DETECTED 263 0x39 264#define VC0706_COMMAND_POWER_SAVE_CTRL 0x3E 265#define VC0706_COMMAND_COLOR_CTRL 266 0x3C 267#define VC0706_COMMAND_MOTION_CTRL 0x42 268#define VC0706_COMMAND_WRITE_DATA 269 0x31 270#define VC0706_COMMAND_GET_FBUF_LEN 0x34 271#define READ_DATA_BLOCK_NO 272 56 273unsigned char tx_counter; 274unsigned char tx_vcbuffer[20]; 275bool 276 tx_ready; 277bool rx_ready; 278unsigned char rx_counter; 279unsigned char 280 VC0706_rx_buffer[80]; 281uint32_t frame_length = 0; 282uint32_t vc_frame_address 283 = 0; 284uint32_t last_data_length = 0; 285// one Integer Variable to count for 286 photo 287// increase if you have difficulties conenctiong 288// but it then will 289 refresh less often 290int waitForPhoto = 4; 291int waitCount; 292////////////////////// 293void 294 setup() { 295 // reset w5100 296 pinMode(10, OUTPUT); 297 digitalWrite(10, HIGH); 298 299 // open Serial2 connection to the camera 300 Serial2.begin(115200); 301 // set 302 the jpeg compression of the camera 303 // smaller number means smaller file, but 304 less quality 305 VC0706_compression_ratio(15); 306 delay(100); 307 pinMode(SDCARD_CS, 308 OUTPUT); 309 Sd2Card card; 310 card.init(SPI_FULL_SPEED, SDCARD_CS); 311 if (!SD.begin(SDCARD_CS)) 312 { 313 rsetFunc(); 314 } 315 // start the Ethernet connection and the server: 316 317 Ethernet.begin(mac, ip); 318 server.begin(); 319 // put your setup code here, 320 to run once: 321 TFT_BL_ON; 322 Tft.TFTinit(); 323 setSyncProvider(RTC.get); 324 325 page = 1; 326 monthnow = month(); 327 yearnow = year(); 328 minutenow = minute(); 329 330 hournow = hour(); 331 npage = 1; 332 humidmin = 50.00; 333 dht.begin(); 334 335 sensor_hr1.begin(); 336 sensor_hr2.begin(); 337 TimeLord tardis; 338 tardis.TimeZone(0); 339 340 tardis.Position(LATITUDE, LONGITUDE); 341 // pins 342 pinMode(dnlamp, OUTPUT); 343 344 pinMode(fogger, OUTPUT); 345 pinMode(hlamp, OUTPUT); 346 pinMode(hrock1, OUTPUT); 347 348 pinMode(hrock2, OUTPUT); 349 pinMode(fan, OUTPUT); 350 pinMode(foggerwater, 351 INPUT); 352 myDoc = "daynow.txt"; 353 readsd(); 354 daynow = myData.toInt(); 355 356 myDoc = "hd.txt"; 357 readsd(); 358 humidday = myData.toInt(); 359 myDoc 360 = "hs.txt"; 361 readsd(); 362 humidminset = myData.toFloat(); 363 myDoc = "atd.txt"; 364 365 readsd(); 366 ambitempday = myData.toInt(); 367 myDoc = "atdset.txt"; 368 369 readsd(); 370 hkdaytempdisp = myData.toFloat(); 371 myDoc = "atn.txt"; 372 373 readsd(); 374 ambitempnight = myData.toInt(); 375 myDoc = "atnset.txt"; 376 377 readsd(); 378 hknighttempdisp = myData.toFloat(); 379 myDoc = "ssetday.txt"; 380 381 readsd(); 382 ssday = myData.toInt(); 383 myDoc = "sriseday.txt"; 384 readsd(); 385 386 srday = myData.toInt(); 387 myDoc = "ssetmin.txt"; 388 readsd(); 389 ssminutesetdisp 390 = myData.toInt(); 391 myDoc = "srisemin.txt"; 392 readsd(); 393 srminutesetdisp 394 = myData.toInt(); 395 myDoc = "sriseh.txt"; 396 readsd(); 397 srhoursetdisp 398 = myData.toInt(); 399 myDoc = "ssethour.txt"; 400 readsd(); 401 sshoursetdisp 402 = myData.toInt(); 403} 404////////////////////// 405void loop() { 406 // put your 407 main code here, to run repeatedly: 408 TimeLord tardis; 409 tardis.DstRules(3, 410 2, 11, 1, 60); 411 if (firsttimeon == 1) { 412 tardis.TimeZone(-5 * 60); 413 414 tardis.Position(LATITUDE, LONGITUDE); 415 dlstime[5] = (year() - 2000); 416 417 dlstime[4] = month(); 418 dlstime[3] = day(); 419 dlstime[2] = hour(); 420 421 dlstime[1] = minute(); 422 tardis.DST(dlstime); 423 firsttimeon = 0; 424 425 } 426 // count down for photo time 427 waitCount = waitCount - 1; 428 if (waitCount 429 < 2) { 430 capture_photo("live.jpg"); 431 waitCount = waitForPhoto; 432 433 } 434 // Create a client connection 435 EthernetClient client = server.available(); 436 437 if (client) { 438 int pos = 0; 439 char clientReq[100]; 440 while (client.connected()) 441 { 442 if (client.available()) { 443 // read what the client is requesting 444 445 char c = client.read(); 446 if (c != '\ 447' && c != '\ ') { 448 clientReq[pos] 449 = c; 450 pos++; 451 if (pos >= 100) pos = 99; // dont let the 452 buffer overflow... 453 continue; 454 } 455 // send a jpeg 456 file or send html to display files 457 // if there is a character after the 458 'GET /' request 459 // send the jpeg file 460 if ( clientReq[5] != 461 ' ' ) { 462 // ###### FIND OUT WHICH FILE THE CLIENT REQUEST HERE !!! 463 464 File myFile = SD.open("live.jpg"); 465 // try to open file 466 467 // if successfull, send header and jpeg data 468 if (myFile) 469 { 470 client.println("HTTP/1.1 200 OK"); 471 client.println("Content-Type: 472 image/jpg"); 473 client.println(); 474 byte clientBuf[64]; 475 476 int clientCount = 0; 477 while (myFile.available()) 478 { 479 480 clientBuf[clientCount] = myFile.read(); 481 clientCount++; 482 483 if (clientCount > 63) { 484 client.write(clientBuf, 485 64); 486 clientCount = 0; 487 } 488 } 489 490 if (clientCount > 0) { 491 client.write(clientBuf, clientCount); 492 493 } 494 myFile.close(); 495 } 496 } else { 497 498 // there is no character after the 'GET /' 499 // send HTML site 500 501 client.println("HTTP/1.1 200 OK"); 502 client.println("Content-Type: 503 text/html"); 504 client.println("Connection: close"); 505 client.println("Refresh: 506 2"); 507 client.println(); 508 client.println("<!DOCTYPE HTML>"); 509 510 client.println("<html>"); 511 client.print("Harold & Kumar's 512 Enclosure"); 513 client.println("<br />"); 514 client.print(dayStr(weekday(now()))); 515 516 client.print(", "); 517 client.print(monthStr(dlstime[4])); 518 519 client.print(" "); 520 client.print(dlstime[3]); 521 client.print(", 522 "); 523 client.print(year()); 524 client.print(" at "); 525 526 if (dlstime[2] < 10) { 527 client.print("0"); 528 } 529 530 client.print(dlstime[2]); 531 client.print(":"); 532 if 533 (minute() < 10) { 534 client.print("0"); 535 } 536 client.print(minute()); 537 538 client.print(":"); 539 if (second() < 10) { 540 client.print("0"); 541 542 } 543 client.print(second()); 544 client.println("<br 545 />"); 546 client.println("<br />"); 547 client.print("Room 548 Temperature = "); 549 client.print(roomtemp); 550 client.print(" 551 "); 552 client.print(char(176)); 553 client.print("F"); 554 555 client.println("<br />"); 556 client.println("<br />"); 557 558 client.print("Ambient Temperature = "); 559 client.print(ambitempdisp); 560 561 client.print(" "); 562 client.print(char(176)); 563 client.print("F"); 564 565 client.println("<br />"); 566 client.print(" Range = "); 567 568 if (night == 0) { 569 client.print(hkdaytempdisp - .5); 570 571 } else { 572 client.print(hknighttempdisp - .5); 573 } 574 575 client.print(" "); 576 client.print(char(176)); 577 client.print("F 578 - "); 579 if (night == 0) { 580 client.print(hkdaytempdisp 581 + .5); 582 } else { 583 client.print(hknighttempdisp + .5); 584 585 } 586 client.print(" "); 587 client.print(char(176)); 588 589 client.print("F "); 590 if (night == 0 && ambitempday > 0) 591 { 592 client.print("For "); 593 client.print(ambitempday); 594 595 client.print(" Day(s)"); 596 } 597 if (night == 598 1 && ambitempnight > 0) { 599 client.print(" For "); 600 client.print(ambitempnight); 601 602 client.print(" Day(s)"); 603 } 604 client.println("<br 605 />"); 606 client.println("<br />"); 607 client.print("Basking 608 Temperature = "); 609 client.print(hr1tempdisp); 610 client.print(" 611 "); 612 client.print(char(176)); 613 client.print("F"); 614 615 client.println("<br />"); 616 client.print(" Range = "); 617 618 client.print(88); 619 client.print(" "); 620 client.print(char(176)); 621 622 client.print("F - "); 623 client.print(96); 624 client.print(" 625 "); 626 client.print(char(176)); 627 client.print("F"); 628 629 client.println("<br />"); 630 client.println("<br />"); 631 632 client.print("Borrow Temperature = "); 633 client.print(hr2tempdisp); 634 635 client.print(" "); 636 client.print(char(176)); 637 client.print("F"); 638 639 client.println("<br />"); 640 client.print(" Range = "); 641 642 if (night == 0) { 643 client.print(hkdaytempdisp - .5); 644 645 } else { 646 client.print(hknighttempdisp - .5); 647 } 648 649 client.print(" "); 650 client.print(char(176)); 651 client.print("F 652 - "); 653 if (night == 0) { 654 client.print(hkdaytempdisp 655 + .5); 656 } else { 657 client.print(hknighttempdisp + .5); 658 659 } 660 client.print(" "); 661 client.print(char(176)); 662 663 client.print("F"); 664 if (night == 0 && ambitempday > 0) { 665 666 client.print(" For "); 667 client.print(ambitempday); 668 669 client.print(" Day(s)"); 670 } 671 if (night == 672 1 && ambitempnight > 0) { 673 client.print(" For "); 674 client.print(ambitempnight); 675 676 client.print(" Day(s)"); 677 } 678 client.println("<br 679 />"); 680 client.println("<br />"); 681 client.print("Humidity 682 = "); 683 client.print(humiddisp); 684 client.print("%"); 685 686 client.println("<br />"); 687 client.print(" Range = "); 688 689 client.print(humidminset); 690 client.print("% - "); 691 client.print(humidminset 692 + 10); 693 client.print("% "); 694 if ( humidday > 0) { 695 696 client.print("For "); 697 client.print(humidday); 698 client.print(" 699 Day(s)"); 700 } 701 client.println("<br />"); 702 client.println("<br 703 />"); 704 client.print("Water Level = "); 705 if (digitalRead(foggerwater) 706 == HIGH) { 707 client.print("Good"); 708 } else { 709 client.print("Fill 710 Now!"); 711 } 712 client.println("<br />"); 713 client.print("Time 714 = "); 715 if (night == 0) { 716 client.print("Day"); 717 718 } else { 719 client.print("Night"); 720 } 721 client.println("<br 722 />"); 723 client.print("Sunrise Time = "); 724 if (srhoursetdisp 725 < 10) { 726 client.print("0"); 727 } 728 client.print(srhoursetdisp); 729 730 client.print(":"); 731 if (srminutesetdisp < 10) { 732 client.print("0"); 733 734 } 735 client.print(srminutesetdisp); 736 if (srday > 737 0) { 738 client.print(" For "); 739 client.print(srday); 740 741 client.print(" Day(s)"); 742 } 743 client.println("<br 744 />"); 745 client.print("Sunset Time = "); 746 if (sshoursetdisp 747 < 10) { 748 client.print("0"); 749 } 750 client.print(sshoursetdisp); 751 752 client.print(":"); 753 if (ssminutesetdisp < 10) { 754 client.print("0"); 755 756 } 757 client.print(ssminutesetdisp); 758 if (ssday > 759 0) { 760 client.print(" For "); 761 client.print(ssday); 762 763 client.print(" Day(s)"); 764 } 765 client.println("<br 766 />"); 767 client.println("<br />"); 768 client.print("Heat 769 Lamp = "); 770 if (hlpwr == 1) { 771 client.print("ON"); 772 773 } else { 774 client.print("OFF"); 775 } 776 client.println("<br 777 />"); 778 client.print("Fans = "); 779 if (fanpwr == 1) { 780 781 client.print("ON"); 782 } else { 783 client.print("OFF"); 784 785 } 786 client.println("<br />"); 787 client.print("Basking 788 Rock = "); 789 if (hr1pwr == 1) { 790 client.print("ON"); 791 792 } else { 793 client.print("OFF"); 794 } 795 client.println("<br 796 />"); 797 client.print("Borrow Rock = "); 798 if (hr2pwr == 799 1) { 800 client.print("ON"); 801 } else { 802 client.print("OFF"); 803 804 } 805 client.println("<br />"); 806 client.print("Fogger 807 = "); 808 if (foggerpwr == 1) { 809 client.print("ON"); 810 811 } else { 812 client.print("OFF"); 813 } 814 client.println("<br 815 />"); 816 client.println("<div align=center><img src='live.jpg' width='640' 817 height='480'>"); 818 client.println("<p>"); 819 client.println("Live 820 from Harold & Kumar</div>"); 821 client.println("</html>"); 822 } 823 824 delay(1); 825 //stopping client 826 client.stop(); 827 } 828 829 } 830 } 831 //new touch point 832 Point p = ts.getPoint(); 833 p.x = map(p.x, 834 TS_MINX, TS_MAXX, 0, 240); 835 p.y = map(p.y, TS_MINY, TS_MAXY, 0, 320); 836 if 837 (p.z > __PRESURE) { 838 // New Page 839 if ((p.x < 120) && (p.y > 40) && (p.y 840 < 70)) { 841 if (page == 1) { 842 page = 2; 843 npage = 1; 844 845 } else { 846 page = 1; 847 npage = 1; 848 } 849 } 850 851 if ((p.x > 120) && (p.y > 40) && (p.y < 70)) { 852 if (page > 2) { 853 854 page = 2; 855 npage = 1; 856 } else { 857 page = 3; 858 859 npage = 1; 860 } 861 } 862 if ((p.x < 120) && (p.y > 70) && (p.y 863 < 100)) { 864 if (page > 3) { 865 page = 3; 866 npage = 1; 867 868 } else { 869 page = 4; 870 npage = 1; 871 } 872 } 873 874 if ((p.x > 120) && (p.y > 70) && (p.y < 100)) { 875 if (page == 5) { 876 877 page = 4; 878 npage = 1; 879 } else { 880 page = 5; 881 882 npage = 1; 883 } 884 } 885 if (page == 2) { 886 if ((p.x 887 > 140) && (p.x < 170) && (p.y > 220) && (p.y < 250)) { //+ set 888 if (night 889 == 1) { 890 if (dnchan == 0) { 891 hknighttempdisp = hknighttempdisp 892 + .5; 893 Tft.fillRectangle(48, 230, 72, 15, BLACK); 894 Tft.drawFloat(hknighttempdisp, 895 48, 230, 2, CYAN); 896 if (ambitempnight == 0 ) { 897 ambitempnight 898 = ambitempnight + 1; 899 Tft.fillRectangle(84, 270, 36, 15, BLACK); 900 901 Tft.drawNumber(ambitempnight, 84, 270, 2, CYAN); 902 } 903 904 } else { 905 hkdaytempdisp = hkdaytempdisp + .5; 906 Tft.fillRectangle(48, 907 230, 72, 15, BLACK); 908 Tft.drawFloat(hkdaytempdisp, 48, 230, 2, CYAN); 909 910 if (ambitempday == 0 ) { 911 ambitempday = ambitempday 912 + 1; 913 Tft.fillRectangle(84, 270, 36, 15, BLACK); 914 Tft.drawNumber(ambitempday, 915 84, 270, 2, CYAN); 916 } 917 } 918 } else { 919 if 920 (dnchan == 0) { 921 hkdaytempdisp = hkdaytempdisp + .5; 922 Tft.fillRectangle(48, 923 230, 72, 15, BLACK); 924 Tft.drawFloat(hkdaytempdisp, 48, 230, 2, CYAN); 925 926 if (ambitempday == 0 ) { 927 ambitempday = ambitempday 928 + 1; 929 Tft.fillRectangle(84, 270, 36, 15, BLACK); 930 Tft.drawNumber(ambitempday, 931 84, 270, 2, CYAN); 932 } 933 } else { 934 hknighttempdisp 935 = hknighttempdisp + .5; 936 Tft.fillRectangle(48, 230, 72, 15, BLACK); 937 938 Tft.drawFloat(hknighttempdisp, 48, 230, 2, CYAN); 939 if 940 (ambitempnight == 0 ) { 941 ambitempnight = ambitempnight + 1; 942 943 Tft.fillRectangle(84, 270, 36, 15, BLACK); 944 Tft.drawNumber(ambitempnight, 945 84, 270, 2, CYAN); 946 } 947 } 948 } 949 } 950 if 951 ((p.x > 200) && (p.x < 230) && (p.y > 220) && (p.y < 250)) { //- set 952 if 953 (night == 1) { 954 if (dnchan == 0) { 955 hknighttempdisp = 956 hknighttempdisp - .5; 957 Tft.fillRectangle(48, 230, 72, 15, BLACK); 958 959 Tft.drawFloat(hknighttempdisp, 48, 230, 2, CYAN); 960 if 961 (ambitempnight == 0 ) { 962 ambitempnight = ambitempnight + 1; 963 964 Tft.fillRectangle(84, 270, 36, 15, BLACK); 965 Tft.drawNumber(ambitempnight, 966 84, 270, 2, CYAN); 967 } 968 } else { 969 hkdaytempdisp 970 = hkdaytempdisp - .5; 971 Tft.fillRectangle(48, 230, 72, 15, BLACK); 972 973 Tft.drawFloat(hkdaytempdisp, 48, 230, 2, CYAN); 974 if (ambitempday 975 == 0 ) { 976 ambitempday = ambitempday + 1; 977 Tft.fillRectangle(84, 978 270, 36, 15, BLACK); 979 Tft.drawNumber(ambitempday, 84, 270, 2, CYAN); 980 981 } 982 } 983 } else { 984 if (dnchan == 0) { 985 986 hkdaytempdisp = hkdaytempdisp * .5; 987 Tft.fillRectangle(48, 988 230, 72, 15, BLACK); 989 Tft.drawFloat(hkdaytempdisp, 48, 230, 2, CYAN); 990 991 if (ambitempday == 0 ) { 992 ambitempday = ambitempday 993 + 1; 994 Tft.fillRectangle(84, 270, 36, 15, BLACK); 995 Tft.drawNumber(ambitempday, 996 84, 270, 2, CYAN); 997 } 998 } else { 999 hknighttempdisp 1000 = hknighttempdisp - .5; 1001 Tft.fillRectangle(48, 230, 72, 15, BLACK); 1002 1003 Tft.drawFloat(hknighttempdisp, 48, 230, 2, CYAN); 1004 if 1005 (ambitempnight == 0 ) { 1006 ambitempnight = ambitempnight + 1; 1007 1008 Tft.fillRectangle(84, 270, 36, 15, BLACK); 1009 Tft.drawNumber(ambitempnight, 1010 84, 270, 2, CYAN); 1011 } 1012 } 1013 } 1014 } 1015 if 1016 ((p.x > 140) && (p.x < 170) && (p.y > 260) && (p.y < 290)) { //+ day 1017 if 1018 (night == 1) { 1019 if (dnchan == 0) { 1020 ambitempnight = ambitempnight 1021 + 1; 1022 Tft.fillRectangle(84, 270, 36, 15, BLACK); 1023 Tft.drawNumber(ambitempnight, 1024 84, 270, 2, CYAN); 1025 } else { 1026 ambitempday = ambitempday 1027 + 1; 1028 Tft.fillRectangle(84, 270, 36, 15, BLACK); 1029 Tft.drawNumber(ambitempday, 1030 84, 270, 2, CYAN); 1031 } 1032 } else { 1033 if (dnchan == 1034 0) { 1035 ambitempday = ambitempday + 1; 1036 Tft.fillRectangle(84, 1037 270, 36, 15, BLACK); 1038 Tft.drawNumber(ambitempday, 84, 270, 2, CYAN); 1039 1040 } else { 1041 ambitempnight = ambitempnight + 1; 1042 Tft.fillRectangle(84, 1043 270, 36, 15, BLACK); 1044 Tft.drawNumber(ambitempnight, 84, 270, 2, CYAN); 1045 1046 } 1047 } 1048 } 1049 if ((p.x > 200) && (p.x < 230) && (p.y 1050 > 260) && (p.y < 290)) { //- day 1051 if (night == 1) { 1052 if (dnchan 1053 == 0) { 1054 ambitempnight = ambitempnight - 1; 1055 Tft.fillRectangle(84, 1056 270, 36, 15, BLACK); 1057 Tft.drawNumber(ambitempnight, 84, 270, 2, CYAN); 1058 1059 } else { 1060 ambitempday = ambitempday - 1; 1061 Tft.fillRectangle(84, 1062 270, 36, 15, BLACK); 1063 Tft.drawNumber(ambitempday, 84, 270, 2, CYAN); 1064 1065 } 1066 } else { 1067 if (dnchan == 0) { 1068 ambitempday 1069 = ambitempday - 1; 1070 Tft.fillRectangle(84, 270, 36, 15, BLACK); 1071 1072 Tft.drawNumber(ambitempday, 84, 270, 2, CYAN); 1073 } else { 1074 1075 ambitempnight = ambitempnight - 1; 1076 Tft.fillRectangle(84, 1077 270, 36, 15, BLACK); 1078 Tft.drawNumber(ambitempnight, 84, 270, 2, CYAN); 1079 1080 } 1081 } 1082 } 1083 if ((p.x > 60) && (p.x < 180) && (p.y 1084 > 300) && (p.y < 330)) { 1085 if (dnchan == 0) { 1086 dnchan = 1; 1087 1088 } else { 1089 dnchan = 0; 1090 } 1091 npage = 1; 1092 1093 } 1094 } 1095 if (page == 3) { 1096 if ((p.x > 60) && (p.x < 90) && 1097 (p.y > 170) && (p.y < 200)) { //+ humidity 1098 humidminset = humidminset 1099 + 1; 1100 if (humidday == 0) { 1101 humidday = 1; 1102 Tft.fillRectangle(60, 1103 210, 36, 15, BLACK); 1104 Tft.drawNumber(humidday, 60, 210, 2, CYAN); 1105 1106 } 1107 Tft.fillRectangle(72, 150, 60, 15, BLACK); 1108 Tft.drawFloat(humidminset, 1109 72, 150, 2, CYAN); 1110 Tft.fillRectangle(146, 150, 60, 15, BLACK); 1111 Tft.drawFloat(humidminset 1112 + 10, 146, 150, 2, CYAN); 1113 } 1114 if ((p.x > 120) && (p.x < 150) && 1115 (p.y > 170) && (p.y < 200)) { // - Humidity 1116 humidminset = humidminset 1117 - 1; 1118 if (humidday == 0) { 1119 humidday = 1; 1120 Tft.fillRectangle(60, 1121 210, 36, 15, BLACK); 1122 Tft.drawNumber(humidday, 60, 210, 2, CYAN); 1123 1124 } 1125 Tft.fillRectangle(72, 150, 60, 15, BLACK); 1126 Tft.drawFloat(humidminset, 1127 72, 150, 2, CYAN); 1128 Tft.fillRectangle(146, 150, 60, 15, BLACK); 1129 Tft.drawFloat(humidminset 1130 + 10, 146, 150, 2, CYAN); 1131 } 1132 if ((p.x > 60) && (p.x < 90) && (p.y 1133 > 230) && (p.y < 260)) { // + humid day 1134 humidday = humidday + 1; 1135 1136 Tft.fillRectangle(60, 210, 36, 15, BLACK); 1137 Tft.drawNumber(humidday, 1138 60, 210, 2, CYAN); 1139 } 1140 if ((p.x > 120) && (p.x < 150) && (p.y > 1141 230) && (p.y < 260)) { // - humid day 1142 humidday = humidday - 1; 1143 if 1144 (humidday < 0) { 1145 humidday = 0; 1146 } 1147 Tft.fillRectangle(60, 1148 210, 36, 15, BLACK); 1149 Tft.drawNumber(humidday, 60, 210, 2, CYAN); 1150 1151 } 1152 } 1153 if (page == 4) { 1154 if ((p.x > 60) && (p.x < 90) && 1155 (p.y > 130) && (p.y < 160)) { // + min on sunrise 1156 srminutesetdisp = srminutesetdisp 1157 + 1; 1158 if (srminutesetdisp > 59) { 1159 srminutesetdisp = 0; 1160 1161 srhoursetdisp = srhoursetdisp + 1; 1162 if (srhoursetdisp > 24) 1163 { 1164 srhoursetdisp = 0; 1165 } 1166 } 1167 if (srday 1168 == 0) { 1169 srday = 1; 1170 Tft.fillRectangle(60, 170, 36, 15, 1171 BLACK); 1172 Tft.drawNumber(srday, 60, 170, 2, CYAN); 1173 } 1174 Tft.fillRectangle(110, 1175 110, 24, 15, BLACK); 1176 if (srhoursetdisp > 9) { 1177 Tft.drawNumber(srhoursetdisp, 1178 110, 110, 2, CYAN); 1179 } else { 1180 Tft.drawNumber(0, 110, 110, 1181 2, CYAN); 1182 Tft.drawNumber(srhoursetdisp, 122, 110, 2, CYAN); 1183 } 1184 1185 Tft.fillRectangle(146, 110, 24, 15, BLACK); 1186 if (srminutesetdisp 1187 > 9) { 1188 Tft.drawNumber(srminutesetdisp, 146, 110, 2, CYAN); 1189 } 1190 else { 1191 Tft.drawNumber(0, 146, 110, 2, CYAN); 1192 Tft.drawNumber(srminutesetdisp, 1193 158, 110, 2, CYAN); 1194 } 1195 } 1196 if ((p.x > 120) && (p.x < 150) 1197 && (p.y > 130) && (p.y < 160)) { // - min on sunrise 1198 srminutesetdisp 1199 = srminutesetdisp - 1; 1200 if (srminutesetdisp < 0) { 1201 srminutesetdisp 1202 = 59; 1203 srhoursetdisp = srhoursetdisp - 1; 1204 if (srhoursetdisp 1205 < 0) { 1206 srhoursetdisp = 24; 1207 } 1208 } 1209 if 1210 (srday == 0) { 1211 srday = 1; 1212 Tft.fillRectangle(60, 170, 36, 1213 15, BLACK); 1214 Tft.drawNumber(srday, 60, 170, 2, CYAN); 1215 } 1216 1217 Tft.fillRectangle(110, 110, 24, 15, BLACK); 1218 if (srhoursetdisp 1219 > 9) { 1220 Tft.drawNumber(srhoursetdisp, 110, 110, 2, CYAN); 1221 } 1222 else { 1223 Tft.drawNumber(0, 110, 110, 2, CYAN); 1224 Tft.drawNumber(srhoursetdisp, 1225 122, 110, 2, CYAN); 1226 } 1227 Tft.fillRectangle(146, 110, 24, 15, 1228 BLACK); 1229 if (srminutesetdisp > 9) { 1230 Tft.drawNumber(srminutesetdisp, 1231 146, 110, 2, CYAN); 1232 } else { 1233 Tft.drawNumber(0, 146, 110, 1234 2, CYAN); 1235 Tft.drawNumber(srminutesetdisp, 158, 110, 2, CYAN); 1236 } 1237 1238 } 1239 if ((p.x > 110) && (p.x < 140) && (p.y > 170) && (p.y < 200)) { 1240 // +day set for sunrise 1241 srday = srday + 1; 1242 Tft.fillRectangle(60, 1243 170, 36, 15, BLACK); 1244 Tft.drawNumber(srday, 60, 170, 2, CYAN); 1245 } 1246 1247 if ((p.x > 170) && (p.x < 200) && (p.y > 170) && (p.y < 200)) { // - day set 1248 for sunrise 1249 srday = srday - 1; 1250 if (srday < 0) { 1251 srday 1252 = 0; 1253 } 1254 Tft.fillRectangle(60, 170, 36, 15, BLACK); 1255 Tft.drawNumber(srday, 1256 60, 170, 2, CYAN); 1257 } 1258 if ((p.x > 60) && (p.x < 90) && (p.y > 230) 1259 && (p.y < 260)) { // + min sunset 1260 ssminutesetdisp = ssminutesetdisp + 1261 1; 1262 if (ssminutesetdisp > 59) { 1263 ssminutesetdisp = 0; 1264 1265 sshoursetdisp = sshoursetdisp + 1; 1266 if (sshoursetdisp > 24) 1267 { 1268 sshoursetdisp = 0; 1269 } 1270 } 1271 if (ssday 1272 == 0) { 1273 ssday = 1; 1274 Tft.fillRectangle(60, 270, 36, 15, 1275 BLACK); 1276 Tft.drawNumber(ssday, 60, 270, 2, CYAN); 1277 } 1278 Tft.fillRectangle(110, 1279 210, 24, 15, BLACK); 1280 if (sshoursetdisp > 9) { 1281 Tft.drawNumber(sshoursetdisp, 1282 110, 210, 2, CYAN); 1283 } else { 1284 Tft.drawNumber(0, 110, 210, 1285 2, CYAN); 1286 Tft.drawNumber(sshoursetdisp, 122, 210, 2, CYAN); 1287 } 1288 1289 Tft.fillRectangle(146, 210, 24, 15, BLACK); 1290 if (ssminutesetdisp 1291 > 9) { 1292 Tft.drawNumber(ssminutesetdisp, 146, 210, 2, CYAN); 1293 } 1294 else { 1295 Tft.drawNumber(0, 146, 210, 2, CYAN); 1296 Tft.drawNumber(ssminutesetdisp, 1297 158, 210, 2, CYAN); 1298 } 1299 } 1300 if ((p.x > 120) && (p.x < 150) 1301 && (p.y > 230) && (p.y < 260)) { //- min for sunset 1302 ssminutesetdisp = 1303 ssminutesetdisp - 1; 1304 if (ssminutesetdisp < 0) { 1305 ssminutesetdisp 1306 = 59; 1307 sshoursetdisp = sshoursetdisp - 1; 1308 if (sshoursetdisp 1309 < 0) { 1310 sshoursetdisp = 24; 1311 } 1312 } 1313 if 1314 (ssday == 0) { 1315 ssday = 1; 1316 Tft.fillRectangle(60, 270, 36, 1317 15, BLACK); 1318 Tft.drawNumber(ssday, 60, 270, 2, CYAN); 1319 } 1320 1321 Tft.fillRectangle(110, 210, 24, 15, BLACK); 1322 if (sshoursetdisp 1323 > 9) { 1324 Tft.drawNumber(sshoursetdisp, 110, 210, 2, CYAN); 1325 } 1326 else { 1327 Tft.drawNumber(0, 110, 210, 2, CYAN); 1328 Tft.drawNumber(sshoursetdisp, 1329 122, 210, 2, CYAN); 1330 } 1331 Tft.fillRectangle(146, 210, 24, 15, 1332 BLACK); 1333 if (ssminutesetdisp > 9) { 1334 Tft.drawNumber(ssminutesetdisp, 1335 146, 210, 2, CYAN); 1336 } else { 1337 Tft.drawNumber(0, 146, 210, 1338 2, CYAN); 1339 Tft.drawNumber(ssminutesetdisp, 158, 210, 2, CYAN); 1340 } 1341 1342 } 1343 if ((p.x > 110) && (p.x < 140) && (p.y > 270) && (p.y < 300)) { 1344 //+ day for sunset 1345 ssday = ssday + 1; 1346 Tft.fillRectangle(60, 1347 270, 36, 15, BLACK); 1348 Tft.drawNumber(ssday, 60, 270, 2, CYAN); 1349 } 1350 1351 if ((p.x > 170) && (p.x < 200) && (p.y > 270) && (p.y < 300)) { //- day set 1352 for sunset 1353 ssday = ssday - 1; 1354 if (ssday < 0) { 1355 ssday 1356 = 0; 1357 } 1358 Tft.fillRectangle(60, 270, 36, 15, BLACK); 1359 Tft.drawNumber(ssday, 1360 60, 270, 2, CYAN); 1361 } 1362 } 1363 tpage = minute() + 5; 1364 if (tpage 1365 > 59) { 1366 tpage = tpage - 60; 1367 } 1368 } 1369 //page change 1370 if 1371 (npage == 1) { 1372 if (page == 1) { 1373 allpage(); 1374 pageone(); 1375 1376 } 1377 if (page == 2) { 1378 allpage(); 1379 pagetwo(); 1380 } 1381 1382 if (page == 3) { 1383 allpage(); 1384 pagethree(); 1385 } 1386 if 1387 (page == 4) { 1388 allpage(); 1389 pagefour(); 1390 } 1391 if (page 1392 == 5) { 1393 allpage(); 1394 pagefive(); 1395 } 1396 npage = 0; 1397 1398 tpage = minute() + 5; 1399 if (tpage > 59) { 1400 tpage = tpage - 60; 1401 1402 } 1403 } 1404 if (tpage == minute()) { 1405 page = page + 1; 1406 dnchan 1407 = 0; 1408 if (page > 5) { 1409 page = 1; 1410 } 1411 npage = 1; 1412 } 1413 1414 //time change 1415 if (minutenow != minute()) { 1416 Tft.fillRectangle(56, 20, 1417 25, 15, BLACK); 1418 if (minute() > 9) { 1419 Tft.drawNumber(minute(), 56, 1420 20, 2, CYAN); 1421 } else { 1422 Tft.drawNumber(0, 56, 20, 2, CYAN); 1423 Tft.drawNumber(minute(), 1424 68, 20, 2, CYAN); 1425 } 1426 minutenow = minute(); 1427 } 1428 if (daynow != 1429 day()) { 1430 settemp(); 1431 daynow = day(); 1432 //temp day - 1 1433 if 1434 (ambitempday > 0) { 1435 ambitempday = ambitempday - 1; 1436 } 1437 if (ambitempnight 1438 > 0) { 1439 ambitempnight = ambitempnight - 1; 1440 } 1441 //humid day - 1442 1 1443 if (humidday > 0) { 1444 humidday = humidday - 1; 1445 } 1446 //SR/SS 1447 day - 1 1448 if (ssday > 0) { 1449 ssday = ssday - 1; 1450 } 1451 if (srday 1452 > 0) { 1453 srday = srday - 1; 1454 } 1455 } 1456 if (hournow != hour()) { 1457 1458 dlstime[5] = (year() - 2000); 1459 dlstime[4] = month(); 1460 dlstime[3] 1461 = day(); 1462 dlstime[2] = hour(); 1463 tardis.DST(dlstime); 1464 Tft.fillRectangle(20, 1465 20, 25, 15, BLACK); 1466 if (dlstime[2] > 9) { 1467 Tft.drawNumber(dlstime[2], 1468 20, 20, 2, CYAN); 1469 } else { 1470 Tft.drawNumber(0, 20, 20, 2, CYAN); 1471 1472 Tft.drawNumber(dlstime[2], 32, 20, 2, CYAN); 1473 Tft.fillRectangle(144, 1474 20, 25, 15, BLACK); 1475 } 1476 if (day() > 9) { 1477 Tft.drawNumber(day(), 1478 144, 20, 2, CYAN); 1479 } else { 1480 Tft.drawNumber(0, 144, 20, 2, CYAN); 1481 1482 Tft.drawNumber(day(), 156, 20, 2, CYAN); 1483 } 1484 hournow = hour(); 1485 1486 myDoc = "daynow.txt"; 1487 myData = String(daynow); 1488 writesd(); 1489 1490 myDoc = "hd.txt"; 1491 myData = String(humidday); 1492 writesd(); 1493 1494 myDoc = "hs.txt"; 1495 myData = String(humidminset); 1496 writesd(); 1497 1498 myDoc = "atd.txt"; 1499 myData = String(ambitempday); 1500 writesd(); 1501 1502 myDoc = "atdset.txt"; 1503 myData = String(hkdaytempdisp); 1504 writesd(); 1505 1506 myDoc = "atn.txt"; 1507 myData = String(ambitempnight); 1508 writesd(); 1509 1510 myDoc = "atnset.txt"; 1511 myData = String(hknighttempdisp); 1512 writesd(); 1513 1514 myDoc = "ssetday.txt"; 1515 myData = String(ssday); 1516 writesd(); 1517 1518 myDoc = "sriseday.txt"; 1519 myData = String(srday); 1520 writesd(); 1521 1522 myDoc = "ssetmin.txt"; 1523 myData = String(ssminutesetdisp); 1524 writesd(); 1525 1526 myDoc = "srisemin.txt"; 1527 myData = String(srminutesetdisp); 1528 writesd(); 1529 1530 myDoc = "ssethour.txt"; 1531 myData = String(sshoursetdisp); 1532 writesd(); 1533 1534 myDoc = "sriseh.txt"; 1535 myData = String(srhoursetdisp); 1536 writesd(); 1537 1538 delay(10); 1539 rsetFunc(); 1540 } 1541 if (monthnow != month()) { 1542 Tft.fillRectangle(120, 1543 20, 25, 15, BLACK); 1544 if (month() > 9) { 1545 Tft.drawNumber(month(), 108, 1546 20, 2, CYAN); 1547 } else { 1548 Tft.drawNumber(0, 108, 20, 2, CYAN); 1549 1550 Tft.drawNumber(month(), 120, 20, 2, CYAN); 1551 } 1552 monthnow = month(); 1553 1554 } 1555 if (yearnow != year()) { 1556 Tft.fillRectangle(180, 20, 48, 15, BLACK); 1557 1558 Tft.drawNumber(year(), 180, 20, 2, CYAN); 1559 yearnow = year(); 1560 } 1561 1562 //ambient temp and humid 1563 ambitempcur = dht.readTemperature(true); 1564 if 1565 (ambitempcur != ambitempdisp) { 1566 ambitempdisp = ambitempcur; 1567 if (page 1568 == 2) { 1569 Tft.fillRectangle(0, 110, 72, 25, BLACK); 1570 Tft.drawFloat(ambitempdisp, 1571 0, 115, 2, CYAN); 1572 } 1573 } 1574 humidcur = dht.readHumidity(); 1575 if (humidcur 1576 != humiddisp) { 1577 humiddisp = humidcur; 1578 if (page == 3) { 1579 Tft.fillRectangle(0, 1580 110, 92, 30, BLACK); 1581 Tft.drawFloat(humiddisp, 0, 115, 3, CYAN); 1582 } 1583 1584 } 1585 sensor_hr1.requestTemperatures(); 1586 hr1tempcur = 32 + (sensor_hr1.getTempCByIndex(0) 1587 * 1.8); 1588 if (hr1tempcur != hr1tempdisp) { 1589 hr1tempdisp = hr1tempcur; 1590 1591 if (page == 2) { 1592 Tft.fillRectangle(0, 150, 72, 25, BLACK); 1593 Tft.drawFloat(hr1tempdisp, 1594 0, 155, 2, CYAN - 8); 1595 } 1596 } 1597 roomtemp = (RTC.temperature() / 4) * 1598 9 / 5 + 32; 1599 if (roomtemp != roomtempdisp) { 1600 roomtempdisp = roomtemp; 1601 1602 if (page == 5) { 1603 Tft.fillRectangle(120, 255, 62, 25, BLACK); 1604 Tft.drawFloat(roomtempdisp, 1605 120, 255, 2, CYAN); 1606 } 1607 } 1608 if ((hr1tempdisp < 88) && (hr1sen == 0)) 1609 { 1610 digitalWrite(hrock1, HIGH); 1611 if ((page == 5) && (hr1pwr == 0)) { 1612 1613 Tft.fillRectangle(0, 223, 110, 12, GREEN); 1614 Tft.drawString("Heat 1615 Rock 1: ON", 0, 225, 1, BLACK); 1616 } 1617 hr1pwr = 1; 1618 } 1619 if ((hr1tempdisp 1620 > 96) || (hr1sen == 1)) { 1621 digitalWrite(hrock1, LOW); 1622 if ((page == 1623 5) && (hr1pwr == 1)) { 1624 Tft.fillRectangle(0, 223, 110, 12, RED); 1625 Tft.drawString("Heat 1626 Rock 1: OFF", 0, 225, 1, CYAN); 1627 } 1628 hr1pwr = 0; 1629 } 1630 sensor_hr2.requestTemperatures(); 1631 1632 hr2tempcur = 32 + (sensor_hr2.getTempCByIndex(0) * 1.8); 1633 if (hr2tempcur != 1634 hr2tempdisp) { 1635 hr2tempdisp = hr2tempcur; 1636 if (page == 2) { 1637 Tft.fillRectangle(0, 1638 190, 72, 25, BLACK); 1639 Tft.drawFloat(hr2tempdisp, 0, 195, 2, CYAN); 1640 } 1641 1642 } 1643 if (night == 1) { 1644 if ((hr2tempdisp < hknighttempdisp - .5) && (hr2sen 1645 == 0)) { 1646 digitalWrite(hrock2, HIGH); 1647 if ((page == 5) && (hr2pwr 1648 == 0)) { 1649 Tft.fillRectangle(115, 223, 110, 12, GREEN); 1650 Tft.drawString("Heat 1651 Rock 2: ON", 115, 225, 1, BLACK); 1652 } 1653 hr2pwr = 1; 1654 } 1655 1656 if ((hr2tempdisp > hknighttempdisp + .5) || (hr2sen == 1)) { 1657 digitalWrite(hrock2, 1658 LOW); 1659 if ((page == 5) && (hr2pwr == 1)) { 1660 Tft.fillRectangle(115, 1661 223, 110, 12, RED); 1662 Tft.drawString("Heat Rock 2: OFF", 115, 225, 1, 1663 CYAN); 1664 } 1665 hr2pwr = 0; 1666 } 1667 } else { 1668 if ((hr2tempdisp 1669 < hkdaytempdisp - .5) && (hr2sen == 0)) { 1670 digitalWrite(hrock2, HIGH); 1671 1672 if ((page == 5) && (hr2pwr == 0)) { 1673 Tft.fillRectangle(115, 223, 1674 110, 12, GREEN); 1675 Tft.drawString("Heat Rock 2: ON", 115, 225, 1, BLACK); 1676 1677 } 1678 hr2pwr = 1; 1679 } 1680 if ((hr2tempdisp > hkdaytempdisp + 1681 .5) || (hr2sen == 1)) { 1682 digitalWrite(hrock2, LOW); 1683 if ((page == 1684 5) && (hr2pwr == 1)) { 1685 Tft.fillRectangle(115, 223, 110, 12, RED); 1686 1687 Tft.drawString("Heat Rock 2: OFF", 115, 225, 1, CYAN); 1688 } 1689 1690 hr2pwr = 0; 1691 } 1692 } 1693 if (ambitempday == 0) { 1694 settemp(); 1695 1696 if (hkdaytemp != hkdaytempdisp) { 1697 hkdaytempdisp = hkdaytemp; 1698 if 1699 ((page == 2) && (night == 0)) { 1700 Tft.fillRectangle(48, 230, 72, 30, BLACK); 1701 1702 Tft.drawFloat(hkdaytempdisp, 48, 230, 2, CYAN); 1703 } 1704 } 1705 1706 } 1707 if (ambitempnight == 0) { 1708 settemp(); 1709 if (hknighttemp != hknighttempdisp) 1710 { 1711 hknighttempdisp = hknighttemp; 1712 if ((page == 2) && (night == 1713 1)) { 1714 Tft.fillRectangle(48, 230, 72, 30, BLACK); 1715 Tft.drawFloat(hknighttempdisp, 1716 48, 230, 2, CYAN); 1717 } 1718 } 1719 } 1720 if (humidday == 0) { 1721 if 1722 ((page == 3) && (humidminset != humidmin)) { 1723 Tft.fillRectangle(72, 150, 1724 60, 15, BLACK); 1725 Tft.fillRectangle(146, 150, 60, 15, BLACK); 1726 Tft.drawFloat 1727 (humidminset, 72, 150, 2, CYAN); 1728 Tft.drawFloat(humidminset + 10, 146, 150, 1729 2, CYAN); 1730 } 1731 humidminset = humidmin; 1732 } 1733 if (ambithsen == 0) 1734 { 1735 if (night == 0) { 1736 if (ambitempdisp < (hkdaytempdisp - .5)) { 1737 1738 digitalWrite(hlamp, HIGH); 1739 if ((page == 5) && (hlpwr == 0)) { 1740 1741 Tft.fillRectangle(0, 208, 110, 12, GREEN); 1742 Tft.drawString("Heat 1743 Lamp: ON", 0, 210, 1, BLACK); 1744 } 1745 hlpwr = 1; 1746 } 1747 1748 if (ambitempdisp > (hkdaytempdisp + .5)) { 1749 digitalWrite(hlamp, 1750 LOW); 1751 if ((page == 5) && (hlpwr == 1)) { 1752 Tft.fillRectangle(0, 1753 208, 110, 12, RED); 1754 Tft.drawString("Heat Lamp: OFF", 0, 210, 1, CYAN); 1755 1756 } 1757 hlpwr = 0; 1758 } 1759 if (ambitempdisp < (hkdaytempdisp 1760 + 2)) { 1761 digitalWrite(fan, LOW); 1762 if ((page == 5) && (fanpwr 1763 == 1)) { 1764 Tft.fillRectangle(115, 208, 110, 12, RED); 1765 Tft.drawString("Fan: 1766 OFF", 115, 210, 1, CYAN); 1767 } 1768 fanpwr = 0; 1769 } 1770 if 1771 (ambitempdisp > (hkdaytempdisp + 5)) { 1772 digitalWrite(fan, HIGH); 1773 if 1774 ((page == 5) && (fanpwr == 0)) { 1775 Tft.fillRectangle(115, 208, 110, 12, 1776 GREEN); 1777 Tft.drawString("Fan: ON", 115, 210, 1, BLACK); 1778 } 1779 1780 fanpwr = 1; 1781 } 1782 } else { 1783 if (ambitempdisp < (hknighttempdisp 1784 - .5)) { 1785 digitalWrite(hlamp, HIGH); 1786 if ((page == 5) && (hlpwr 1787 == 0)) { 1788 Tft.fillRectangle(0, 208, 110, 12, GREEN); 1789 Tft.drawString("Heat 1790 Lamp: ON", 0, 210, 1, BLACK); 1791 } 1792 hlpwr = 1; 1793 } 1794 1795 if (ambitempdisp > (hknighttempdisp + .5)) { 1796 digitalWrite(hlamp, 1797 LOW); 1798 if ((page == 5) && (hlpwr == 1)) { 1799 Tft.fillRectangle(0, 1800 208, 110, 12, RED); 1801 Tft.drawString("Heat Lamp: OFF", 0, 210, 1, CYAN); 1802 1803 } 1804 hlpwr = 0; 1805 } 1806 if (ambitempdisp < (hknighttempdisp 1807 + 2)) { 1808 digitalWrite(fan, LOW); 1809 if ((page == 5) && (fanpwr 1810 == 1)) { 1811 Tft.fillRectangle(115, 208, 110, 12, RED); 1812 Tft.drawString("Fan: 1813 OFF", 115, 210, 1, CYAN); 1814 } 1815 fanpwr = 0; 1816 } 1817 if 1818 (ambitempdisp > (hknighttempdisp + 5)) { 1819 digitalWrite(fan, HIGH); 1820 1821 if ((page == 5) && (fanpwr == 0)) { 1822 Tft.fillRectangle(115, 1823 208, 110, 12, GREEN); 1824 Tft.drawString("Fan: ON", 115, 210, 1, BLACK); 1825 1826 } 1827 fanpwr = 1; 1828 } 1829 } 1830 if ((humiddisp < humidminset) 1831 && (fanpwr == 0) && (foggersen == 0)) { 1832 digitalWrite(fogger, HIGH); 1833 1834 if ((page == 5) && (foggerpwr == 0)) { 1835 Tft.fillRectangle(0, 238, 1836 110, 12, GREEN); 1837 Tft.drawString("Fogger: ON", 0 1838 , 1839 240, 1, BLACK); 1840 } 1841 foggerpwr = 1; 1842 } 1843 if ((humiddisp 1844 > (humidminset + 10)) || (fanpwr == 1) || (foggersen == 1)) { 1845 digitalWrite(fogger, 1846 LOW); 1847 if ((page == 5) && (foggerpwr == 1)) { 1848 Tft.fillRectangle(0, 1849 238, 110, 12, RED); 1850 Tft.drawString("Fogger: OFF", 0, 240, 1, CYAN); 1851 1852 } 1853 foggerpwr = 0; 1854 } 1855 } else { 1856 digitalWrite(hlamp, 1857 LOW); 1858 digitalWrite(fogger, LOW); 1859 if ((page == 5) && ((hlpwr == 1) 1860 || (foggerpwr == 1))) { 1861 Tft.fillRectangle(0, 208, 110, 12, RED); 1862 Tft.drawString("Heat 1863 Lamp: OFF", 0, 210, 1, CYAN); 1864 Tft.fillRectangle(115, 238, 110, 12, RED); 1865 1866 Tft.drawString("Fogger: OFF", 115, 240, 1, CYAN); 1867 } 1868 foggerpwr 1869 = 0; 1870 hlpwr = 0; 1871 } 1872 //light cycle set 1873 if (srday == 0) { 1874 1875 todaysr[3] = day(); 1876 todaysr[4] = month(); 1877 todaysr[5] = year(); 1878 1879 tardis.SunRise(todaysr); 1880 tardis.DST(todaysr); 1881 srhourset = todaysr[2]; 1882 1883 srminuteset = todaysr[1]; 1884 if (page == 4) { 1885 if (srhoursetdisp 1886 != srhourset) { 1887 Tft.fillRectangle(110, 110, 25, 14, BLACK); 1888 if 1889 (srhourset > 9) { 1890 Tft.drawNumber(srhourset, 110, 110, 2, CYAN); 1891 1892 } else { 1893 Tft.drawNumber(0, 110, 110, 2, CYAN); 1894 Tft.drawNumber(srhourset, 1895 122, 110, 2, CYAN); 1896 } 1897 } 1898 if (srminutesetdisp != srminuteset) 1899 { 1900 Tft.fillRectangle(146, 110, 25, 14, BLACK); 1901 if (srminuteset 1902 > 9) { 1903 Tft.drawNumber(srminuteset, 146, 110, 2, CYAN); 1904 } 1905 else { 1906 Tft.drawNumber(0, 146, 110, 2, CYAN); 1907 Tft.drawNumber(srminuteset, 1908 158, 110, 2, CYAN); 1909 } 1910 } 1911 } 1912 srhoursetdisp = srhourset; 1913 1914 srminutesetdisp = srminuteset; 1915 } 1916 if (ssday == 0) { 1917 todayss[3] 1918 = day(); 1919 todayss[4] = month(); 1920 todayss[5] = year(); 1921 tardis.SunSet(todayss); 1922 1923 tardis.DST(todayss); 1924 sshourset = todayss[2]; 1925 ssminuteset = todayss[1]; 1926 1927 if (page == 4) { 1928 if (sshoursetdisp != sshourset) { 1929 Tft.fillRectangle(110, 1930 210, 25, 14, BLACK); 1931 if (sshourset > 9) { 1932 Tft.drawNumber(sshourset, 1933 110, 210, 2, CYAN); 1934 } else { 1935 Tft.drawNumber(0, 110, 210, 1936 2, CYAN); 1937 Tft.drawNumber(sshourset, 122, 210, 2, CYAN); 1938 } 1939 1940 } 1941 if (ssminutesetdisp != ssminuteset) { 1942 Tft.fillRectangle(146, 1943 210, 25, 14, BLACK); 1944 if (ssminuteset > 9) { 1945 Tft.drawNumber(ssminuteset, 1946 146, 210, 2, CYAN); 1947 } else { 1948 Tft.drawNumber(0, 146, 210, 1949 2, CYAN); 1950 Tft.drawNumber(ssminuteset, 158, 210, 2, CYAN); 1951 } 1952 1953 } 1954 } 1955 sshoursetdisp = sshourset; 1956 ssminutesetdisp = ssminuteset; 1957 1958 } 1959 timenow = (100 * dlstime[2]) + dlstime[1]; 1960 timesr = (100 * srhoursetdisp) 1961 + srminutesetdisp; 1962 timess = (100 * sshoursetdisp) + ssminutesetdisp; 1963 if 1964 ((timenow > timesr) && (timenow < timess)) { 1965 night = 0; 1966 digitalWrite(dnlamp, 1967 HIGH); 1968 if ((page == 5) && (dlpwr == 0)) { 1969 Tft.fillRectangle(0, 193, 1970 110, 12, GREEN); 1971 Tft.drawString("Day Light: ON", 0, 195, 1, BLACK); 1972 1973 Tft.fillRectangle(115, 193, 110, 12, RED); 1974 Tft.drawString("Night 1975 Light: OFF", 115, 195, 1, CYAN); 1976 } 1977 dlpwr = 1; 1978 } else { 1979 night 1980 = 1; 1981 digitalWrite(dnlamp, LOW); 1982 if ((page == 5) && (dlpwr == 1)) { 1983 1984 Tft.fillRectangle(0, 193, 110, 12, RED); 1985 Tft.drawString("Day Light: 1986 OFF", 0, 195, 1, CYAN); 1987 Tft.fillRectangle(115, 193, 110, 12, GREEN); 1988 1989 Tft.drawString("Night Light: ON", 115, 195, 1, BLACK); 1990 } 1991 dlpwr 1992 = 0; 1993 } 1994 //water level low or high 1995 if (digitalRead(foggerwater) == 1996 HIGH) { 1997 if ((page == 5) && (foggersen == 1)) { 1998 Tft.fillRectangle(135, 1999 128, 130, 12, GREEN); 2000 Tft.drawString("Water Level: GOOD", 135, 130, 1, 2001 BLACK); 2002 Tft.fillRectangle(0, 238, 110, 12, GREEN); 2003 Tft.drawString("Water 2004 Level OK", 0, 240, 1, BLACK); 2005 } 2006 foggersen = 0; 2007 } else { 2008 2009 if ((page == 5) && (foggersen == 0)) { 2010 Tft.fillRectangle(135, 128, 2011 130, 12, RED); 2012 Tft.drawString("Water Level: LOW", 135, 130, 1, CYAN); 2013 2014 Tft.fillRectangle(0, 238, 110, 12, RED); 2015 Tft.drawString("Fill Fogger", 2016 0, 240, 1, CYAN); 2017 } 2018 foggersen = 1; 2019 } 2020 //sensor quality check 2021 2022 if ((isnan(dht.readTemperature(true))) || (isnan(dht.readHumidity()))) { 2023 if 2024 ((ambithsen == 0) && (page == 5)) { 2025 Tft.fillRectangle(0, 128, 130, 12, 2026 RED); 2027 Tft.drawString("Ambient Temp: BAD", 0, 130, 1, CYAN); 2028 } 2029 2030 ambithsen = 1; 2031 } else { 2032 if ((ambithsen == 1) && (page == 5)) { 2033 2034 Tft.fillRectangle(0, 128, 130, 12, GREEN); 2035 Tft.drawString("Ambient 2036 Temp: GOOD", 0, 130, 1, BLACK); 2037 } 2038 ambithsen = 0; 2039 } 2040 if ( 2041 hr1tempdisp < -196) { 2042 if ((hr1sen == 0) && (page == 5)) { 2043 Tft.fillRectangle(0, 2044 143, 130, 12, RED); 2045 Tft.drawString("Heatrock 1 Temp: BAD", 0, 145, 1, 2046 CYAN); 2047 } 2048 hr1sen = 1; 2049 } else { 2050 if ((hr1sen == 1) && (page 2051 == 5)) { 2052 Tft.fillRectangle(0, 143, 130, 12, GREEN); 2053 Tft.drawString("Heatrock 2054 1 Temp: GOOD", 0, 145, 1, BLACK); 2055 } 2056 hr1sen = 0; 2057 } 2058 if (hr2tempdisp 2059 < -196) { 2060 if ((hr2sen == 0) && (page == 5)) { 2061 Tft.fillRectangle(0, 2062 158, 130, 12, RED); 2063 Tft.drawString("Heatrock 2 Temp: BAD", 0, 160, 1, 2064 CYAN); 2065 } 2066 hr2sen = 1; 2067 } else { 2068 if ((hr2sen == 1) && (page 2069 == 5)) { 2070 Tft.fillRectangle(0, 158, 130, 12, GREEN); 2071 Tft.drawString("Heatrock 2072 2 Temp: GOOD", 0, 160, 1, BLACK); 2073 } 2074 hr2sen = 0; 2075 } 2076} 2077////////////////////// 2078void 2079 settemp() { 2080 if (month() == 1) { 2081 hkdaytemp = 82.17647059 + (day() * -0.125237192); 2082 2083 hknighttemp = 69.28571429 + (day() * -0.061443932); 2084 } 2085 if (month() 2086 == 2) { 2087 hkdaytemp = 78.29411765 + (day() * -0.046218487); 2088 hknighttemp 2089 = 67.38095238 + (day() * -0.013605442); 2090 }//end of day/night temps 2091 if (month() 2092 == 3) { 2093 hkdaytemp = 77 + (day() * 0.146110057); 2094 hknighttemp = 67 + 2095 (day() * 0.061443932); 2096 } 2097 if (month() == 4) { 2098 hkdaytemp = 81.52941176 2099 + (day() * 0.129411765); 2100 hknighttemp = 68.9047619 + (day() * 0.088888889); 2101 2102 } 2103 if (month() == 5) { 2104 hkdaytemp = 85.41176471 + (day() * 0.083491461); 2105 2106 hknighttemp = 71.57142857 + (day() * 0.086021505); 2107 } 2108 if (month() == 2109 6) { 2110 hkdaytemp = 88 + (day() * -0.021568627); 2111 hknighttemp = 74.23809524 2112 + (day() * 0.025396825); 2113 } 2114 if (month() == 7) { 2115 hkdaytemp = 87.35294118 2116 + (day() * -0.104364326); 2117 hknighttemp = 75 + (day() * -0.049155146); 2118 2119 } 2120 if (month() == 8) { 2121 hkdaytemp = 84.11764706 + (day() * -0.146110057); 2122 2123 hknighttemp = 73.47619048 + (day() * -0.036866359); 2124 } 2125 if (month() 2126 == 9) { 2127 hkdaytemp = 79.58823529 + (day() * -0.064705882); 2128 hknighttemp 2129 = 72.33333333 + (day() * -0.025396825); 2130 } 2131 if (month() == 10) { 2132 hkdaytemp 2133 = 77.64705882 + (day() * 0.083491461); 2134 hknighttemp = 71.57142857 + (day() 2135 * 0.012288786); 2136 } 2137 if (month() == 11) { 2138 hkdaytemp = 80.23529412 2139 + (day() * 0.107843137); 2140 hknighttemp = 71.95238095 + (day() * 0.012698413); 2141 2142 } 2143 if (month() == 12) { 2144 hkdaytemp = 83.47058824 + (day() * -0.041745731); 2145 2146 hknighttemp = 72.33333333 + (day() * -0.098310292); 2147 } 2148 return hkdaytemp, 2149 hknighttemp; 2150} 2151////////////////////// 2152void allpage() { 2153 Tft.fillScreen(0, 2154 240, 0, 320, BLACK); 2155 Tft.drawString("Harold & Kumar", 0, 0, 2, CYAN); 2156 2157 if (dlstime[2] > 9) { 2158 Tft.drawNumber(dlstime[2], 20, 20, 2, CYAN); 2159 2160 } else { 2161 Tft.drawNumber(0, 20, 20, 2, CYAN); 2162 Tft.drawNumber(dlstime[2], 2163 32, 20, 2, CYAN); 2164 } 2165 Tft.drawChar(':', 44, 20, 2, CYAN); 2166 if (minute() 2167 > 9) { 2168 Tft.drawNumber(minute(), 56, 20, 2, CYAN); 2169 } else { 2170 Tft.drawNumber(0, 2171 56, 20, 2, CYAN); 2172 Tft.drawNumber(minute(), 68, 20, 2, CYAN); 2173 } 2174 if 2175 (month() > 9) { 2176 Tft.drawNumber(month(), 108, 20, 2, CYAN); 2177 } else { 2178 2179 Tft.drawNumber(0, 108, 20, 2, CYAN); 2180 Tft.drawNumber(month(), 120, 20, 2181 2, CYAN); 2182 } 2183 Tft.drawChar('/', 132, 20, 2, CYAN); 2184 if (day() > 9) { 2185 2186 Tft.drawNumber(day(), 144, 20, 2, CYAN); 2187 } else { 2188 Tft.drawNumber(0, 2189 144, 20, 2, CYAN); 2190 Tft.drawNumber(day(), 156, 20, 2, CYAN); 2191 } 2192 Tft.drawChar('/', 2193 168, 20, 2, CYAN); 2194 Tft.drawNumber(year(), 180, 20, 2, CYAN); 2195 Tft.drawRectangle(0, 2196 40, 120, 30, CYAN); 2197 Tft.drawRectangle(0, 70, 120, 30, CYAN); 2198 Tft.drawRectangle(120, 2199 40, 120, 30, CYAN); 2200 Tft.drawRectangle(120, 70, 120, 30, CYAN); 2201 return; 2202} 2203////////////////////// 2204void 2205 pageone() { //Main 2206 Tft.fillRectangle(180, 0, 61, 15, BLACK); 2207 Tft.drawString("Main", 2208 180, 0, 2, CYAN); 2209 Tft.drawString("Temperature", 24, 50, 1, CYAN); 2210 Tft.drawString("Light 2211 Cycle", 24, 80, 1, CYAN); 2212 Tft.drawString("Humidity", 144, 50, 1, CYAN); 2213 2214 Tft.drawString("Settings", 144, 80, 1, CYAN); 2215 Tft.drawString("Harold & 2216 Kumar", 0, 110, 2, CYAN); 2217 Tft.drawString("Python Regius", 0, 140, 2, CYAN); 2218 2219 Tft.drawString("Ball or Royal Python", 0, 170, 2, CYAN); 2220 Tft.drawString("Native 2221 Countries:", 0, 200, 2, CYAN); 2222 Tft.drawString("Niger, Chad, Guinea, Sierra 2223 Leone,", 0, 220, 1, CYAN); 2224 Tft.drawString("Liberia, Ivory Coast, Ghana, Togo,", 2225 0, 235, 1, CYAN); 2226 Tft.drawString("Burkina Faso, Nigeria,", 0, 250, 1, CYAN); 2227 2228 Tft.drawString("Benin and Cameroon", 0, 265, 1, CYAN); 2229 return; 2230} 2231////////////////////// 2232void 2233 pagetwo() { //Temperature 2234 Tft.fillRectangle(180, 0, 61, 15, BLACK); 2235 Tft.drawString("Temp", 2236 180, 0, 2, CYAN); 2237 Tft.drawString("Main", 24, 50, 1, CYAN); 2238 Tft.drawString("Light 2239 Cycle", 24, 80, 1, CYAN); 2240 Tft.drawString("Humidity", 144, 50, 1, CYAN); 2241 2242 Tft.drawString("Settings", 144, 80, 1, CYAN); 2243 Tft.drawFloat(ambitempdisp, 2244 0, 115, 2, CYAN); 2245 Tft.drawChar('o', 85, 110, 1, CYAN); 2246 Tft.drawChar('F', 2247 89, 110, 3, CYAN); 2248 Tft.drawString("Ambient", 110, 110, 3, CYAN); 2249 Tft.drawFloat(hr1tempdisp, 2250 0, 155, 2, CYAN); 2251 Tft.drawChar('o', 85, 150, 1, CYAN); 2252 Tft.drawChar('F', 2253 89, 150, 3, CYAN); 2254 Tft.drawString("Basking", 110, 150, 3, CYAN); 2255 Tft.drawFloat(hr2tempdisp, 2256 0, 195, 2, CYAN); 2257 Tft.drawChar('o', 85, 190, 1, CYAN); 2258 Tft.drawChar('F', 2259 89, 190, 3, CYAN); 2260 Tft.drawString("Burrow", 110, 190, 3, CYAN); 2261 Tft.drawString("Set", 2262 0, 230, 2, CYAN); 2263 Tft.drawChar('o', 120, 230, 1, CYAN); 2264 Tft.drawChar('F', 2265 125, 230, 2, CYAN); 2266 Tft.drawRectangle(140, 220, 30, 30, CYAN); 2267 Tft.drawChar('+', 2268 148, 228, 2, CYAN); 2269 Tft.drawRectangle(200, 220, 30, 30, CYAN); 2270 Tft.drawChar('-', 2271 208, 228, 2, CYAN); 2272 if (dnchan == 0) { 2273 if (night == 1) { 2274 Tft.drawString("Nights", 2275 0, 270, 2, CYAN); 2276 Tft.drawNumber(ambitempnight, 84, 270, 2, CYAN); 2277 2278 Tft.drawFloat(hknighttempdisp, 48, 230, 2, CYAN); 2279 } else { 2280 Tft.drawString("Days", 2281 0, 270, 2, CYAN); 2282 Tft.drawNumber(ambitempday, 84, 270, 2, CYAN); 2283 Tft.drawFloat(hkdaytempdisp, 2284 48, 230, 2, CYAN); 2285 } 2286 } else { 2287 if (night == 0) { 2288 Tft.drawString("Nights", 2289 0, 270, 2, CYAN); 2290 Tft.drawNumber(ambitempnight, 84, 270, 2, CYAN); 2291 2292 Tft.drawFloat(hknighttempdisp, 48, 230, 2, CYAN); 2293 } else { 2294 Tft.drawString("Days", 2295 0, 270, 2, CYAN); 2296 Tft.drawNumber(ambitempday, 84, 270, 2, CYAN); 2297 Tft.drawFloat(hkdaytempdisp, 2298 48, 230, 2, CYAN); 2299 } 2300 } 2301 Tft.drawRectangle(140, 260, 30, 30, CYAN); 2302 2303 Tft.drawChar('+', 148, 268, 2, CYAN); 2304 Tft.drawRectangle(200, 260, 30, 30, 2305 CYAN); 2306 Tft.drawChar('-', 208, 268, 2, CYAN); 2307 Tft.drawRectangle(60, 300, 2308 120, 30, CYAN); 2309 Tft.drawString("Switch", 105, 304, 1, CYAN); 2310 return; 2311} 2312////////////////////// 2313void 2314 pagethree() { //Humidity 2315 Tft.fillRectangle(180, 0, 61, 15, BLACK); 2316 Tft.drawString("Humid", 2317 180, 0, 2, CYAN); 2318 Tft.drawString("Main", 24, 50, 1, CYAN); 2319 Tft.drawString("Light 2320 Cycle", 24, 80, 1, CYAN); 2321 Tft.drawString("Temperature", 144, 50, 1, CYAN); 2322 2323 Tft.drawString("Settings", 144, 80, 1, CYAN); 2324 Tft.drawFloat(humiddisp, 2325 0, 115, 3, CYAN); 2326 Tft.drawChar('O', 147, 113, 1, CYAN); 2327 Tft.drawChar('/', 2328 144, 110, 4, CYAN); 2329 Tft.drawChar('O', 162, 128, 1, CYAN); 2330 Tft.drawString("Range", 2331 0, 150, 2, CYAN); 2332 Tft.drawFloat (humidminset, 72, 150, 2, CYAN); 2333 Tft.drawChar('-', 2334 133, 150, 2, CYAN); 2335 Tft.drawFloat(humidminset + 10, 146, 150, 2, CYAN); 2336 2337 Tft.drawChar('%', 207, 150, 2, CYAN); 2338 Tft.drawRectangle(60, 170, 30, 30, 2339 CYAN); 2340 Tft.drawChar('+', 68, 178, 2, CYAN); 2341 Tft.drawRectangle(120, 170, 2342 30, 30, CYAN); 2343 Tft.drawChar('-', 128, 178, 2, CYAN); 2344 Tft.drawString("Days", 2345 0, 210, 2, CYAN); 2346 Tft.drawNumber(humidday, 60, 210, 2, CYAN); 2347 Tft.drawRectangle(60, 2348 230, 30, 30, CYAN); 2349 Tft.drawChar('+', 68, 238, 2, CYAN); 2350 Tft.drawRectangle(120, 2351 230, 30, 30, CYAN); 2352 Tft.drawChar('-', 128, 238, 2, CYAN); 2353 return; 2354} 2355////////////////////// 2356void 2357 pagefour() { //Light Cycle 2358 Tft.fillRectangle(180, 0, 61, 15, BLACK); 2359 Tft.drawString("Light", 2360 180, 0, 2, CYAN); 2361 Tft.drawString("Main", 24, 50, 1, CYAN); 2362 Tft.drawString("Humidity", 2363 24, 80, 1, CYAN); 2364 Tft.drawString("Temperature", 144, 50, 1, CYAN); 2365 Tft.drawString("Settings", 2366 144, 80, 1, CYAN); 2367 Tft.drawString("Sunrise", 0, 110, 2, CYAN); 2368 if (srhoursetdisp 2369 > 9) { 2370 Tft.drawNumber(srhoursetdisp, 110, 110, 2, CYAN); 2371 } else { 2372 2373 Tft.drawNumber(0, 110, 110, 2, CYAN); 2374 Tft.drawNumber(srhoursetdisp, 122, 2375 110, 2, CYAN); 2376 } 2377 Tft.drawChar(':', 134, 110, 2, CYAN); 2378 if (srminutesetdisp 2379 > 9) { 2380 Tft.drawNumber(srminutesetdisp, 146, 110, 2, CYAN); 2381 } else { 2382 2383 Tft.drawNumber(0, 146, 110, 2, CYAN); 2384 Tft.drawNumber(srminutesetdisp, 2385 158, 110, 2, CYAN); 2386 } 2387 Tft.drawChar(':', 170, 110, 2, CYAN); 2388 if (srsecondset 2389 > 9) { 2390 Tft.drawNumber(srsecondset, 182, 110, 2, CYAN); 2391 } else { 2392 2393 Tft.drawNumber(0, 182, 110, 2, CYAN); 2394 Tft.drawNumber(srsecondset, 194, 2395 110, 2, CYAN); 2396 } 2397 Tft.drawRectangle(60, 130, 30, 30, CYAN); 2398 Tft.drawChar('+', 2399 68, 138, 2, CYAN); 2400 Tft.drawRectangle(120, 130, 30, 30, CYAN); 2401 Tft.drawChar('-', 2402 128, 138, 2, CYAN); 2403 Tft.drawString("Days", 0, 170, 2, CYAN); 2404 Tft.drawNumber(srday, 2405 60, 170, 2, CYAN); 2406 Tft.drawRectangle(110, 170, 30, 30, CYAN); 2407 Tft.drawChar('+', 2408 118, 178, 2, CYAN); 2409 Tft.drawRectangle(170, 170, 30, 30, CYAN); 2410 Tft.drawChar('-', 2411 178, 178, 2, CYAN); 2412 Tft.drawString("Sunset", 0, 210, 2, CYAN); 2413 if (sshoursetdisp 2414 > 9) { 2415 Tft.drawNumber(sshoursetdisp, 110, 210, 2, CYAN); 2416 } else { 2417 2418 Tft.drawNumber(0, 110, 210, 2, CYAN); 2419 Tft.drawNumber(sshoursetdisp, 122, 2420 210, 2, CYAN); 2421 } 2422 Tft.drawChar(':', 134, 210, 2, CYAN); 2423 if (ssminutesetdisp 2424 > 9) { 2425 Tft.drawNumber(ssminutesetdisp, 146, 210, 2, CYAN); 2426 } else { 2427 2428 Tft.drawNumber(0, 146, 210, 2, CYAN); 2429 Tft.drawNumber(ssminutesetdisp, 2430 158, 210, 2, CYAN); 2431 } 2432 Tft.drawChar(':', 170, 210, 2, CYAN); 2433 if (sssecondset 2434 > 9) { 2435 Tft.drawNumber(sssecondset, 182, 210, 2, CYAN); 2436 } else { 2437 2438 Tft.drawNumber(0, 182, 210, 2, CYAN); 2439 Tft.drawNumber(sssecondset, 194, 2440 210, 2, CYAN); 2441 } 2442 Tft.drawRectangle(60, 230, 30, 30, CYAN); 2443 Tft.drawChar('+', 2444 68, 238, 2, CYAN); 2445 Tft.drawRectangle(120, 230, 30, 30, CYAN); 2446 Tft.drawChar('-', 2447 128, 238, 2, CYAN); 2448 Tft.drawString("Days", 0, 270, 2, CYAN); 2449 Tft.drawNumber(ssday, 2450 60, 270, 2, CYAN); 2451 Tft.drawRectangle(110, 270, 30, 30, CYAN); 2452 Tft.drawChar('+', 2453 118, 278, 2, CYAN); 2454 Tft.drawRectangle(170, 270, 30, 30, CYAN); 2455 Tft.drawChar('-', 2456 178, 278, 2, CYAN); 2457 return; 2458} 2459////////////////////// 2460void pagefive() 2461 { //Settings 2462 Tft.fillRectangle(180, 0, 61, 15, BLACK); 2463 Tft.drawString("Setup", 2464 180, 0, 2, CYAN); 2465 Tft.drawString("Main", 24, 50, 1, CYAN); 2466 Tft.drawString("Humidity", 2467 24, 80, 1, CYAN); 2468 Tft.drawString("Temperature", 144, 50, 1, CYAN); 2469 Tft.drawString("Light 2470 Cycle", 144, 80, 1, CYAN); 2471 Tft.drawString("Sensors:", 0, 110, 2, CYAN); 2472 2473 if (ambithsen == 1) { 2474 Tft.fillRectangle(0, 128, 130, 12, RED); 2475 Tft.drawString("Ambient 2476 Temp: BAD", 0, 130, 1, CYAN); 2477 } else { 2478 Tft.fillRectangle(0, 128, 130, 2479 12, GREEN); 2480 Tft.drawString("Ambient Temp: GOOD", 0, 130, 1, BLACK); 2481 2482 } 2483 if (foggersen == 1) { 2484 Tft.fillRectangle(135, 128, 130, 12, RED); 2485 2486 Tft.drawString("Water Level: LOW", 135, 130, 1, CYAN); 2487 } else { 2488 Tft.fillRectangle(135, 2489 128, 130, 12, GREEN); 2490 Tft.drawString("Water Level: GOOD", 135, 130, 1, 2491 BLACK); 2492 } 2493 if (hr1sen == 1) { 2494 Tft.fillRectangle(0, 143, 130, 12, 2495 RED); 2496 Tft.drawString("Heatrock 1 Temp: BAD", 0, 145, 1, CYAN); 2497 } else 2498 { 2499 Tft.fillRectangle(0, 143, 130, 12, GREEN); 2500 Tft.drawString("Heatrock 2501 1 Temp: GOOD", 0, 145, 1, BLACK); 2502 } 2503 if (hr2sen == 1) { 2504 Tft.fillRectangle(0, 2505 158, 130, 12, RED); 2506 Tft.drawString("Heatrock 2 Temp: BAD", 0, 160, 1, CYAN); 2507 2508 } else { 2509 Tft.fillRectangle(0, 158, 130, 12, GREEN); 2510 Tft.drawString("Heatrock 2511 2 Temp: GOOD", 0, 160, 1, BLACK); 2512 } 2513 Tft.drawString("Power:", 0, 175, 2514 2, CYAN); 2515 if (dlpwr == 0) { 2516 Tft.fillRectangle(0, 193, 110, 12, RED); 2517 2518 Tft.drawString("Day Light: OFF", 0, 195, 1, CYAN); 2519 Tft.fillRectangle(115, 2520 193, 110, 12, GREEN); 2521 Tft.drawString("Night Light: ON", 115, 195, 1, BLACK); 2522 2523 } else { 2524 Tft.fillRectangle(0, 193, 110, 12, GREEN); 2525 Tft.drawString("Day 2526 Light: ON", 0, 195, 1, BLACK); 2527 Tft.fillRectangle(115, 193, 110, 12, RED); 2528 2529 Tft.drawString("Night Light: OFF", 115, 195, 1, CYAN); 2530 } 2531 if (hlpwr 2532 == 0) { 2533 Tft.fillRectangle(0, 208, 110, 12, RED); 2534 Tft.drawString("Heat 2535 Lamp: OFF", 0, 210, 1, CYAN); 2536 } else { 2537 Tft.fillRectangle(0, 208, 110, 2538 12, GREEN); 2539 Tft.drawString("Heat Lamp: ON", 0, 210, 1, BLACK); 2540 } 2541 2542 if (fanpwr == 0) { 2543 Tft.fillRectangle(115, 208, 110, 12, RED); 2544 Tft.drawString("Fan: 2545 OFF", 115, 210, 1, CYAN); 2546 } else { 2547 Tft.fillRectangle(115, 208, 110, 2548 12, GREEN); 2549 Tft.drawString("Fan: ON", 115, 210, 1, BLACK); 2550 } 2551 if 2552 (hr1pwr == 0) { 2553 Tft.fillRectangle(0, 223, 110, 12, RED); 2554 Tft.drawString("Heat 2555 Rock 1: OFF", 0, 225, 1, CYAN); 2556 } else { 2557 Tft.fillRectangle(0, 223, 2558 110, 12, GREEN); 2559 Tft.drawString("Heat Rock 1: ON", 0, 225, 1, BLACK); 2560 2561 } 2562 if (hr2pwr == 0) { 2563 Tft.fillRectangle(115, 223, 110, 12, RED); 2564 2565 Tft.drawString("Heat Rock 2: OFF", 115, 225, 1, CYAN); 2566 } else { 2567 Tft.fillRectangle(115, 2568 223, 110, 12, GREEN); 2569 Tft.drawString("Heat Rock 2: ON", 115, 225, 1, BLACK); 2570 2571 } 2572 if (foggerpwr == 0) { 2573 Tft.fillRectangle(0, 238, 110, 12, RED); 2574 2575 Tft.drawString("Fogger: OFF", 0, 240, 1, CYAN); 2576 } else { 2577 Tft.fillRectangle(0, 2578 238, 110, 12, GREEN); 2579 Tft.drawString("Fogger: ON", 0, 240, 1, BLACK); 2580 2581 } 2582 Tft.drawString("Room Temp:", 0, 255, 2, CYAN); 2583 Tft.drawFloat(roomtemp, 2584 120, 255, 2, CYAN); 2585 Tft.drawChar('o', 185, 255, 1, CYAN); 2586 Tft.drawChar('F', 2587 190, 255, 2, CYAN); 2588 return; 2589} 2590////////////////////// 2591void readsd() 2592 { 2593 myData = ""; 2594 digitalWrite(W5200_CS, HIGH); 2595 myFile = SD.open(myDoc); 2596 2597 if (myFile) { 2598 // read all data from the file 2599 while (myFile.available()) 2600 { 2601 //send the content onto the serial monitor 2602 myData += char(myFile.read()); 2603 2604 } 2605 // close the file 2606 myFile.close(); 2607 } 2608 digitalWrite(SDCARD_CS, 2609 HIGH); //Deselect the SD card 2610} 2611////////////////////// 2612void writesd() { 2613 2614 digitalWrite(W5200_CS, HIGH); 2615 SD.remove(myDoc); 2616 myFile = SD.open(myDoc, 2617 FILE_WRITE); 2618 //write to the file after it's successfully opened or created: 2619 2620 if (myFile) { 2621 myFile.print(myData); 2622 // close the file 2623 myFile.close(); 2624 2625 } 2626 digitalWrite(SDCARD_CS, HIGH); //Deselect the SD card 2627} 2628////////////////////// 2629void 2630 rsetFunc() { 2631 pinMode(rset, OUTPUT); 2632 digitalWrite(rset, LOW); 2633} 2634////////////////////// 2635/******************************************************************************* 2636 2637 Function Name: capture_photo 2638 Description: capture a photo and store the 2639 file named temp.jpg into SD 2640 Input: None 2641 Output : None 2642 Return : 2643 None 2644 *******************************************************************************/ 2645void 2646 capture_photo(char myFileName[]) { 2647 VC0706_frame_control(3); 2648 delay(10); 2649 2650 // Check to see if the file exists: 2651 // if exists,delete the file: 2652 if 2653 (SD.exists(myFileName)) SD.remove(myFileName); 2654 VC0706_frame_control(0); 2655 2656 delay(10); 2657 rx_ready = false; 2658 rx_counter = 0; 2659 Serial2.end();// clear 2660 all rx buffer 2661 delay(5); 2662 Serial2.begin(115200); 2663 //get frame buffer 2664 length 2665 VC0706_get_framebuffer_length(0); 2666 delay(10); 2667 buffer_read(); 2668 2669 // store frame buffer length for coming reading 2670 frame_length = (VC0706_rx_buffer[5] 2671 << 8) + VC0706_rx_buffer[6]; 2672 frame_length = frame_length << 16; 2673 frame_length 2674 = frame_length + (0x0ff00 & (VC0706_rx_buffer[7] << 8)) + VC0706_rx_buffer[8]; 2675 2676 vc_frame_address = READ_DATA_BLOCK_NO; 2677 myFile = SD.open(myFileName, FILE_WRITE); 2678 2679 while (vc_frame_address < frame_length) { 2680 VC0706_read_frame_buffer(vc_frame_address 2681 - READ_DATA_BLOCK_NO, READ_DATA_BLOCK_NO); 2682 delay(9); 2683 //get the data 2684 with length=READ_DATA_BLOCK_NObytes 2685 rx_ready = false; 2686 rx_counter = 2687 0; 2688 buffer_read(); 2689 // write data to file 2690 myFile.write(VC0706_rx_buffer 2691 + 5, READ_DATA_BLOCK_NO); 2692 //read next READ_DATA_BLOCK_NO bytes from frame 2693 buffer 2694 vc_frame_address = vc_frame_address + READ_DATA_BLOCK_NO; 2695 } 2696 2697 // get the last data 2698 vc_frame_address = vc_frame_address - READ_DATA_BLOCK_NO; 2699 2700 last_data_length = frame_length - vc_frame_address; 2701 VC0706_read_frame_buffer(vc_frame_address, 2702 last_data_length); 2703 delay(9); 2704 //get the data 2705 rx_ready = false; 2706 2707 rx_counter = 0; 2708 buffer_read(); 2709 myFile.write(VC0706_rx_buffer + 5, last_data_length); 2710 2711 myFile.close(); 2712 VC0706_frame_control(3); 2713 delay(10); 2714} 2715/******************************************************************************* 2716 2717 Function Name: VC0706_read_frame_buffer 2718 Description: read image data from 2719 FBUF 2720 Input: buffer_address(4 bytes); buffer_length(4 bytes) ******YO!****** 2721 2722 Output : None 2723 Return : None 2724 *******************************************************************************/ 2725void 2726 VC0706_read_frame_buffer(unsigned long buffer_address, unsigned long buffer_length) 2727 { 2728 tx_vcbuffer[0] = VC0706_PROTOCOL_SIGN; 2729 tx_vcbuffer[1] = VC0706_Serial2_NUMBER; 2730 2731 tx_vcbuffer[2] = VC0706_COMMAND_READ_FBUF; 2732 tx_vcbuffer[3] = 0x0c; 2733 tx_vcbuffer[4] 2734 = FBUF_CURRENT_FRAME; 2735 tx_vcbuffer[5] = 0x0a; // 0x0a=data transfer by MCU mode; 2736 0x0f=data transfer by SPI interface 2737 tx_vcbuffer[6] = buffer_address >> 24; 2738 //starting address 2739 tx_vcbuffer[7] = buffer_address >> 16; 2740 tx_vcbuffer[8] 2741 = buffer_address >> 8; 2742 tx_vcbuffer[9] = buffer_address & 0x0ff; 2743 tx_vcbuffer[10] 2744 = buffer_length >> 24; // data length 2745 tx_vcbuffer[11] = buffer_length >> 16; 2746 2747 tx_vcbuffer[12] = buffer_length >> 8; 2748 tx_vcbuffer[13] = buffer_length & 0x0ff; 2749 2750 tx_vcbuffer[14] = 0x00; // delay time 2751 tx_vcbuffer[15] = 0x0a; 2752 tx_counter 2753 = 16; 2754 buffer_send(); 2755} 2756/******************************************************************************* 2757 2758 Function Name: VC0706_frame_control 2759 Description: control frame buffer register 2760 ******YO!****** 2761 Input: frame_control=control flag(1byte) 2762 : 0 = stop current 2763 frame ; 1= stop next frame;2=step frame;3 =resume frame; 2764 Output : None 2765 2766 Return : None 2767 *******************************************************************************/ 2768void 2769 VC0706_frame_control(byte frame_control) { 2770 if (frame_control > 3)frame_control 2771 = 3; 2772 tx_vcbuffer[0] = VC0706_PROTOCOL_SIGN; 2773 tx_vcbuffer[1] = VC0706_Serial2_NUMBER; 2774 2775 tx_vcbuffer[2] = VC0706_COMMAND_FBUF_CTRL; 2776 tx_vcbuffer[3] = 0x01; 2777 tx_vcbuffer[4] 2778 = frame_control; 2779 tx_counter = 5; 2780 buffer_send(); 2781} 2782/******************************************************************************* 2783 2784 Function Name: VC0706_get_framebuffer_length 2785 Description: get byte-lengths 2786 in FBUF 2787 Input: fbuf_type =current or next frame 2788 0 =current frame ******YO!****** 2789 2790 1 =next frame 2791 Output : None 2792 Return : None 2793 *******************************************************************************/ 2794void 2795 VC0706_get_framebuffer_length(byte fbuf_type) { 2796 if (fbuf_type > 1)fbuf_type 2797 = 1; 2798 tx_vcbuffer[0] = VC0706_PROTOCOL_SIGN; 2799 tx_vcbuffer[1] = VC0706_Serial2_NUMBER; 2800 2801 tx_vcbuffer[2] = VC0706_COMMAND_GET_FBUF_LEN; 2802 tx_vcbuffer[3] = 0x01; 2803 2804 tx_vcbuffer[4] = fbuf_type; 2805 tx_counter = 5; 2806 buffer_send(); 2807} 2808/******************************************************************************* 2809 2810 Function Name: VC0706_uart_power_save 2811 Description: stop current frame for 2812 reading 2813 Input: power_on =1start power-save 2814 = 0stop power-save 2815 Output 2816 : None 2817 Return : None 2818 *******************************************************************************/ 2819void 2820 VC0706_uart_power_save(byte power_save_on) { 2821 tx_vcbuffer[0] = VC0706_PROTOCOL_SIGN; 2822 2823 tx_vcbuffer[1] = VC0706_Serial2_NUMBER; 2824 tx_vcbuffer[2] = VC0706_COMMAND_POWER_SAVE_CTRL; 2825 2826 tx_vcbuffer[3] = 0x03; 2827 tx_vcbuffer[4] = 00; //power save control mode 2828 2829 tx_vcbuffer[5] = 01; // control by UART 2830 tx_vcbuffer[6] = power_save_on; //start 2831 power save 2832 tx_counter = 7; 2833 buffer_send(); 2834} 2835/******************************************************************************* 2836 2837 Function Name: VC0706_compression_ratio 2838 Description: stop current frame 2839 for reading 2840 Input: ration>13(minimum) ******YO!****** 2841 <63(max) 2842 Output 2843 : None 2844 Return : None 2845 *******************************************************************************/ 2846void 2847 VC0706_compression_ratio(int ratio) { 2848 if (ratio > 63)ratio = 63; 2849 if (ratio 2850 < 13)ratio = 13; 2851 int vc_comp_ratio = (ratio - 13) * 4 + 53; 2852 tx_vcbuffer[0] 2853 = VC0706_PROTOCOL_SIGN; 2854 tx_vcbuffer[1] = VC0706_Serial2_NUMBER; 2855 tx_vcbuffer[2] 2856 = VC0706_COMMAND_WRITE_DATA; 2857 tx_vcbuffer[3] = 0x05; 2858 tx_vcbuffer[4] = 01; 2859 //chip register 2860 tx_vcbuffer[5] = 0x01; //data num ready to write 2861 tx_vcbuffer[6] 2862 = 0x12; //register address 2863 tx_vcbuffer[7] = 0x04; 2864 tx_vcbuffer[8] = vc_comp_ratio; 2865 //data 2866 tx_counter = 9; 2867 buffer_send(); 2868} 2869/******************************************************************************* 2870 2871 Function Name: buffer_send 2872 Description: Transmit buffer to VC0706 2873 Input: 2874 tx_vcbuffer 2875 Output : None 2876 Return : None 2877 *******************************************************************************/ 2878void 2879 buffer_send() { 2880 int i = 0; 2881 for (i = 0; i < tx_counter; i++) 2882 Serial2.write(tx_vcbuffer[i]); 2883 2884 tx_ready = true; 2885} 2886/******************************************************************************* 2887 2888 Function Name: buffer_read 2889 Description: Receive buffer from VC0706 2890 2891 Input: None 2892 Output : rx_buffer, rx_ready 2893 Return : 2894 None 2895 *******************************************************************************/ 2896void 2897 buffer_read() { 2898 bool validity = true; 2899 if (rx_ready) // if something 2900 unread in buffer, just quit 2901 return; 2902 rx_counter = 0; 2903 VC0706_rx_buffer[0] 2904 = 0; 2905 while (Serial2.available() > 0) 2906 { 2907 VC0706_rx_buffer[rx_counter++] 2908 = Serial2.read(); 2909 //delay(1); 2910 } 2911 if (VC0706_rx_buffer[0] != 0x76) 2912 2913 validity = false; 2914 if (VC0706_rx_buffer[1] != VC0706_Serial2_NUMBER) 2915 2916 validity = false; 2917 if (validity) rx_ready = true; 2918}
Downloadable files
Harold and Kumar w/out IP
Fritzing
Harold and Kumar w/out IP
Comments
Only logged in users can leave comments
hagakure
0 Followers
•0 Projects
Table of contents
Intro
20
0