Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // http://pastebin.com/C4HCpHSM#
- //************ Variaveis e constantes ************
- // unsigned long InterSeg = 30000; // (milliseconds) somando linhas de code = +- = 30 segundos
- // unsigned long IinterHora = 7600000; // (milliseconds) hora = +- 3.600 s Seg = 3.600.000 mSeg
- // unsigned long InterDias = 86400000; // (milliseconds) dia = +- 86.400 s Seg = 86.400.000 mSeg
- unsigned long InterSeg = 2000; // Teste
- unsigned long InterHora = 14400; // Teste
- unsigned long InterDias = 28800; // Teste
- unsigned long Segundos = 0; // will store last time LED was updated
- unsigned long Horas = 0; // will store last time LED was updated
- unsigned long Dias = 0; // will store last time LED was updated
- boolean flagmotor = 0;
- #include <LiquidCrystal.h> // Inclui a biblioteca do LCD
- #include "DHT.h" // Inclui a biblioteca do DHT11
- #define DHTPIN A1 // pino que estamos conectado
- #define DHTTYPE DHT22 // DHT 11
- DHT dht(DHTPIN, DHTTYPE);
- LiquidCrystal lcd(8, 9, 4, 5, 6, 7); // Pinos do LCD
- #define Up 2 // Pino do switch de Up
- #define Dn 3 // Pino do switch de Dn
- #define relemotor 10 // Motor vira ovos
- #define Boia 11 // Pino sensor da boia
- #define Bomba 12 // Pino acionamento da bomba
- #define Rele 13 // Resistencia de aquecimento
- float TempProg = 27; // Variavel com temperatura programada
- long debouncing_time = 15; // Debouncing Time in Milliseconds
- volatile unsigned long last_micros; // Variavel para deboucing
- float celsius; // Varialvel para guardar valor de temperatura
- byte humidade; // Varialvel para guardar valor de humidade
- //*********************** Setup *******************
- void setup()
- {
- Serial.begin(9600);
- lcd.begin(16, 2); // Inicia o LCD com dimensões 16x2(Colunas x Linhas)
- pinMode(relemotor, OUTPUT); // Port como saída
- pinMode(Rele, OUTPUT); // Port como saída
- pinMode(Bomba, OUTPUT); // Port como saída
- pinMode(Up, INPUT_PULLUP); // Port do switch Up como entrada e Pull-Up
- pinMode(Dn, INPUT_PULLUP); // Port do switch Dn como entrada e Pull-Up
- pinMode(Boia, INPUT_PULLUP); // Port da boia como entrada e Pull-Up
- dht.begin(); // inicializa o Sensor
- delay(1000); // Aguarda 1 seg antes de acessar as informações do sensor
- attachInterrupt(1, PressUp, RISING); // Interrupt de botão ao ficar HIGH o pino 3
- attachInterrupt(0, PressDn, RISING); // Interrupt de botão ao ficar HIGH o pino 2
- lcd.clear(); // Limpa do buffer do LCD
- lcd.setCursor(0, 0); // Seleciona posição 0 da linha 0
- lcd.print("Chocadeira"); // Imprime texto
- lcd.setCursor(11, 1); // Seleciona posição 0 da linha 0
- lcd.print(TempProg); // Imprime variavel
- digitalWrite(relemotor, HIGH); // Desliga relemotor
- digitalWrite(Rele, HIGH); // Desliga Rele
- digitalWrite(Bomba, HIGH); // Desliga Bomba
- }
- //*************** Rotina PressUp *****************
- void PressUp() // Rotina chamada pela interrupcao do botão de aumento
- {
- if((long)(micros() - last_micros) >= debouncing_time * 1000) // Tempo de debouncing
- {
- TempProg = TempProg + 0.1; // Incrementa temperatura em 0,01 oC
- lcd.setCursor(11, 1); // Seleciona posição 0 da linha 0
- lcd.print(TempProg); // Imprime variavel
- last_micros = micros(); // Tempo de debouncing
- }
- }
- //*************** Rotina PressDn *****************
- void PressDn() // Rotina chamada pela interrupcao do botão de reducao
- {
- if((long)(micros() - last_micros) >= debouncing_time * 1000) // Tempo de debouncing
- {
- TempProg = TempProg - 0.1; // Decrementa temperatura em 0,01 oC
- lcd.setCursor(11, 1); // Seleciona posição 0 da linha 0
- lcd.print(TempProg); // Imprime variavel
- last_micros = micros(); // Tempo de debouncing
- }
- }
- //*********************** Loop ********************
- void loop()
- {
- if (digitalRead(Boia == LOW)) // Se a boia tiver baixa
- digitalWrite(Bomba, HIGH); // Liga a bomba
- else // Se não
- digitalWrite(Bomba, LOW); // Desliga a bomba
- celsius = dht.readTemperature(); // Le temperatura no DHT11
- humidade = dht.readHumidity(); // Le humidade no DHT11
- lcd.setCursor(11, 0); // Seleciona posição 0 da linha 0
- lcd.print("H "); // Imprime texto
- lcd.print(humidade); // Imprime humidade
- if (celsius >= TempProg) // Faça se a temperatura for menor que a programada
- digitalWrite(Rele, LOW); // Desliga Rele como entrada e Pull-Up
- else // Ou se não for
- digitalWrite(Rele, HIGH); // Liga Rele como entrada e Pull-Up
- lcd.setCursor(0, 1); // Seleciona posição 0 da linha 0
- lcd.print(celsius); // Imprime a gemperatura
- lcd.setCursor(6, 1); // Seleciona posição 6 da linha 0
- if (digitalRead(Rele) == 1) // Faça se o rele tiver operado
- lcd.print("Lig "); // Imprime texto
- else // Ou se não tiver
- lcd.print("Desl"); // Imprime texto
- delay(200);
- if ((millis() - Horas) >= InterHora) // Se for maior que interHora
- { // faça
- // Serial.println((millis() - Horas)); // Teste
- Horas = millis(); // Recarrega o valor de millis() em horas
- Segundos = millis(); // Recarrega o valor de millis() em segundos
- while ((millis() - Segundos) <= InterSeg) // Faça enquanto minutos menos que
- {
- digitalWrite(relemotor, LOW); // Liga relemotor
- }
- digitalWrite(relemotor, HIGH); // Desliga relemotor
- }
- if ((millis() - Dias) >= InterDias) // Se for maior que interDias
- { // faça
- Dias = millis(); // Recarrega o valor de millis() em Dias
- lcd.setCursor(0, 0); // Seleciona posição 0 da linha 0
- lcd.print(" Dias "); // Imprime texto
- lcd.print(Dias/InterDias); // Imprime numero de dias (Dias/interDias)
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement