Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <Wire.h>
- #include "RTClib.h"
- #include <LiquidCrystal_I2C.h>
- #include <dht11.h>
- #include <OneWire.h>
- #include <DallasTemperature.h>
- #define ONE_WIRE_BUS 2
- OneWire oneWire(ONE_WIRE_BUS);
- DallasTemperature sensors(&oneWire);
- dht11 DHT;
- #define DHT11_PIN 4
- RTC_DS3231 rtc;
- LiquidCrystal_I2C lcd(0x3F, 16, 2);
- int i = 0;
- int pwm;
- int minfrom00;
- int sunrise;
- int sunset;
- byte oraa;
- byte mina;
- byte orat;
- byte mint;
- void setup() {
- pinMode(6, OUTPUT); // uscita PWM per dimmer
- pinMode(13, OUTPUT); // uscita ON/OFF luce
- sensors.begin();
- lcd.init();
- delay(3000); // wait for console opening
- if (! rtc.begin()) {
- Serial.println("Couldn't find RTC");
- while (1);
- }
- if ( rtc.lostPower()) {
- Serial.println("RTC is NOT running!");
- // following line sets the RTC to the date & time this sketch was compiled
- rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
- // This line sets the RTC with an explicit date & time, for example to set
- // January 21, 2014 at 3am you would call:
- // rtc.adjust(DateTime(2014, 1, 21, 3, 0, 0));
- }
- rtc.adjust(DateTime(2017, 3, 25, 06, 23, 50)); // usata per settare l'orologio ad orari diversi e verificare il funzionamento del tutto
- }
- void loop() {
- int chk;
- Serial.print("DHT11, \t");
- chk = DHT.read(DHT11_PIN);
- DateTime now = rtc.now();
- sensors.requestTemperatures();
- minfrom00 = (now.hour() * 60) + now.minute(); //calcola il numero di minuti a partire dalla mezzanotte
- sunrise = int(389 + (105 * cos(((((now.month() - 1) * 30.5) + now.day()) + 8) / 58.1)));
- sunset = int(1121 + (108 * sin(((((now.month() - 1) * 30.5) + now.day()) - 83) / 58.1)));
- oraa = (int)sunrise / 60; // ora alba
- mina = sunrise - oraa * 60; // minuti alba
- orat = (int)sunset / 60; // ora tramonto
- mint = sunset - orat * 60; // minuti tramonto
- lcd.backlight();
- lcd.print("Ora Alba ");
- lcd.print(oraa);
- lcd.print(":");
- lcd.print(mina);
- lcd.setCursor(0, 1);
- lcd.print("Ora Tram. ");
- lcd.print(orat);
- lcd.print(":");
- lcd.print(mint);
- delay(5000);
- lcd.setCursor(0, 0);
- lcd.clear();
- lcd.print("Ora Att ");
- lcd.print(now.hour(), DEC);
- lcd.print(":");
- lcd.print(now.minute(), DEC);
- lcd.setCursor(0, 1);
- lcd.print("lum. pwm ");
- lcd.print(pwm);
- delay(5000);
- lcd.setCursor(0, 0);
- lcd.clear();
- lcd.print("Temp. C. ");
- lcd.print(DHT.temperature, 1);
- lcd.setCursor(0, 1);
- lcd.print("Umid. ");
- lcd.print(DHT.humidity, 1);
- delay(5000);
- lcd.setCursor(0, 0);
- lcd.clear();
- lcd.print("Temp. H2O ");
- lcd.print (sensors.getTempCByIndex(0));
- lcd.print (" C");
- delay(5000);
- lcd.clear();
- if (minfrom00 >= sunrise && (minfrom00 < sunrise + 60)) { // è ora dell'alba
- digitalWrite(13, HIGH); // accende la luce
- i = minfrom00 - sunrise;
- pwm = map(i, 0, 59, 0, 255);
- analogWrite(6, pwm); // dimming ALBA
- }
- if ((minfrom00 >= (sunrise + 60)) && (minfrom00 < sunset)) {
- pwm = 255;
- analogWrite(6, pwm); // dimmer al massimo
- }
- if (minfrom00 >= sunset && (minfrom00 < sunset + 60)) { // è ora del tramonto
- i = minfrom00 - sunset;
- pwm = map(i, 0, 59, -255, 0);
- pwm = abs(pwm);
- analogWrite(6, pwm); // dimming TRAMONTO
- }
- //
- if (minfrom00 >= (sunset + 60)) {
- digitalWrite(13, LOW); // spegne la luce
- pwm = 0;
- analogWrite(6, pwm); // dimmer al minimo
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement