#include <LiquidCrystal_I2C.h>
#include <RTClib.h>
#include <Wire.h>
#include <dht.h>
#include <ezBuzzer.h>
#include <stdio.h>
#include <stdlib.h>
dht DHT;
RTC_DS1307 rtc;
LiquidCrystal_I2C lcd(0x27, 20, 4);
#define DHT22_PIN 5
#define servo 3
#define mosfet 10
const int BUZZER_PIN = 13;
const int ok = A1;
const int UP = A2; //BOTOES
const int DOWN = A3;
ezBuzzer buzzer(BUZZER_PIN); // create ezBuzzer object that attach to a pin;
int pwmluz;
int Hor;
int Min;
int Sec;
int Data;
int falta = 22;// 31.680 segundos
int8_t dia;
int agenda;
int desperta;
int i;
uint8_t date;
// notes in the melody:
int melody[] = {
NOTE_E5, NOTE_E5, NOTE_E5,
NOTE_E5, NOTE_E5, NOTE_E5,
NOTE_E5, NOTE_G5, NOTE_C5, NOTE_D5,
NOTE_E5,
NOTE_F5, NOTE_F5, NOTE_F5, NOTE_F5,
NOTE_F5, NOTE_E5, NOTE_E5, NOTE_E5, NOTE_E5,
NOTE_E5, NOTE_D5, NOTE_D5, NOTE_E5,
NOTE_D5, NOTE_G5
};
// note durations: 4 = quarter note, 8 = eighth note, etc, also called tempo:
int noteDurations[] = {
8, 8, 4,
8, 8, 4,
8, 8, 8, 8,
2,
8, 8, 8, 8,
8, 8, 8, 16, 16,
8, 8, 8, 8,
4, 4
};
int noteLength;
void setup() {
rtc.begin();
pinMode(mosfet, OUTPUT);
pinMode(ok, INPUT);
pinMode(UP, INPUT);
pinMode(DOWN, INPUT);
analogWrite(servo, 80);
lcd.init();
lcd.backlight();
Serial.begin(9600);
noteLength = sizeof(noteDurations) / sizeof(int);
}
void loop() {
// DEVE chamar a função buzzer.loop() em loop()
buzzer.loop();
//rtc.adjust(DateTime(2024, 1, 1, 23, 59, 59));
DateTime now = rtc.now();
Hor = rtc.now().hour();
Min = rtc.now().minute();
Sec = rtc.now().second();
Data = rtc.now().day();
//if (Hor < 24) {
if ( Hor == 18 && (Min == 55 || Min == 00) && Sec == 01) {// 1
//while (Hor <= 24) {
agenda = 0;
if (agenda == 0) {
(desperta = desperta + 1);
delayMicroseconds(500);
}
if ( desperta == 1) {
dia = (falta - 0^0);
return (0);
}
//for (int i = 80; i >= 50; i--) {
Serial.println(dia);
delay(100);
//}
}
if ( Hor == 16 && (Min == 19 || Min == 00) && Sec == 01) {//2
agenda = 0;
if (agenda == 0) {
(desperta = desperta + 1);
delayMicroseconds(500);
}
if ( desperta <= falta) {
dia = (dia - 1);
}
//for (int i = 80; i >= 50; i--) {
Serial.println(dia);
delay(100);
}
if ( Hor == 16 && (Min == 20 || Min == 00) && Sec == 01) {//3
agenda = 0;
if (agenda == 0) {
(desperta = desperta + 1);
delayMicroseconds(500);
}
if ( desperta <= falta) {
dia = (dia - 1);
}
//for (int i = 80; i >= 50; i--) {
Serial.println(dia);
delay(100);
}
if ( desperta >= falta) {
desperta == 1;
}
//}
// Se faltar mais de 4 dias para a choca move os motores as 6:00, 12:00, 17:56 e 23:59
if (falta > 4) {
if ( Hor == 6 && (Min == 00 || Min == 00) && Sec == 01) {
//analogWrite(servo, 80);
for (int i = 50; i <= 80; i++) {
analogWrite(servo, i);
delay(100);
}
}
if ( Hor == 12 && (Min == 00 || Min == 00) && Sec == 01) {
//analogWrite(servo, 50);
for (int i = 80; i >= 40; i--) {
analogWrite(servo, i);
delay(100);
}
}
if ( Hor == 17 && (Min == 56 || Min == 00) && Sec == 01) {
//analogWrite(servo, 80);
for (int i = 50; i <= 80; i++) {
analogWrite(servo, i);
delay(100);
}
}
if ( Hor == 23 && (Min == 59 || Min == 00) && Sec == 01) {
//analogWrite(servo, 120);
for (int i = 80; i <= 120; i++) {
analogWrite(servo, i);
delay(100);
}
}
}
// Se faltar 4 dias ou menos para chocar a chocadeira para na posição 80
if (falta <= 4) {
analogWrite(servo, 80);
}
uint32_t start = micros();
int chk = DHT.read22(DHT22_PIN);
uint32_t stop = micros();
if (isnan(DHT.humidity) || isnan(DHT.temperature)) {
return;
}
// Imprime as informações de temperatura e umidade no display
lcd.setCursor(0, 0);
lcd.print("U:");
lcd.print(DHT.humidity);
lcd.print(" T:");
lcd.print(DHT.temperature);
// Imprime as informações de hora e tempo que falta para a eclosão
lcd.setCursor(0, 1);
lcd.print(Hor);
lcd.print(":");
lcd.print(Min);
lcd.print(" ");
lcd.print("F");
lcd.print(":");
lcd.print(falta);
lcd.print(" D:");
lcd.print(dia);
// Realiza o cálculo de pwm da luz de acordo com a temperatura
pwmluz = -(DHT.temperature - 37.9) * 255;
if (pwmluz > 255) {
analogWrite(mosfet, 255);
}
if (pwmluz <= 255) {
analogWrite(mosfet, pwmluz);
}
if (pwmluz <= 1) {
digitalWrite(mosfet, LOW);
delay(5000);
}
if (DHT.humidity <= 40) {
if (buzzer.getState() == BUZZER_IDLE) { // if stopped
buzzer.playMelody(melody, noteDurations, noteLength); // playing
}
}
//Serial.println(dia);
//Serial.print("OK,\t");
//Serial.println(Data);
}
uno:A5.2
uno:A4.2
uno:AREF
uno:GND.1
uno:13
uno:12
uno:11
uno:10
uno:9
uno:8
uno:7
uno:6
uno:5
uno:4
uno:3
uno:2
uno:1
uno:0
uno:IOREF
uno:RESET
uno:3.3V
uno:5V
uno:GND.2
uno:GND.3
uno:VIN
uno:A0
uno:A1
uno:A2
uno:A3
uno:A4
uno:A5
lcd1:GND
lcd1:VCC
lcd1:SDA
lcd1:SCL
dht1:VCC
dht1:SDA
dht1:NC
dht1:GND
servo1:GND
servo1:V+
servo1:PWM
rtc1:GND
rtc1:5V
rtc1:SDA
rtc1:SCL
rtc1:SQW
relay1:VCC
relay1:GND
relay1:IN
relay1:NC
relay1:COM
relay1:NO
bz1:1
bz1:2
r1:1
r1:2