Components and supplies
4x 20 LCD
DHT22 Temperature Sensor
7 Segment display (TM 1637)
BMP280 Pressure
5mm LED: Blue
RTC DS3231
Female/Female Jumper Wires
5 mm LED: Yellow
Male/Female Jumper Wires
Solderless Breadboard Half Size
Arduino UNO
DHT11 Temperature & Humidity Sensor (4 pins)
Apps and platforms
Arduino IDE
Project description
Code
Updated Code
c_cpp
1// use example DS1307RTC SetTime to set RTC time to PC 2// 4, 7 segment display shows time (TM1637) 4 pin connection 3// LCD 20x4, DS3231 RTC and BMP uses I2C interface 4// DHT11 measures inside temp and hum (less acurate) can use 2 dht22 but slight code change 5// DHT22 measures outside temp and hum and calculates Dew Point and Heat Index 6// BMP280 measures pressure (mb) and does a basic prediction of what the weather is meant to be doing (same as a barometer) 7// added milli instead of delay to rotate through the 4 screens 8// Sunrise and Sunset times added 9// Moon age and % illumination added 10// Moon phase display added 11// 16/11/18 12 13#include <RTClib.h> 14#include <Wire.h> 15#include <LiquidCrystal_I2C.h> 16#include <DS1307RTC.h> 17#include <SPI.h> 18#include <Adafruit_Sensor.h> 19#include <Adafruit_BMP280.h> 20#include <DHT.h> 21#include <Time.h> 22#include <TimeLib.h> 23#include <TM1637.h> 24#include <sunMoon.h> 25 26#define DHT1PIN 12 // DHT11 TO PIN 7 27#define DHT2PIN 13 // DHT22 to PIN 13 28#define DHT2TYPE DHT22 // DHT22 29#define DHT1TYPE DHT11 // DHT11 30#define CLK 11 // 7 segment display PIN CLK 31#define DIO 10 // 7 segment display PIN DIO 32#define OUR_latitude 50.770854 // Sidlesham cordinates 33#define OUR_longtitude -0.784057 34#define OUR_timezone 0 // localtime with UTC difference in minutes 35 36float V = 7.2; //version 37 38sunMoon sm; 39 40TM1637 Display1(CLK, DIO); 41int8_t Digits[] = {0, 1, 2, 3}; 42int hours; 43int minutes; 44 45const int led1 = 2; //New Moon (Blue LED) 46const int led2 = 3; //Waxing Cresent (White LED) 47const int led3 = 4; //First Quarter (White LED) 48const int led4 = 5; //Waxing Gibbon (White LED) 49const int led5 = 6; //Full Moon (White LED) 50const int led6 = 7; //Wanning Gibbon (White LED) 51const int led7 = 8; //Last Quarter (White LED) 52const int led8 = 9; //Waning Cresent (White LED) 53 54byte mDay = sm.moonDay(); 55 56boolean alterna; 57 58DHT dht2 (DHT2PIN, DHT2TYPE); //outside temp,hum 59DHT dht1 (DHT1PIN, DHT1TYPE); //inside temp,hum 60Adafruit_BMP280 bme; 61 62LiquidCrystal_I2C lcd(0x27, 20, 4); // Set the LCD I2C address 63 64int chk; 65int LDR = A0; 66int Light = 0; 67 68float temp1; //Inside Temperature 69float hum1; //Inside Humidity 70float temp2; //Outside Temperature 71float hum2; //Outside Humidity 72float Pressure; //Pressure! 73float dp; //Dew Point Outside 74float temp2f; //temp outside in F 75float hif; //Heat index in F 76float hic; //Heat Index in C 77float sRise; //Sun Rise Calculation 78float sSet; //Sun Set Calculation 79 80unsigned long switchMillis = 0; 81unsigned long interval = 5000; // 5 seconds for each lcd screen 82byte count = 0; 83 84boolean firstScreenFlag = false; 85boolean secondScreenFlag = false; 86boolean thirdScreenFlag = false; 87boolean fouthScreenFlag = false; 88boolean fifthScreenFlag = false; 89 90void setup() 91{ 92 93 tmElements_t tm; // specific time 94 time_t s_date = makeTime(tm); 95 96 Serial.begin(9600); 97 setSyncProvider(RTC.get); // the function to get the time from the RTC 98 if (timeStatus() != timeSet) 99 Serial.println("Unable to sync with the RTC"); 100 else 101 Serial.println("RTC has set the system time"); 102 103 sm.init(OUR_timezone, OUR_latitude, OUR_longtitude); 104 105 time_t sRise = sm.sunRise(); 106 time_t sSet = sm.sunSet(); 107 108 sRise = sm.sunRise(s_date); 109 sSet = sm.sunSet(s_date); 110 111 Serial.begin(9600); 112 113 Display1.set(); 114 Display1.init(); 115 116 pinMode(led1, OUTPUT); 117 pinMode(led2, OUTPUT); 118 pinMode(led3, OUTPUT); 119 pinMode(led4, OUTPUT); 120 pinMode(led5, OUTPUT); 121 pinMode(led6, OUTPUT); 122 pinMode(led7, OUTPUT); 123 pinMode(led8, OUTPUT); 124 pinMode(LDR, INPUT); 125 126 lcd.init(); 127 lcd.clear(); 128 lcd.backlight(); 129 dht1.begin(); 130 dht2.begin(); 131 Wire.begin(); 132 133 lcd.setCursor(0, 0); 134 lcd.print(F(" Weather Station")); 135 lcd.setCursor(3, 2); 136 lcd.print(F("Version : ")); 137 lcd.print(V, 1); 138 delay(3000); 139 lcd.clear(); 140 141 if (!bme.begin()) 142 { 143 while (1); 144 } 145 146} 147 148void loop() 149{ 150 151 Light = analogRead(LDR); 152 153 if (Light > 900) { 154 lcd.noBacklight(); //Turns off LCD Backlight when dark 155 156 } else { 157 158 lcd.backlight(); //Turns on LCD Backlight when light 159 } 160 161 tmElements_t tm; 162 time_t s_date = makeTime(tm); 163 164 if (RTC.read(tm)) { 165 166 print2digits(tm.Hour); 167 print2digits(tm.Minute); 168 169 hours = tm.Hour; 170 minutes = tm.Minute; 171 CalculaDigits(hours, minutes); 172 if (alterna) 173 { 174 Display1.point(POINT_OFF); 175 alterna = false; 176 } 177 else 178 { 179 Display1.point(POINT_ON); 180 alterna = true; 181 } 182 183 } else { 184 if (RTC.chipPresent()) { 185 186 } else { 187 188 } 189 delay(9000); 190 } 191 delay(1000); 192 193 if (millis() - switchMillis > interval) 194 { 195 count++; 196 197 if (count == 1) 198 { 199 firstScreenFlag = true; 200 count = 1; 201 } 202 if (count == 2) 203 { 204 secondScreenFlag = true; 205 count = 2; 206 } 207 if (count == 3) 208 { 209 thirdScreenFlag = true; 210 count = 3; 211 } 212 if (count == 4) 213 { 214 fouthScreenFlag = true; 215 count = 4; 216 } 217 if (count == 5) 218 { 219 fifthScreenFlag = true; 220 count = 0; 221 } 222 switchMillis += interval; 223 } 224 225 if (firstScreenFlag) 226 { 227 printTime(1, 0, tm); 228 firstScreenFlag = false; 229 } 230 231 if (secondScreenFlag) 232 { 233 printTemp(); 234 secondScreenFlag = false; 235 } 236 237 if (thirdScreenFlag) 238 { 239 printIndex(); 240 thirdScreenFlag = false; 241 } 242 243 if (fouthScreenFlag) 244 { 245 printPressure(); 246 fouthScreenFlag = false; 247 } 248 if (fifthScreenFlag) 249 { 250 printMoon(tm); 251 fifthScreenFlag = false; 252 } 253} 254 255void printLcdDate(time_t date) 256{ 257 char rise[10]; 258 sprintf(rise, "%02d:%02d", hour(date), minute(date)); 259 lcd.print(rise); 260} 261 262void printTime(int character, int line, tmElements_t tm) 263{ 264 265 lcd.clear(); 266 String seconds, minutes; 267 lcd.setCursor(character, line); 268 lcd.print(tm.Hour); 269 lcd.print(F(":")); 270 if (tm.Minute < 10) 271 { 272 minutes = "0" + String(tm.Minute); 273 lcd.print(minutes); 274 } else 275 { 276 lcd.print(tm.Minute); 277 } 278 279 lcd.setCursor(9, 0); 280 lcd.print(tm.Day); 281 lcd.print(F("/")); 282 lcd.print(tm.Month); 283 lcd.print(F("/")); 284 lcd.print(tmYearToCalendar(tm.Year)); 285 286 time_t s_date = makeTime(tm); 287 time_t sRise = sm.sunRise(); 288 time_t sSet = sm.sunSet(); 289 sRise = sm.sunRise(s_date); 290 sSet = sm.sunSet(s_date); 291 292 lcd.setCursor(1, 2); 293 lcd.print(F("SunRise : ")); 294 printLcdDate(sRise); 295 lcd.setCursor(1, 3); 296 lcd.print(F("SunSet : ")); 297 printLcdDate(sSet); 298 299} 300 301void printTemp() 302{ 303 hum1 = dht1.readHumidity(); //inside 304 temp1 = dht1.readTemperature(); //inside 305 hum2 = dht2.readHumidity(); //outside 306 temp2 = dht2.readTemperature(); //outside 307 308 lcd.clear(); 309 lcd.setCursor(0, 0); 310 lcd.print(F(" Inside Outside")); 311 lcd.setCursor(0, 2); 312 lcd.print(F("T: ")); 313 lcd.print(temp1, 1); 314 lcd.print(F(" ")); 315 lcd.print((char)223); 316 lcd.print(F("C")); 317 lcd.setCursor(13, 2); 318 lcd.print(temp2, 1); 319 lcd.print(F(" ")); 320 lcd.print(( char)223); 321 lcd.print(F("C")); 322 323 lcd.setCursor(0, 3); 324 lcd.print(F("H: ")); 325 lcd.print(hum1, 0); 326 lcd.print(F(" %")); 327 lcd.setCursor(14, 3); 328 lcd.print(hum2, 0); 329 lcd.print(F(" %")); 330 331} 332void printIndex() 333{ 334 335 hum2 = dht2.readHumidity(); //outside 336 temp2 = dht2.readTemperature(); //outside 337 temp2f = dht2.readTemperature(true); // temp in f 338 339 double Point = log(hum2 / 100) + ((17.62 * temp2) / (243.5 + temp2)); 340 double dp = 243.5 * Point / (17.62 - Point); 341 342 lcd.clear(); 343 lcd.setCursor(0, 0); 344 lcd.print(F(" Outside Readings")); 345 lcd.setCursor(0, 2); 346 lcd.print(F("Dew Point : ")); 347 lcd.print(dp, 1); 348 lcd.print(F(" ")); 349 lcd.print((char)223); 350 lcd.print(F("C")); 351 352 hif = dht2.computeHeatIndex(temp2f, hum2); //heat index in degrees F 353 hic = dht2.computeHeatIndex(temp2, hum2, false); //heat index in degrees C 354 355 lcd.setCursor(0, 3); 356 lcd.print(F("Heat Index : ")); 357 lcd.print(hic, 1); 358 lcd.print(F(" ")); 359 lcd.print((char)223); 360 lcd.print(F("C")); 361 362} 363void printPressure() 364{ 365 Pressure = (bme.readPressure() / 100); // 100 Pa = 1 millibar 366 367 lcd.clear(); 368 lcd.setCursor(0, 1); 369 lcd.print(F(" Press : ")); 370 lcd.print(Pressure); 371 lcd.print(F(" mb")); 372 lcd.setCursor(0, 3); 373 lcd.print(F("Weather :")); 374 375 if (Pressure <= 970); { 376 lcd.setCursor(13, 3); 377 lcd.print(F(" ")); 378 lcd.setCursor(13, 3); 379 lcd.print(F("Stormy")); 380 } 381 if (Pressure > 970) { 382 lcd.setCursor(11, 3); 383 lcd.print(F(" ")); 384 lcd.setCursor(11, 3); 385 lcd.print(F("Much Rain")); 386 } 387 if (Pressure > 996) { 388 lcd.setCursor(11, 3); 389 lcd.print(F(" ")); 390 lcd.setCursor(13, 3); 391 lcd.print(F("Rain")); 392 } 393 if (Pressure > 1006) { 394 lcd.setCursor(11, 3); 395 lcd.print(F(" ")); 396 lcd.setCursor(11, 3); 397 lcd.print(F("Variable")); 398 } 399 if (Pressure > 1030) { 400 lcd.setCursor(11, 3); 401 lcd.print(F(" ")); 402 lcd.setCursor(13, 3); 403 lcd.print(F("Fair")); 404 } 405 if (Pressure > 1040) { 406 lcd.setCursor(11, 3); 407 lcd.print(F(" ")); 408 lcd.setCursor(11, 3); 409 lcd.print(F("Set Fair")); 410 } 411 if (Pressure > 1060) { 412 lcd.setCursor(11, 3); 413 lcd.print(F(" ")); 414 lcd.setCursor(11, 3); 415 lcd.print(F("Very Dry")); 416 } 417} 418 419void printMoon(tmElements_t tm) 420{ 421 time_t s_date = makeTime(tm); 422 mDay = sm.moonDay(s_date); 423 424 lcd.clear(); 425 lcd.setCursor(0, 0); 426 lcd.print(" Moon age is "); 427 lcd.print(mDay); 428 if (mDay == 1) { 429 lcd.print(" day "); 430 } 431 else { 432 lcd.print(" days"); 433 } 434 lcd.setCursor(0, 2); 435 436 if (mDay == 0) { 437 438 lcd.setCursor(0, 2); 439 lcd.print(" New Moon "); 440 lcd.setCursor(0, 3); 441 lcd.print(" Illumination 0 % "); 442 digitalWrite(led1, HIGH); 443 digitalWrite(led2, LOW); 444 digitalWrite(led3, LOW); 445 digitalWrite(led4, LOW); 446 digitalWrite(led5, LOW); 447 digitalWrite(led6, LOW); 448 digitalWrite(led7, LOW); 449 digitalWrite(led8, LOW); 450 } 451 if (mDay == 1) { 452 453 lcd.setCursor(0, 2); 454 lcd.print(" Waxing Cresent"); 455 lcd.setCursor(0, 3); 456 lcd.print(" Illumination 1 % "); 457 digitalWrite(led1, LOW); 458 digitalWrite(led2, HIGH); 459 digitalWrite(led3, LOW); 460 digitalWrite(led4, LOW); 461 digitalWrite(led5, LOW); 462 digitalWrite(led6, LOW); 463 digitalWrite(led7, LOW); 464 digitalWrite(led8, LOW); 465 } 466 467 if (mDay == 2) { 468 469 lcd.setCursor(0, 2); 470 lcd.print(" Waxing Cresent"); 471 lcd.setCursor(0, 3); 472 lcd.print(" Illumination 4 % "); 473 digitalWrite(led1, LOW); 474 digitalWrite(led2, HIGH); 475 digitalWrite(led3, LOW); 476 digitalWrite(led4, LOW); 477 digitalWrite(led5, LOW); 478 digitalWrite(led6, LOW); 479 digitalWrite(led7, LOW); 480 digitalWrite(led8, LOW); 481 } 482 483 if (mDay == 3) { 484 485 lcd.setCursor(0, 2); 486 lcd.print(" Waxing Cresent"); 487 lcd.setCursor(0, 3); 488 lcd.print(" Illumination 8 % "); 489 digitalWrite(led1, LOW); 490 digitalWrite(led2, HIGH); 491 digitalWrite(led3, LOW); 492 digitalWrite(led4, LOW); 493 digitalWrite(led5, LOW); 494 digitalWrite(led6, LOW); 495 digitalWrite(led7, LOW); 496 digitalWrite(led8, LOW); 497 } 498 499 if (mDay == 4) { 500 501 lcd.setCursor(0, 2); 502 lcd.print(" Waxing Cresent"); 503 lcd.setCursor(0, 3); 504 lcd.print(" Illumination 15 % "); 505 digitalWrite(led1, LOW); 506 digitalWrite(led2, HIGH); 507 digitalWrite(led3, LOW); 508 digitalWrite(led4, LOW); 509 digitalWrite(led5, LOW); 510 digitalWrite(led6, LOW); 511 digitalWrite(led7, LOW); 512 digitalWrite(led8, LOW); 513 } 514 515 if (mDay == 5) { 516 517 lcd.setCursor(0, 2); 518 lcd.print(" Waxing Cresent"); 519 lcd.setCursor(0, 3); 520 lcd.print(" Illumination 22 % "); 521 digitalWrite(led1, LOW); 522 digitalWrite(led2, HIGH); 523 digitalWrite(led3, LOW); 524 digitalWrite(led4, LOW); 525 digitalWrite(led5, LOW); 526 digitalWrite(led6, LOW); 527 digitalWrite(led7, LOW); 528 digitalWrite(led8, LOW); 529 } 530 531 if (mDay == 6) { 532 533 lcd.setCursor(0, 2); 534 lcd.print(" Waxing Cresent"); 535 lcd.setCursor(0, 3); 536 lcd.print(" Illumination 31 % "); 537 digitalWrite(led1, LOW); 538 digitalWrite(led2, HIGH); 539 digitalWrite(led3, LOW); 540 digitalWrite(led4, LOW); 541 digitalWrite(led5, LOW); 542 digitalWrite(led6, LOW); 543 digitalWrite(led7, LOW); 544 digitalWrite(led8, LOW); 545 } 546 547 if (mDay == 7) { 548 549 lcd.setCursor(0, 2); 550 lcd.print(" First Quarter "); 551 lcd.setCursor(0, 3); 552 lcd.print(" Illumination 50 % "); 553 digitalWrite(led1, LOW); 554 digitalWrite(led2, LOW); 555 digitalWrite(led3, HIGH); 556 digitalWrite(led4, LOW); 557 digitalWrite(led5, LOW); 558 digitalWrite(led6, LOW); 559 digitalWrite(led7, LOW); 560 digitalWrite(led8, LOW); 561 } 562 563 if (mDay == 8) { 564 565 lcd.setCursor(0, 2); 566 lcd.print(" Waxing Gibbons"); 567 lcd.setCursor(0, 3); 568 lcd.print(" Illumination 58 % "); 569 digitalWrite(led1, LOW); 570 digitalWrite(led2, LOW); 571 digitalWrite(led3, LOW); 572 digitalWrite(led4, HIGH); 573 digitalWrite(led5, LOW); 574 digitalWrite(led6, LOW); 575 digitalWrite(led7, LOW); 576 digitalWrite(led8, LOW); 577 } 578 if (mDay == 9) { 579 580 lcd.setCursor(0, 2); 581 lcd.print(" Waxing Gibbons"); 582 lcd.setCursor(0, 3); 583 lcd.print(" Illumination 68 % "); 584 digitalWrite(led1, LOW); 585 digitalWrite(led2, LOW); 586 digitalWrite(led3, LOW); 587 digitalWrite(led4, HIGH); 588 digitalWrite(led5, LOW); 589 digitalWrite(led6, LOW); 590 digitalWrite(led7, LOW); 591 digitalWrite(led8, LOW); 592 } 593 if (mDay == 10) { 594 595 lcd.setCursor(0, 2); 596 lcd.print(" Waxing Gibbons"); 597 lcd.setCursor(0, 3); 598 lcd.print(" Illumination 76 % "); 599 digitalWrite(led1, LOW); 600 digitalWrite(led2, LOW); 601 digitalWrite(led3, LOW); 602 digitalWrite(led4, HIGH); 603 digitalWrite(led5, LOW); 604 digitalWrite(led6, LOW); 605 digitalWrite(led7, LOW); 606 digitalWrite(led8, LOW); 607 } 608 if (mDay == 11) { 609 610 lcd.setCursor(0, 2); 611 lcd.print(" Waxing Gibbons"); 612 lcd.setCursor(0, 3); 613 lcd.print(" Illumination 84 % "); 614 digitalWrite(led1, LOW); 615 digitalWrite(led2, LOW); 616 digitalWrite(led3, LOW); 617 digitalWrite(led4, HIGH); 618 digitalWrite(led5, LOW); 619 digitalWrite(led6, LOW); 620 digitalWrite(led7, LOW); 621 digitalWrite(led8, LOW); 622 } 623 if (mDay == 12) { 624 625 lcd.setCursor(0, 2); 626 lcd.print(" Waxing Gibbons"); 627 lcd.setCursor(0, 3); 628 lcd.print(" Illumination 91 % "); 629 digitalWrite(led1, LOW); 630 digitalWrite(led2, LOW); 631 digitalWrite(led3, LOW); 632 digitalWrite(led4, HIGH); 633 digitalWrite(led5, LOW); 634 digitalWrite(led6, LOW); 635 digitalWrite(led7, LOW); 636 digitalWrite(led8, LOW); 637 } 638 if (mDay == 13) { 639 640 lcd.setCursor(0, 2); 641 lcd.print(" Waxing Gibbons"); 642 lcd.setCursor(0, 3); 643 lcd.print(" Illumination 96 % "); 644 digitalWrite(led1, LOW); 645 digitalWrite(led2, LOW); 646 digitalWrite(led3, LOW); 647 digitalWrite(led4, HIGH); 648 digitalWrite(led5, LOW); 649 digitalWrite(led6, LOW); 650 digitalWrite(led7, LOW); 651 digitalWrite(led8, LOW); 652 } 653 if (mDay == 14) { 654 655 lcd.setCursor(0, 2); 656 lcd.print(" Waxing Gibbons"); 657 lcd.setCursor(0, 3); 658 lcd.print(" Illumination 99 % "); 659 digitalWrite(led1, LOW); 660 digitalWrite(led2, LOW); 661 digitalWrite(led3, LOW); 662 digitalWrite(led4, HIGH); 663 digitalWrite(led5, LOW); 664 digitalWrite(led6, LOW); 665 digitalWrite(led7, LOW); 666 digitalWrite(led8, LOW); 667 } 668 if (mDay == 15) { 669 670 lcd.setCursor(0, 2); 671 lcd.print(" Full Moon "); 672 lcd.setCursor(0, 3); 673 lcd.print(" Illumination 100 % "); 674 digitalWrite(led1, LOW); 675 digitalWrite(led2, LOW); 676 digitalWrite(led3, LOW); 677 digitalWrite(led4, LOW); 678 digitalWrite(led5, HIGH); 679 digitalWrite(led6, LOW); 680 digitalWrite(led7, LOW); 681 digitalWrite(led8, LOW); 682 } 683 if (mDay == 16) { 684 685 lcd.setCursor(0, 2); 686 lcd.print(" Waning Gibbons"); 687 lcd.setCursor(0, 3); 688 lcd.print(" Illumination 98 % "); 689 digitalWrite(led1, LOW); 690 digitalWrite(led2, LOW); 691 digitalWrite(led3, LOW); 692 digitalWrite(led4, LOW); 693 digitalWrite(led5, LOW); 694 digitalWrite(led6, HIGH); 695 digitalWrite(led7, LOW); 696 digitalWrite(led8, LOW); 697 } 698 if (mDay == 17) { 699 700 lcd.setCursor(0, 2); 701 lcd.print(" Waning Gibbons"); 702 lcd.setCursor(0, 3); 703 lcd.print(" Illumination 93 % "); 704 digitalWrite(led1, LOW); 705 digitalWrite(led2, LOW); 706 digitalWrite(led3, LOW); 707 digitalWrite(led4, LOW); 708 digitalWrite(led5, LOW); 709 digitalWrite(led6, HIGH); 710 digitalWrite(led7, LOW); 711 digitalWrite(led8, LOW); 712 } 713 if (mDay == 18) { 714 715 lcd.setCursor(0, 2); 716 lcd.print(" Waning Gibbons"); 717 lcd.setCursor(0, 3); 718 lcd.print(" Illumination 86 % "); 719 digitalWrite(led1, LOW); 720 digitalWrite(led2, LOW); 721 digitalWrite(led3, LOW); 722 digitalWrite(led4, LOW); 723 digitalWrite(led5, LOW); 724 digitalWrite(led6, HIGH); 725 digitalWrite(led7, LOW); 726 digitalWrite(led8, LOW); 727 } 728 if (mDay == 19) { 729 730 lcd.setCursor(0, 2); 731 lcd.print(" Waning Gibbons"); 732 lcd.setCursor(0, 3); 733 lcd.print(" Illumination 77 % "); 734 digitalWrite(led1, LOW); 735 digitalWrite(led2, LOW); 736 digitalWrite(led3, LOW); 737 digitalWrite(led4, LOW); 738 digitalWrite(led5, LOW); 739 digitalWrite(led6, HIGH); 740 digitalWrite(led7, LOW); 741 digitalWrite(led8, LOW); 742 } 743 if (mDay == 20) { 744 745 lcd.setCursor(0, 2); 746 lcd.print(" Waning Gibbons"); 747 lcd.setCursor(0, 3); 748 lcd.print(" Illumination 67 % "); 749 digitalWrite(led1, LOW); 750 digitalWrite(led2, LOW); 751 digitalWrite(led3, LOW); 752 digitalWrite(led4, LOW); 753 digitalWrite(led5, LOW); 754 digitalWrite(led6, HIGH); 755 digitalWrite(led7, LOW); 756 digitalWrite(led8, LOW); 757 } 758 if (mDay == 21) { 759 760 lcd.setCursor(0, 2); 761 lcd.print(" Waning Gibbons"); 762 lcd.setCursor(0, 3); 763 lcd.print(" Illumination 56 % "); 764 digitalWrite(led1, LOW); 765 digitalWrite(led2, LOW); 766 digitalWrite(led3, LOW); 767 digitalWrite(led4, LOW); 768 digitalWrite(led5, LOW); 769 digitalWrite(led6, HIGH); 770 digitalWrite(led7, LOW); 771 digitalWrite(led8, LOW); 772 } 773 if (mDay == 22) { 774 775 lcd.setCursor(0, 2); 776 lcd.print(" Waning Gibbons"); 777 lcd.setCursor(0, 3); 778 lcd.print(" Illumination 52 % "); 779 digitalWrite(led1, LOW); 780 digitalWrite(led2, LOW); 781 digitalWrite(led3, LOW); 782 digitalWrite(led4, LOW); 783 digitalWrite(led5, LOW); 784 digitalWrite(led6, HIGH); 785 digitalWrite(led7, LOW); 786 digitalWrite(led8, LOW); 787 } 788 if (mDay == 23) { 789 790 lcd.setCursor(0, 2); 791 lcd.print(" Last Quarter "); 792 lcd.setCursor(0, 3); 793 lcd.print(" Illumination 50 % "); 794 digitalWrite(led1, LOW); 795 digitalWrite(led2, LOW); 796 digitalWrite(led3, LOW); 797 digitalWrite(led4, LOW); 798 digitalWrite(led5, LOW); 799 digitalWrite(led6, LOW); 800 digitalWrite(led7, HIGH); 801 digitalWrite(led8, LOW); 802 } 803 if (mDay == 24) { 804 805 lcd.setCursor(0, 2); 806 lcd.print(" Waning Cresent"); 807 lcd.setCursor(0, 3); 808 lcd.print(" Illumination 34 % "); 809 digitalWrite(led1, LOW); 810 digitalWrite(led2, LOW); 811 digitalWrite(led3, LOW); 812 digitalWrite(led4, LOW); 813 digitalWrite(led5, LOW); 814 digitalWrite(led6, LOW); 815 digitalWrite(led7, LOW); 816 digitalWrite(led8, HIGH); 817 } 818 if (mDay == 25) { 819 820 lcd.setCursor(0, 2); 821 lcd.print(" Waning Cresent"); 822 lcd.setCursor(0, 3); 823 lcd.print(" Illumination 24 % "); 824 digitalWrite(led1, LOW); 825 digitalWrite(led2, LOW); 826 digitalWrite(led3, LOW); 827 digitalWrite(led4, LOW); 828 digitalWrite(led5, LOW); 829 digitalWrite(led6, LOW); 830 digitalWrite(led7, LOW); 831 digitalWrite(led8, HIGH); 832 } 833 if (mDay == 26) { 834 835 lcd.setCursor(0, 2); 836 lcd.print(" Waning Cresent"); 837 lcd.setCursor(0, 3); 838 lcd.print(" Illumination 15 % "); 839 digitalWrite(led1, LOW); 840 digitalWrite(led2, LOW); 841 digitalWrite(led3, LOW); 842 digitalWrite(led4, LOW); 843 digitalWrite(led5, LOW); 844 digitalWrite(led6, LOW); 845 digitalWrite(led7, LOW); 846 digitalWrite(led8, HIGH); 847 } 848 if (mDay == 27) { 849 850 lcd.setCursor(0, 2); 851 lcd.print(" Waning Cresent"); 852 lcd.setCursor(0, 3); 853 lcd.print(" Illumination 8 % "); 854 digitalWrite(led1, LOW); 855 digitalWrite(led2, LOW); 856 digitalWrite(led3, LOW); 857 digitalWrite(led4, LOW); 858 digitalWrite(led5, LOW); 859 digitalWrite(led6, LOW); 860 digitalWrite(led7, LOW); 861 digitalWrite(led8, HIGH); 862 } 863 if (mDay == 28) { 864 865 lcd.setCursor(0, 2); 866 lcd.print(" Waning Cresent"); 867 lcd.setCursor(0, 3); 868 lcd.print(" Illumination 3 % "); 869 digitalWrite(led1, LOW); 870 digitalWrite(led2, LOW); 871 digitalWrite(led3, LOW); 872 digitalWrite(led4, LOW); 873 digitalWrite(led5, LOW); 874 digitalWrite(led6, LOW); 875 digitalWrite(led7, LOW); 876 digitalWrite(led8, HIGH); 877 } 878 if (mDay == 29) { 879 880 lcd.setCursor(0, 2); 881 lcd.print(" Waning Cresent"); 882 lcd.setCursor(0, 3); 883 lcd.print(" Illumination 1 % "); 884 digitalWrite(led1, LOW); 885 digitalWrite(led2, LOW); 886 digitalWrite(led3, LOW); 887 digitalWrite(led4, LOW); 888 digitalWrite(led5, LOW); 889 digitalWrite(led6, LOW); 890 digitalWrite(led7, LOW); 891 digitalWrite(led8, HIGH); 892 } 893} 894 895void print2digits(int number) { 896 897 if (number >= 0 && number < 10) { 898 Serial.write('0'); 899 } 900 Serial.print(number); 901} 902 903void CalculaDigits( int hour, int min) 904{ 905 int8_t Digit0 = min % 10 ; 906 int8_t Digit1 = (min % 100) / 10 ; 907 int8_t Digit2 = hour % 10 ; 908 int8_t Digit3 = (hour % 100) / 10 ; 909 910 Digits[3] = Digit0 ; 911 Digits[2] = Digit1 ; 912 Digits[1] = Digit2 ; 913 Digits[0] = Digit3 ; 914 915 Display1.display(Digits); 916} 917
Updated Code
c_cpp
1// use example DS1307RTC SetTime to set RTC time to PC 2// 4, 7 segment 3 display shows time (TM1637) 4 pin connection 4// LCD 20x4, DS3231 RTC and BMP 5 uses I2C interface 6// DHT11 measures inside temp and hum (less acurate) can use 7 2 dht22 but slight code change 8// DHT22 measures outside temp and hum and calculates 9 Dew Point and Heat Index 10// BMP280 measures pressure (mb) and does a basic prediction 11 of what the weather is meant to be doing (same as a barometer) 12// added milli 13 instead of delay to rotate through the 4 screens 14// Sunrise and Sunset times 15 added 16// Moon age and % illumination added 17// Moon phase display added 18// 19 16/11/18 20 21#include <RTClib.h> 22#include <Wire.h> 23#include <LiquidCrystal_I2C.h> 24#include 25 <DS1307RTC.h> 26#include <SPI.h> 27#include <Adafruit_Sensor.h> 28#include <Adafruit_BMP280.h> 29#include 30 <DHT.h> 31#include <Time.h> 32#include <TimeLib.h> 33#include <TM1637.h> 34#include 35 <sunMoon.h> 36 37#define DHT1PIN 12 // DHT11 TO PIN 7 38#define DHT2PIN 39 13 // DHT22 to PIN 13 40#define DHT2TYPE DHT22 // DHT22 41#define DHT1TYPE 42 DHT11 // DHT11 43#define CLK 11 // 7 segment display PIN CLK 44#define 45 DIO 10 // 7 segment display PIN DIO 46#define OUR_latitude 50.770854 47 // Sidlesham cordinates 48#define OUR_longtitude -0.784057 49#define OUR_timezone 50 0 // localtime with UTC difference in minutes 51 52float V = 7.2; //version 53 54sunMoon 55 sm; 56 57TM1637 Display1(CLK, DIO); 58int8_t Digits[] = {0, 1, 2, 3}; 59int 60 hours; 61int minutes; 62 63const int led1 = 2; //New Moon (Blue LED) 64const 65 int led2 = 3; //Waxing Cresent (White LED) 66const int led3 = 4; //First 67 Quarter (White LED) 68const int led4 = 5; //Waxing Gibbon (White LED) 69const 70 int led5 = 6; //Full Moon (White LED) 71const int led6 = 7; //Wanning Gibbon 72 (White LED) 73const int led7 = 8; //Last Quarter (White LED) 74const int led8 75 = 9; //Waning Cresent (White LED) 76 77byte mDay = sm.moonDay(); 78 79boolean 80 alterna; 81 82DHT dht2 (DHT2PIN, DHT2TYPE); //outside temp,hum 83DHT dht1 (DHT1PIN, 84 DHT1TYPE); //inside temp,hum 85Adafruit_BMP280 bme; 86 87LiquidCrystal_I2C 88 lcd(0x27, 20, 4); // Set the LCD I2C address 89 90int chk; 91int LDR = A0; 92int 93 Light = 0; 94 95float temp1; //Inside Temperature 96float hum1; //Inside 97 Humidity 98float temp2; //Outside Temperature 99float hum2; //Outside 100 Humidity 101float Pressure; //Pressure! 102float dp; //Dew Point Outside 103float 104 temp2f; //temp outside in F 105float hif; //Heat index in F 106float 107 hic; //Heat Index in C 108float sRise; //Sun Rise Calculation 109float 110 sSet; //Sun Set Calculation 111 112unsigned long switchMillis = 0; 113unsigned 114 long interval = 5000; // 5 seconds for each lcd screen 115byte count = 0; 116 117boolean 118 firstScreenFlag = false; 119boolean secondScreenFlag = false; 120boolean thirdScreenFlag 121 = false; 122boolean fouthScreenFlag = false; 123boolean fifthScreenFlag = false; 124 125void 126 setup() 127{ 128 129 tmElements_t tm; // specific 130 time 131 time_t s_date = makeTime(tm); 132 133 Serial.begin(9600); 134 setSyncProvider(RTC.get); 135 // the function to get the time from the RTC 136 if (timeStatus() 137 != timeSet) 138 Serial.println("Unable to sync with the RTC"); 139 else 140 141 Serial.println("RTC has set the system time"); 142 143 sm.init(OUR_timezone, 144 OUR_latitude, OUR_longtitude); 145 146 time_t sRise = sm.sunRise(); 147 time_t 148 sSet = sm.sunSet(); 149 150 sRise = sm.sunRise(s_date); 151 sSet = sm.sunSet(s_date); 152 153 154 Serial.begin(9600); 155 156 Display1.set(); 157 Display1.init(); 158 159 pinMode(led1, 160 OUTPUT); 161 pinMode(led2, OUTPUT); 162 pinMode(led3, OUTPUT); 163 pinMode(led4, 164 OUTPUT); 165 pinMode(led5, OUTPUT); 166 pinMode(led6, OUTPUT); 167 pinMode(led7, 168 OUTPUT); 169 pinMode(led8, OUTPUT); 170 pinMode(LDR, INPUT); 171 172 lcd.init(); 173 174 lcd.clear(); 175 lcd.backlight(); 176 dht1.begin(); 177 dht2.begin(); 178 Wire.begin(); 179 180 181 lcd.setCursor(0, 0); 182 lcd.print(F(" Weather Station")); 183 lcd.setCursor(3, 184 2); 185 lcd.print(F("Version : ")); 186 lcd.print(V, 1); 187 delay(3000); 188 189 lcd.clear(); 190 191 if (!bme.begin()) 192 { 193 while (1); 194 } 195 196} 197 198void 199 loop() 200{ 201 202 Light = analogRead(LDR); 203 204 if (Light > 900) { 205 206 lcd.noBacklight(); //Turns off LCD Backlight when dark 207 208 } else { 209 210 211 lcd.backlight(); //Turns on LCD Backlight when light 212 } 213 214 tmElements_t 215 tm; 216 time_t s_date = makeTime(tm); 217 218 if (RTC.read(tm)) { 219 220 print2digits(tm.Hour); 221 222 print2digits(tm.Minute); 223 224 hours = tm.Hour; 225 minutes = tm.Minute; 226 227 CalculaDigits(hours, minutes); 228 if (alterna) 229 { 230 Display1.point(POINT_OFF); 231 232 alterna = false; 233 } 234 else 235 { 236 Display1.point(POINT_ON); 237 238 alterna = true; 239 } 240 241 } else { 242 if (RTC.chipPresent()) { 243 244 245 } else { 246 247 } 248 delay(9000); 249 } 250 delay(1000); 251 252 if 253 (millis() - switchMillis > interval) 254 { 255 count++; 256 257 if (count 258 == 1) 259 { 260 firstScreenFlag = true; 261 count = 1; 262 } 263 264 if (count == 2) 265 { 266 secondScreenFlag = true; 267 count = 268 2; 269 } 270 if (count == 3) 271 { 272 thirdScreenFlag = true; 273 274 count = 3; 275 } 276 if (count == 4) 277 { 278 fouthScreenFlag 279 = true; 280 count = 4; 281 } 282 if (count == 5) 283 { 284 fifthScreenFlag 285 = true; 286 count = 0; 287 } 288 switchMillis += interval; 289 } 290 291 292 if (firstScreenFlag) 293 { 294 printTime(1, 0, tm); 295 firstScreenFlag 296 = false; 297 } 298 299 if (secondScreenFlag) 300 { 301 printTemp(); 302 secondScreenFlag 303 = false; 304 } 305 306 if (thirdScreenFlag) 307 { 308 printIndex(); 309 thirdScreenFlag 310 = false; 311 } 312 313 if (fouthScreenFlag) 314 { 315 printPressure(); 316 317 fouthScreenFlag = false; 318 } 319 if (fifthScreenFlag) 320 { 321 printMoon(tm); 322 323 fifthScreenFlag = false; 324 } 325} 326 327void printLcdDate(time_t date) 328{ 329 330 char rise[10]; 331 sprintf(rise, "%02d:%02d", hour(date), minute(date)); 332 333 lcd.print(rise); 334} 335 336void printTime(int character, int line, tmElements_t 337 tm) 338{ 339 340 lcd.clear(); 341 String seconds, minutes; 342 lcd.setCursor(character, 343 line); 344 lcd.print(tm.Hour); 345 lcd.print(F(":")); 346 if (tm.Minute < 10) 347 348 { 349 minutes = "0" + String(tm.Minute); 350 lcd.print(minutes); 351 } 352 else 353 { 354 lcd.print(tm.Minute); 355 } 356 357 lcd.setCursor(9, 0); 358 359 lcd.print(tm.Day); 360 lcd.print(F("/")); 361 lcd.print(tm.Month); 362 lcd.print(F("/")); 363 364 lcd.print(tmYearToCalendar(tm.Year)); 365 366 time_t s_date = makeTime(tm); 367 368 time_t sRise = sm.sunRise(); 369 time_t sSet = sm.sunSet(); 370 sRise = sm.sunRise(s_date); 371 372 sSet = sm.sunSet(s_date); 373 374 lcd.setCursor(1, 2); 375 lcd.print(F("SunRise 376 : ")); 377 printLcdDate(sRise); 378 lcd.setCursor(1, 3); 379 lcd.print(F("SunSet 380 : ")); 381 printLcdDate(sSet); 382 383} 384 385void printTemp() 386{ 387 hum1 388 = dht1.readHumidity(); //inside 389 temp1 = dht1.readTemperature(); 390 //inside 391 hum2 = dht2.readHumidity(); //outside 392 393 temp2 = dht2.readTemperature(); //outside 394 395 lcd.clear(); 396 397 lcd.setCursor(0, 0); 398 lcd.print(F(" Inside Outside")); 399 lcd.setCursor(0, 400 2); 401 lcd.print(F("T: ")); 402 lcd.print(temp1, 1); 403 lcd.print(F(" ")); 404 405 lcd.print((char)223); 406 lcd.print(F("C")); 407 lcd.setCursor(13, 2); 408 409 lcd.print(temp2, 1); 410 lcd.print(F(" ")); 411 lcd.print(( char)223); 412 413 lcd.print(F("C")); 414 415 lcd.setCursor(0, 3); 416 lcd.print(F("H: ")); 417 418 lcd.print(hum1, 0); 419 lcd.print(F(" %")); 420 lcd.setCursor(14, 3); 421 422 lcd.print(hum2, 0); 423 lcd.print(F(" %")); 424 425} 426void printIndex() 427{ 428 429 430 hum2 = dht2.readHumidity(); //outside 431 temp2 = dht2.readTemperature(); 432 //outside 433 temp2f = dht2.readTemperature(true); // temp in f 434 435 436 double Point = log(hum2 / 100) + ((17.62 * temp2) / (243.5 + temp2)); 437 double 438 dp = 243.5 * Point / (17.62 - Point); 439 440 lcd.clear(); 441 lcd.setCursor(0, 442 0); 443 lcd.print(F(" Outside Readings")); 444 lcd.setCursor(0, 2); 445 lcd.print(F("Dew 446 Point : ")); 447 lcd.print(dp, 1); 448 lcd.print(F(" ")); 449 lcd.print((char)223); 450 451 lcd.print(F("C")); 452 453 hif = dht2.computeHeatIndex(temp2f, hum2); //heat 454 index in degrees F 455 hic = dht2.computeHeatIndex(temp2, hum2, false); //heat 456 index in degrees C 457 458 lcd.setCursor(0, 3); 459 lcd.print(F("Heat Index : 460 ")); 461 lcd.print(hic, 1); 462 lcd.print(F(" ")); 463 lcd.print((char)223); 464 465 lcd.print(F("C")); 466 467} 468void printPressure() 469{ 470 Pressure = (bme.readPressure() 471 / 100); // 100 Pa = 1 millibar 472 473 lcd.clear(); 474 lcd.setCursor(0, 1); 475 476 lcd.print(F(" Press : ")); 477 lcd.print(Pressure); 478 lcd.print(F(" mb")); 479 480 lcd.setCursor(0, 3); 481 lcd.print(F("Weather :")); 482 483 if (Pressure <= 484 970); { 485 lcd.setCursor(13, 3); 486 lcd.print(F(" ")); 487 lcd.setCursor(13, 488 3); 489 lcd.print(F("Stormy")); 490 } 491 if (Pressure > 970) { 492 lcd.setCursor(11, 493 3); 494 lcd.print(F(" ")); 495 lcd.setCursor(11, 3); 496 lcd.print(F("Much 497 Rain")); 498 } 499 if (Pressure > 996) { 500 lcd.setCursor(11, 3); 501 lcd.print(F(" 502 ")); 503 lcd.setCursor(13, 3); 504 lcd.print(F("Rain")); 505 } 506 507 if (Pressure > 1006) { 508 lcd.setCursor(11, 3); 509 lcd.print(F(" ")); 510 511 lcd.setCursor(11, 3); 512 lcd.print(F("Variable")); 513 } 514 if (Pressure 515 > 1030) { 516 lcd.setCursor(11, 3); 517 lcd.print(F(" ")); 518 lcd.setCursor(13, 519 3); 520 lcd.print(F("Fair")); 521 } 522 if (Pressure > 1040) { 523 lcd.setCursor(11, 524 3); 525 lcd.print(F(" ")); 526 lcd.setCursor(11, 3); 527 lcd.print(F("Set 528 Fair")); 529 } 530 if (Pressure > 1060) { 531 lcd.setCursor(11, 3); 532 lcd.print(F(" 533 ")); 534 lcd.setCursor(11, 3); 535 lcd.print(F("Very Dry")); 536 537 } 538} 539 540void printMoon(tmElements_t tm) 541{ 542 time_t s_date = makeTime(tm); 543 544 mDay = sm.moonDay(s_date); 545 546 lcd.clear(); 547 lcd.setCursor(0, 0); 548 549 lcd.print(" Moon age is "); 550 lcd.print(mDay); 551 if (mDay == 1) { 552 553 lcd.print(" day "); 554 } 555 else { 556 lcd.print(" days"); 557 } 558 559 lcd.setCursor(0, 2); 560 561 if (mDay == 0) { 562 563 lcd.setCursor(0, 2); 564 565 lcd.print(" New Moon "); 566 lcd.setCursor(0, 3); 567 lcd.print(" 568 Illumination 0 % "); 569 digitalWrite(led1, HIGH); 570 digitalWrite(led2, 571 LOW); 572 digitalWrite(led3, LOW); 573 digitalWrite(led4, LOW); 574 digitalWrite(led5, 575 LOW); 576 digitalWrite(led6, LOW); 577 digitalWrite(led7, LOW); 578 digitalWrite(led8, 579 LOW); 580 } 581 if (mDay == 1) { 582 583 lcd.setCursor(0, 2); 584 lcd.print(" 585 Waxing Cresent"); 586 lcd.setCursor(0, 3); 587 lcd.print(" Illumination 588 1 % "); 589 digitalWrite(led1, LOW); 590 digitalWrite(led2, HIGH); 591 digitalWrite(led3, 592 LOW); 593 digitalWrite(led4, LOW); 594 digitalWrite(led5, LOW); 595 digitalWrite(led6, 596 LOW); 597 digitalWrite(led7, LOW); 598 digitalWrite(led8, LOW); 599 } 600 601 602 if (mDay == 2) { 603 604 lcd.setCursor(0, 2); 605 lcd.print(" Waxing 606 Cresent"); 607 lcd.setCursor(0, 3); 608 lcd.print(" Illumination 4 % "); 609 610 digitalWrite(led1, LOW); 611 digitalWrite(led2, HIGH); 612 digitalWrite(led3, 613 LOW); 614 digitalWrite(led4, LOW); 615 digitalWrite(led5, LOW); 616 digitalWrite(led6, 617 LOW); 618 digitalWrite(led7, LOW); 619 digitalWrite(led8, LOW); 620 } 621 622 623 if (mDay == 3) { 624 625 lcd.setCursor(0, 2); 626 lcd.print(" Waxing 627 Cresent"); 628 lcd.setCursor(0, 3); 629 lcd.print(" Illumination 8 % "); 630 631 digitalWrite(led1, LOW); 632 digitalWrite(led2, HIGH); 633 digitalWrite(led3, 634 LOW); 635 digitalWrite(led4, LOW); 636 digitalWrite(led5, LOW); 637 digitalWrite(led6, 638 LOW); 639 digitalWrite(led7, LOW); 640 digitalWrite(led8, LOW); 641 } 642 643 644 if (mDay == 4) { 645 646 lcd.setCursor(0, 2); 647 lcd.print(" Waxing 648 Cresent"); 649 lcd.setCursor(0, 3); 650 lcd.print(" Illumination 15 % "); 651 652 digitalWrite(led1, LOW); 653 digitalWrite(led2, HIGH); 654 digitalWrite(led3, 655 LOW); 656 digitalWrite(led4, LOW); 657 digitalWrite(led5, LOW); 658 digitalWrite(led6, 659 LOW); 660 digitalWrite(led7, LOW); 661 digitalWrite(led8, LOW); 662 } 663 664 665 if (mDay == 5) { 666 667 lcd.setCursor(0, 2); 668 lcd.print(" Waxing 669 Cresent"); 670 lcd.setCursor(0, 3); 671 lcd.print(" Illumination 22 % "); 672 673 digitalWrite(led1, LOW); 674 digitalWrite(led2, HIGH); 675 digitalWrite(led3, 676 LOW); 677 digitalWrite(led4, LOW); 678 digitalWrite(led5, LOW); 679 digitalWrite(led6, 680 LOW); 681 digitalWrite(led7, LOW); 682 digitalWrite(led8, LOW); 683 } 684 685 686 if (mDay == 6) { 687 688 lcd.setCursor(0, 2); 689 lcd.print(" Waxing 690 Cresent"); 691 lcd.setCursor(0, 3); 692 lcd.print(" Illumination 31 % "); 693 694 digitalWrite(led1, LOW); 695 digitalWrite(led2, HIGH); 696 digitalWrite(led3, 697 LOW); 698 digitalWrite(led4, LOW); 699 digitalWrite(led5, LOW); 700 digitalWrite(led6, 701 LOW); 702 digitalWrite(led7, LOW); 703 digitalWrite(led8, LOW); 704 } 705 706 707 if (mDay == 7) { 708 709 lcd.setCursor(0, 2); 710 lcd.print(" First Quarter 711 "); 712 lcd.setCursor(0, 3); 713 lcd.print(" Illumination 50 % "); 714 715 digitalWrite(led1, LOW); 716 digitalWrite(led2, LOW); 717 digitalWrite(led3, 718 HIGH); 719 digitalWrite(led4, LOW); 720 digitalWrite(led5, LOW); 721 digitalWrite(led6, 722 LOW); 723 digitalWrite(led7, LOW); 724 digitalWrite(led8, LOW); 725 } 726 727 728 if (mDay == 8) { 729 730 lcd.setCursor(0, 2); 731 lcd.print(" Waxing 732 Gibbons"); 733 lcd.setCursor(0, 3); 734 lcd.print(" Illumination 58 % "); 735 736 digitalWrite(led1, LOW); 737 digitalWrite(led2, LOW); 738 digitalWrite(led3, 739 LOW); 740 digitalWrite(led4, HIGH); 741 digitalWrite(led5, LOW); 742 digitalWrite(led6, 743 LOW); 744 digitalWrite(led7, LOW); 745 digitalWrite(led8, LOW); 746 } 747 748 if (mDay == 9) { 749 750 lcd.setCursor(0, 2); 751 lcd.print(" Waxing 752 Gibbons"); 753 lcd.setCursor(0, 3); 754 lcd.print(" Illumination 68 % "); 755 756 digitalWrite(led1, LOW); 757 digitalWrite(led2, LOW); 758 digitalWrite(led3, 759 LOW); 760 digitalWrite(led4, HIGH); 761 digitalWrite(led5, LOW); 762 digitalWrite(led6, 763 LOW); 764 digitalWrite(led7, LOW); 765 digitalWrite(led8, LOW); 766 } 767 768 if (mDay == 10) { 769 770 lcd.setCursor(0, 2); 771 lcd.print(" Waxing 772 Gibbons"); 773 lcd.setCursor(0, 3); 774 lcd.print(" Illumination 76 % "); 775 776 digitalWrite(led1, LOW); 777 digitalWrite(led2, LOW); 778 digitalWrite(led3, 779 LOW); 780 digitalWrite(led4, HIGH); 781 digitalWrite(led5, LOW); 782 digitalWrite(led6, 783 LOW); 784 digitalWrite(led7, LOW); 785 digitalWrite(led8, LOW); 786 } 787 788 if (mDay == 11) { 789 790 lcd.setCursor(0, 2); 791 lcd.print(" Waxing 792 Gibbons"); 793 lcd.setCursor(0, 3); 794 lcd.print(" Illumination 84 % "); 795 796 digitalWrite(led1, LOW); 797 digitalWrite(led2, LOW); 798 digitalWrite(led3, 799 LOW); 800 digitalWrite(led4, HIGH); 801 digitalWrite(led5, LOW); 802 digitalWrite(led6, 803 LOW); 804 digitalWrite(led7, LOW); 805 digitalWrite(led8, LOW); 806 } 807 808 if (mDay == 12) { 809 810 lcd.setCursor(0, 2); 811 lcd.print(" Waxing 812 Gibbons"); 813 lcd.setCursor(0, 3); 814 lcd.print(" Illumination 91 % "); 815 816 digitalWrite(led1, LOW); 817 digitalWrite(led2, LOW); 818 digitalWrite(led3, 819 LOW); 820 digitalWrite(led4, HIGH); 821 digitalWrite(led5, LOW); 822 digitalWrite(led6, 823 LOW); 824 digitalWrite(led7, LOW); 825 digitalWrite(led8, LOW); 826 } 827 828 if (mDay == 13) { 829 830 lcd.setCursor(0, 2); 831 lcd.print(" Waxing 832 Gibbons"); 833 lcd.setCursor(0, 3); 834 lcd.print(" Illumination 96 % "); 835 836 digitalWrite(led1, LOW); 837 digitalWrite(led2, LOW); 838 digitalWrite(led3, 839 LOW); 840 digitalWrite(led4, HIGH); 841 digitalWrite(led5, LOW); 842 digitalWrite(led6, 843 LOW); 844 digitalWrite(led7, LOW); 845 digitalWrite(led8, LOW); 846 } 847 848 if (mDay == 14) { 849 850 lcd.setCursor(0, 2); 851 lcd.print(" Waxing 852 Gibbons"); 853 lcd.setCursor(0, 3); 854 lcd.print(" Illumination 99 % "); 855 856 digitalWrite(led1, LOW); 857 digitalWrite(led2, LOW); 858 digitalWrite(led3, 859 LOW); 860 digitalWrite(led4, HIGH); 861 digitalWrite(led5, LOW); 862 digitalWrite(led6, 863 LOW); 864 digitalWrite(led7, LOW); 865 digitalWrite(led8, LOW); 866 } 867 868 if (mDay == 15) { 869 870 lcd.setCursor(0, 2); 871 lcd.print(" Full 872 Moon "); 873 lcd.setCursor(0, 3); 874 lcd.print(" Illumination 100 % "); 875 876 digitalWrite(led1, LOW); 877 digitalWrite(led2, LOW); 878 digitalWrite(led3, 879 LOW); 880 digitalWrite(led4, LOW); 881 digitalWrite(led5, HIGH); 882 digitalWrite(led6, 883 LOW); 884 digitalWrite(led7, LOW); 885 digitalWrite(led8, LOW); 886 } 887 888 if (mDay == 16) { 889 890 lcd.setCursor(0, 2); 891 lcd.print(" Waning 892 Gibbons"); 893 lcd.setCursor(0, 3); 894 lcd.print(" Illumination 98 % "); 895 896 digitalWrite(led1, LOW); 897 digitalWrite(led2, LOW); 898 digitalWrite(led3, 899 LOW); 900 digitalWrite(led4, LOW); 901 digitalWrite(led5, LOW); 902 digitalWrite(led6, 903 HIGH); 904 digitalWrite(led7, LOW); 905 digitalWrite(led8, LOW); 906 } 907 908 if (mDay == 17) { 909 910 lcd.setCursor(0, 2); 911 lcd.print(" Waning 912 Gibbons"); 913 lcd.setCursor(0, 3); 914 lcd.print(" Illumination 93 % "); 915 916 digitalWrite(led1, LOW); 917 digitalWrite(led2, LOW); 918 digitalWrite(led3, 919 LOW); 920 digitalWrite(led4, LOW); 921 digitalWrite(led5, LOW); 922 digitalWrite(led6, 923 HIGH); 924 digitalWrite(led7, LOW); 925 digitalWrite(led8, LOW); 926 } 927 928 if (mDay == 18) { 929 930 lcd.setCursor(0, 2); 931 lcd.print(" Waning 932 Gibbons"); 933 lcd.setCursor(0, 3); 934 lcd.print(" Illumination 86 % "); 935 936 digitalWrite(led1, LOW); 937 digitalWrite(led2, LOW); 938 digitalWrite(led3, 939 LOW); 940 digitalWrite(led4, LOW); 941 digitalWrite(led5, LOW); 942 digitalWrite(led6, 943 HIGH); 944 digitalWrite(led7, LOW); 945 digitalWrite(led8, LOW); 946 } 947 948 if (mDay == 19) { 949 950 lcd.setCursor(0, 2); 951 lcd.print(" Waning 952 Gibbons"); 953 lcd.setCursor(0, 3); 954 lcd.print(" Illumination 77 % "); 955 956 digitalWrite(led1, LOW); 957 digitalWrite(led2, LOW); 958 digitalWrite(led3, 959 LOW); 960 digitalWrite(led4, LOW); 961 digitalWrite(led5, LOW); 962 digitalWrite(led6, 963 HIGH); 964 digitalWrite(led7, LOW); 965 digitalWrite(led8, LOW); 966 } 967 968 if (mDay == 20) { 969 970 lcd.setCursor(0, 2); 971 lcd.print(" Waning 972 Gibbons"); 973 lcd.setCursor(0, 3); 974 lcd.print(" Illumination 67 % "); 975 976 digitalWrite(led1, LOW); 977 digitalWrite(led2, LOW); 978 digitalWrite(led3, 979 LOW); 980 digitalWrite(led4, LOW); 981 digitalWrite(led5, LOW); 982 digitalWrite(led6, 983 HIGH); 984 digitalWrite(led7, LOW); 985 digitalWrite(led8, LOW); 986 } 987 988 if (mDay == 21) { 989 990 lcd.setCursor(0, 2); 991 lcd.print(" Waning 992 Gibbons"); 993 lcd.setCursor(0, 3); 994 lcd.print(" Illumination 56 % "); 995 996 digitalWrite(led1, LOW); 997 digitalWrite(led2, LOW); 998 digitalWrite(led3, 999 LOW); 1000 digitalWrite(led4, LOW); 1001 digitalWrite(led5, LOW); 1002 digitalWrite(led6, 1003 HIGH); 1004 digitalWrite(led7, LOW); 1005 digitalWrite(led8, LOW); 1006 } 1007 1008 if (mDay == 22) { 1009 1010 lcd.setCursor(0, 2); 1011 lcd.print(" Waning 1012 Gibbons"); 1013 lcd.setCursor(0, 3); 1014 lcd.print(" Illumination 52 % "); 1015 1016 digitalWrite(led1, LOW); 1017 digitalWrite(led2, LOW); 1018 digitalWrite(led3, 1019 LOW); 1020 digitalWrite(led4, LOW); 1021 digitalWrite(led5, LOW); 1022 digitalWrite(led6, 1023 HIGH); 1024 digitalWrite(led7, LOW); 1025 digitalWrite(led8, LOW); 1026 } 1027 1028 if (mDay == 23) { 1029 1030 lcd.setCursor(0, 2); 1031 lcd.print(" Last 1032 Quarter "); 1033 lcd.setCursor(0, 3); 1034 lcd.print(" Illumination 50 % "); 1035 1036 digitalWrite(led1, LOW); 1037 digitalWrite(led2, LOW); 1038 digitalWrite(led3, 1039 LOW); 1040 digitalWrite(led4, LOW); 1041 digitalWrite(led5, LOW); 1042 digitalWrite(led6, 1043 LOW); 1044 digitalWrite(led7, HIGH); 1045 digitalWrite(led8, LOW); 1046 } 1047 1048 if (mDay == 24) { 1049 1050 lcd.setCursor(0, 2); 1051 lcd.print(" Waning 1052 Cresent"); 1053 lcd.setCursor(0, 3); 1054 lcd.print(" Illumination 34 % "); 1055 1056 digitalWrite(led1, LOW); 1057 digitalWrite(led2, LOW); 1058 digitalWrite(led3, 1059 LOW); 1060 digitalWrite(led4, LOW); 1061 digitalWrite(led5, LOW); 1062 digitalWrite(led6, 1063 LOW); 1064 digitalWrite(led7, LOW); 1065 digitalWrite(led8, HIGH); 1066 } 1067 1068 if (mDay == 25) { 1069 1070 lcd.setCursor(0, 2); 1071 lcd.print(" Waning 1072 Cresent"); 1073 lcd.setCursor(0, 3); 1074 lcd.print(" Illumination 24 % "); 1075 1076 digitalWrite(led1, LOW); 1077 digitalWrite(led2, LOW); 1078 digitalWrite(led3, 1079 LOW); 1080 digitalWrite(led4, LOW); 1081 digitalWrite(led5, LOW); 1082 digitalWrite(led6, 1083 LOW); 1084 digitalWrite(led7, LOW); 1085 digitalWrite(led8, HIGH); 1086 } 1087 1088 if (mDay == 26) { 1089 1090 lcd.setCursor(0, 2); 1091 lcd.print(" Waning 1092 Cresent"); 1093 lcd.setCursor(0, 3); 1094 lcd.print(" Illumination 15 % "); 1095 1096 digitalWrite(led1, LOW); 1097 digitalWrite(led2, LOW); 1098 digitalWrite(led3, 1099 LOW); 1100 digitalWrite(led4, LOW); 1101 digitalWrite(led5, LOW); 1102 digitalWrite(led6, 1103 LOW); 1104 digitalWrite(led7, LOW); 1105 digitalWrite(led8, HIGH); 1106 } 1107 1108 if (mDay == 27) { 1109 1110 lcd.setCursor(0, 2); 1111 lcd.print(" Waning 1112 Cresent"); 1113 lcd.setCursor(0, 3); 1114 lcd.print(" Illumination 8 % "); 1115 1116 digitalWrite(led1, LOW); 1117 digitalWrite(led2, LOW); 1118 digitalWrite(led3, 1119 LOW); 1120 digitalWrite(led4, LOW); 1121 digitalWrite(led5, LOW); 1122 digitalWrite(led6, 1123 LOW); 1124 digitalWrite(led7, LOW); 1125 digitalWrite(led8, HIGH); 1126 } 1127 1128 if (mDay == 28) { 1129 1130 lcd.setCursor(0, 2); 1131 lcd.print(" Waning 1132 Cresent"); 1133 lcd.setCursor(0, 3); 1134 lcd.print(" Illumination 3 % "); 1135 1136 digitalWrite(led1, LOW); 1137 digitalWrite(led2, LOW); 1138 digitalWrite(led3, 1139 LOW); 1140 digitalWrite(led4, LOW); 1141 digitalWrite(led5, LOW); 1142 digitalWrite(led6, 1143 LOW); 1144 digitalWrite(led7, LOW); 1145 digitalWrite(led8, HIGH); 1146 } 1147 1148 if (mDay == 29) { 1149 1150 lcd.setCursor(0, 2); 1151 lcd.print(" Waning 1152 Cresent"); 1153 lcd.setCursor(0, 3); 1154 lcd.print(" Illumination 1 % "); 1155 1156 digitalWrite(led1, LOW); 1157 digitalWrite(led2, LOW); 1158 digitalWrite(led3, 1159 LOW); 1160 digitalWrite(led4, LOW); 1161 digitalWrite(led5, LOW); 1162 digitalWrite(led6, 1163 LOW); 1164 digitalWrite(led7, LOW); 1165 digitalWrite(led8, HIGH); 1166 } 1167} 1168 1169void 1170 print2digits(int number) { 1171 1172 if (number >= 0 && number < 10) { 1173 Serial.write('0'); 1174 1175 } 1176 Serial.print(number); 1177} 1178 1179void CalculaDigits( int hour, int min) 1180{ 1181 1182 int8_t Digit0 = min % 10 ; 1183 int8_t Digit1 = (min % 100) / 10 ; 1184 int8_t 1185 Digit2 = hour % 10 ; 1186 int8_t Digit3 = (hour % 100) / 10 ; 1187 1188 Digits[3] 1189 = Digit0 ; 1190 Digits[2] = Digit1 ; 1191 Digits[1] = Digit2 ; 1192 Digits[0] = 1193 Digit3 ; 1194 1195 Display1.display(Digits); 1196} 1197
Downloadable files
UPDATED AGAIN Diagram
UPDATED AGAIN Diagram
UPDATED AGAIN Diagram
UPDATED AGAIN Diagram
PIC
PIC
Comments
Only logged in users can leave comments
Fathead
0 Followers
•0 Projects
Table of contents
Intro
16
0