boa noite galera esse post e de extrema urgencia, como implemento a função millis() nesse codigo, para que atualize o display sem travar o loop?

// Date and time functions using RX8025 RTC connected via I2C and Wire lib

#include <Wire.h>
#include "Sodaq_DS3231.h"
#include <LiquidCrystal.h>

LiquidCrystal lcd(12, 11, 5, 4, 3, 2); // Declaração do objeto tipo lcd
char weekDay[][4] = {"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" };

int minutoNow;
int horaNow;
int segundosNow;


void setup ()
{
Serial.begin(57600);
Wire.begin();
rtc.begin();
lcd.begin(16, 2); // Iniciando a biblioteca do LCD
}

uint32_t old_ts;

void loop ()
{
DateTime now = rtc.now(); //get the current date-time
uint32_t ts = now.getEpoch();

minutoNow = now.minute();
horaNow = now.hour();
segundosNow = now.second();

if (old_ts == 0 || old_ts != ts) {
old_ts = ts;
Serial.print(now.year(), DEC);
Serial.print('/');
Serial.print(now.month(), DEC);
Serial.print('/');
Serial.print(now.date(), DEC);
Serial.print(' ');
Serial.print(now.hour(), DEC);
Serial.print(':');
Serial.print(now.minute(), DEC);
Serial.print(':');
Serial.print(now.second(), DEC);
Serial.print(' ');
Serial.print(weekDay[now.dayOfWeek()]);
Serial.println();
Serial.print("Seconds since Unix Epoch: ");
Serial.print(ts, DEC);
Serial.println();

lcd.setCursor(4,0);
lcd.print(now.hour(),DEC);
lcd.print(":");
lcd.print(now.minute(),DEC);
lcd.print(":");
lcd.print(now.second(),DEC);
lcd.setCursor(3,1);
delay(1000);
}

lcd.clear();
}

Exibições: 732

As respostas para este tópico estão encerradas.

Respostas a este tópico

Oi FHS, boa noite.

Explique melhor o que você deseja.

Se explicar bem talvez alguém possa ajudar.

Lembre-se, aqui todos que ajudam são voluntários.

Agora, com extrema urgência, aí já complica.

Rui

desculpe amigo, esse programa esta dentro de um loop, mas a função delay deixa o mesmo lento e não consigo fazer a leitura dos botões a todo momento, então me disseram a função millis(), faz o mesmo mas sem travar, preciso substituir o delay por millis(), de foma que ele continue atualizando as variaveis, mas sem travar o loop,para que eu possa usar em menus e comparações posteriores, o projeto é um alimentador automático, projeto tcc

uma copia do codigo do tcc

Anexos

tem um topico meu escrito com o titulo de projeto de maquina de teste bla bla bla, da uma lida no link e no meu codigo, tenta entender, faz um esboco e manda pro pessoal ver aqui, nessa eu aprendo tbm, se eu conseguir ajudar vc inclusive reforco meu conhecimento mas inicia algo ne.

vá no exemplo blinlWithoutDelay da IDE e copia 

fora do setup e do loop

unsigned long previousMillis = 0; 

const long interval = 1000;

no loop fica assim

unsigned long currentMillis = millis();

if (currentMillis - previousMillis >= interval) {
// save the last time you blinked the LED
previousMillis = currentMillis;

Serial.print(now.year(), DEC);
Serial.print('/');
Serial.print(now.month(), DEC);
Serial.print('/');
Serial.print(now.date(), DEC);
Serial.print(' ');
Serial.print(now.hour(), DEC);
Serial.print(':');
Serial.print(now.minute(), DEC);
Serial.print(':');
Serial.print(now.second(), DEC);
Serial.print(' ');
Serial.print(weekDay[now.dayOfWeek()]);
Serial.println();
Serial.print("Seconds since Unix Epoch: "); 
Serial.print(ts, DEC);
Serial.println();

lcd.setCursor(4,0);
lcd.print(now.hour(),DEC);
lcd.print(":");
lcd.print(now.minute(),DEC);
lcd.print(":");
lcd.print(now.second(),DEC);
lcd.setCursor(3,1);

}

ai você consegue usar sem delay

muito obrigado amigo funcionou perfeitamente. obg

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço