Preciso de ajuda no codigo. fiz um projeto de uma rologio com RTC + LCD 16X2 + DHT11 e gostaria de uma ajuda no codigo para colocar 3 botoes, sendo 1 para fazer a troca do seletor para aumentar ou diminuir os valores de data e hora e outros dois botoes um pra aumentar e outro pra diminuir os valores.

Exibições: 1318

Responder esta

Respostas a este tópico

Gabriel,boa noite.

voce já tem algum código escrito?

E quer modifica-lo?

Rui

Tenho este que baixei da internet, so que eu fiz ele dai acerto a hora passa uns 3 a 4 minutos e ele volta para hora que eu coloquei! Eu sou novo na programaçao nao entendo muito comprei ate um livro pra ver se me ajuda tambem. desde já obrigado

#include <LiquidCrystal.h>
#include <DS1307RTC.h>
#include <Wire.h>
#include <Time.h>

// Pinos de comando dos botões do relógio
#define clockSet 7
#define clockUp 9
#define clockDown 8

//Estados de Clock
#define stClockRunning 0
#define stSetDay 1
#define stSetMonth 2
#define stSetYear 3
#define stSetHour 4
#define stSetMinute 5
#define stSetSecond 6

int stat = stClockRunning;

LiquidCrystal lcd(12, 11, 5, 4, 3, 2); //configuração dos pinos do lcd

void Print(int number)
{
lcd.print(number/10);
lcd.print(number%10);
}

// Preenchimento do display LCD
void printTime()
{
lcd.setCursor(1,1);
Print(hour());
lcd.print(":");
Print(minute());
lcd.print(":");
Print(second());

lcd.setCursor(1,0);
Print(day());
lcd.print("/");
Print(month());
lcd.print("/");
Print(year());

lcd.setCursor(0,0);
lcd.noCursor(); // Cursor invisível
lcd.noBlink(); // Efeito blink desligado

if (stat != stClockRunning)
lcd.print("");
else
lcd.print(" ");
simbolorelogio();
lcd.setCursor(0,1);
lcd.write(3);

switch(stat)
{
case stSetDay:
lcd.setCursor(0,0);
lcd.print("d ");
lcd.setCursor(1,0);
lcd.cursor(); // Cursor visível
lcd.blink(); // Cursor piscando
break;

case stSetMonth:
lcd.setCursor(0,0);
lcd.print("m ");
lcd.setCursor(4,0);
lcd.cursor(); // Cursor visível
lcd.blink(); // Cursor piscando
break;
case stSetYear:
lcd.setCursor(0,0);
lcd.print("a ");
lcd.setCursor(7,0);
lcd.cursor(); // Cursor visível
lcd.blink(); // Cursor piscando
break;
case stSetHour:
lcd.setCursor(0,0);
lcd.print("h ");
lcd.setCursor(1,1);
lcd.cursor(); // Cursor visível
lcd.blink(); // Cursor piscando
break;
case stSetMinute:
lcd.setCursor(0,0);
lcd.print("M ");
lcd.setCursor(4,1);
lcd.cursor(); // Cursor visível
lcd.blink(); // Cursor piscando
break;
case stSetSecond:
lcd.setCursor(0,0);
lcd.print("s ");
lcd.setCursor(7,1);
lcd.cursor(); // Cursor visível
lcd.blink(); // Cursor piscando
break;

}
}

// Lê pino usando limiar, como um interruptor, isto é,
// interruptor pressionado primeira vez liga, pela segunda vez desliga
int readPinSwitch(int pin, int threshold)
{
if (digitalRead(pin))
{
unsigned long tt = millis();
while (digitalRead(pin));
if ((millis() - tt) > threshold)
return 1;
else
return 0;
}
else
return 0;
}

//Lê pino usando limiar
int readPin(int pin, int threshold)
{
if (digitalRead(pin))
{
unsigned long tt = millis();
while ((digitalRead(pin) && (millis() - tt) <= threshold));
if (digitalRead(pin))
return 1;
else
return 0;
}
else
return 0;
}

// obter novo status, se houver
int getStat()
{
if (readPinSwitch(clockSet,300))
if (stat == stSetSecond)
return stClockRunning;
else
return stat+1;
else
return stat;
}

