ola boa tarde sou leigo no assunto ainda mais dr Rui escreveu este programa pra mim e eu gostaria de acrecentar este menu no display
tecla4 menu a cada toque nesta tecla menu1 temperatura tecla 2 e 3 aumenta e diminui o valor da temperatura pra sair desta tela mais um toque na tecla4
menu tela principal mostra a temperatura do sensor e a umidade
menu1 ajusta a temperatura / saida a rele liga resistencia
menu2 ajusta umidade / sida rele liga secador
menu3 ajusta tempo de virar saida rele liga motor
menu4 ajusta horas minutos
menu5 ajusta dias ligado
estou anexando o programa para ajuda tentei fazer mais sou leigo em arduino to comessando agora
*/
#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 DHT11 // DHT 11
DHT dht(DHTPIN, DHTTYPE);
LiquidCrystal lcd( 7, 8, 9, 10, 11, 12); // Pinos do LCD
const int Rele = 13; // Pino de Saída
const int Up = 2; // Pino do switch de Up
const int Dn = 3; // Pino do switch de Dn
const int DMenu = 4; // Pino do switch de Dn
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
int contador = 0; // essa variavel vai controlar o loop do menu andando por ele opcões 0->1->2->3->0
int quantMenu = 3; // define quantas opcoes vao ter no menu
void setup()
{
lcd.begin(16, 2); // Inicia o LCD com dimensões 16x2(Colunas x Linhas)
pinMode(Rele, OUTPUT); // Port como saída
digitalWrite(Rele, LOW); // Desliga Rele
pinMode(DMenu, INPUT);
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
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
}
//*************** Rotina PressUp *****************
void botaoMenu() // Rotina chamada pela interrupcao do botão de aumento
{
if((long)(micros() - contador) >= debouncing_time * 1000) // Tempo de debouncing
{
contador = contador + 1; // Incrementa temperatura em 0,01 oC
last_micros = micros(); // Tempo de debouncing
}
}
//*************** 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()
{
celsius = dht.readTemperature(); // Le temperatura no DHT11
humidade = dht.readHumidity(); // Le humidade no DHT11
switch(contador){
case 0:
inicio();
break;
case 1:
opcao1();
break;
case 2:
opcao2();
break;
case 3:
opcao3();
break;
}
// Fim di Switch
delay(250);
}
// Fim do LOOP
// Inicio das opcoes do Menu
void inicio()
{
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);
}
// Funcao da opcao 1
void opcao1(){
lcd.clear();
lcd.setCursor(0,0);
lcd.print("jose");
lcd.setCursor(0,1);
lcd.print("menu1 ");
}
// Funcao da opcao 2
void opcao2(){
lcd.clear();
lcd.setCursor(0,0);
lcd.print("jose");
lcd.setCursor(0,1);
lcd.print("menu2 ");
}
// Funcao da opcao 3
void opcao3(){
lcd.clear();
lcd.setCursor(0,0);
lcd.print("jose");
lcd.setCursor(0,1);
lcd.print("menu3 ");
}
Tags:
Oi JE, boa tarde.
Conforme eu havia prometido, segue um código experimental para controle de sua chocadeira utilizando menus.
Não incorporei nele as rotinas de tempo (hh/mm/ss, dias), pois acho que você deverá usar um RTC
(real timer clock), pra manter estes dados mais confiáveis.
Mas isto é fácil de ser feito dentro do atual código.
Foi demorado, pois não encontrei disponível boas soluções de rotina de menu já escritas para o Arduino.
As que encontrei, estavam sem qualquer documentação ou muito grandes para serem estudadas,
Então resolvi escrever uma da minha própria cabeça, e à adaptei à sua necessidade.
Qualquer duvida fique à vontade.
Rui
rui me ajudou muito.obrigado.
sou meio leigo então me desculpa em algumas perguntas:
Essa programação é PID?
e a constante inteiro giro é pra acionar o motor de girar a bandeja? se for como eu programo pra ela acionar de 2 em 2 horas e parar de acionar ao 18 dias
Oi OA, boa noite,
Não , não é PID.
eu indiquei este projeto pra você se basear nele ao fazer o seu.
O tempo de acionamento pode ser programado, mas pra isto recomendo o uso de um RTC.
Rui
como faco para adicionar uma rotina para girar os ovos?
Boa tarde José, estou fazendo uma chocadeira e estou com muita dificuldade em desenvolver o sistema, gostaria de saber se é possível me passar os códigos? Desde já agradeço. Abraço.
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
© 2024 Criado por Marcelo Rodrigues. Ativado por