// definir Arduino e tempo do RTC
void setRTCTime(int hour, int minute, int second, int day, int month, int year)
{
// define tempo do Arduino
setTime(hour,minute,second,day,month,year);
time_t t = now();
// define tempo do RTC
RTC.set(t);
}

void simbolorelogio()
{
byte relogio[8] = {
B00000,
B01110,
B10101,
B10111,
B10001,
B01110,
B00000,
B00000};
lcd.createChar(3, relogio); // Cria o caractere personalizado de um relogio
}

void setup()
{
pinMode(clockUp,INPUT); // configura os pinos dos botões como entrada
pinMode(clockDown,INPUT);
pinMode(clockSet,INPUT);

lcd.begin(16, 2); // Seta o display para 16 colunas and 2 linhas
setSyncProvider(RTC.get); // função para obter o tempo do RTC
if(timeStatus()!= timeSet) // verifica status do RTC e retorna erro
{
lcd.setCursor(0,0);
lcd.print("Erro do RTC:");
lcd.setCursor(0,1);
lcd.print("Ajuste o Relogio");
delay(3000);
lcd.clear();
}
}

int oldStat = stat;
unsigned long t=millis();

void loop()
{
int value = 0;
printTime(); // rotina que imprime o tempo no lcd
delay(100);
stat=getStat();
if (stat != oldStat)
{
t=millis();
oldStat = stat;
}
else
if ((stat != stClockRunning) && ((millis() - t) > 30000)) //tempo em milisegundos que o ajuste do relógio ficará disponível para ser alterado
stat=stClockRunning;
switch(stat)
{
case stClockRunning:
break;
case stSetDay:
// inicializa value
value=day();
//si botao UP (para cima) for pressionado
while(readPin(clockUp,200))
{
value++;
if (value > 31)
value=1;
setRTCTime(hour(),minute(),second(),value,month(),year());
printTime();
}
//si botao DOWN (para baixo) for pressionado
while(readPin(clockDown,200))
{
value--;
if (value < 1)
value=31;
setRTCTime(hour(),minute(),second(),value,month(),year());
printTime();
}
break;
// ver comentários em stSetDay
case stSetMonth:
value=month();
while(readPin(clockUp,200))
{
value++;
if (value > 12)
value=1;
setRTCTime(hour(),minute(),second(),day(),value,year());
printTime();
}
while(readPin(clockDown,200))
{
value--;
if (value < 1)
value=12;
setRTCTime(hour(),minute(),second(),day(),value,year());
printTime();
}
break;
case stSetYear:
value=year();
while(readPin(clockUp,200))
{
value++;
if (value > 2050)
value=2000;
setRTCTime(hour(),minute(),second(),day(),month(),value);
printTime();
}
while(readPin(clockDown,200))
{
value--;
if (value < 2000)
value=2050;
setRTCTime(hour(),minute(),second(),day(),month(),value);
printTime();
}
break;
case stSetHour:
value=hour();
while(readPin(clockUp,200))
{
value++;
if (value > 23)
value=0;
setRTCTime(value,minute(),second(),day(),month(),year());
printTime();
}
while(readPin(clockDown,200))
{
value--;
if (value < 1)
value=24;
setRTCTime(value,minute(),second(),day(),month(),year());
printTime();
}
break;
case stSetMinute:
value=minute();
while(readPin(clockUp,200))
{
value++;
if (value > 59)
value=0;
setRTCTime(hour(),value,second(),day(),month(),year());
printTime();
}
while(readPin(clockDown,200))
{
value--;
if (value < 0)
value=59;
setRTCTime(hour(),value,second(),day(),month(),year());
printTime();
}
break;
case stSetSecond:
value=minute();
while(readPin(clockUp,200))
{
value++;
if (value > 59)
value=0;
setRTCTime(hour(),minute(),value,day(),month(),year());
printTime();
}
while(readPin(clockDown,200))
{
value--;
if (value < 0)
value=59;
setRTCTime(hour(),minute(),value,day(),month(),year());
printTime();
}
}
}

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço