buenas tardes , me pico la curiosidad y empece a leer y intentar hacer andar un data log con lcd y tarjeta sd para grabar los datos , hay va mi duda!!!
Al colocar el delay de grabación de datos, en la sd también me atrasa el visionado, y lo que keria era ver la hora actual y la del ultimo registro en el lcd he probado varias combinaciones pero siempre me hace lo mismo
soy muy novato en esto y si hay alguna metedura de pata ruego me perdonéis .
posteo lo que tengo a ver si me podéis aclarecer las dudas
Gracias
#include <OneWire.h>
#include <SPI.h>
#include <SD.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include "RTClib.h"
const int chipSelect = 10;
RTC_DS1307 RTC;
float celsius;
OneWire ds(8);
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);
File dataFile;
DateTime now;
void setup() {
lcd.begin(20, 4);
Serial.begin(9600);
Wire.begin();
RTC.begin();
//check or the Real Time Clock is on
if (! RTC.isrunning()) {
Serial.println("RTC is NOT running!");
RTC.adjust(DateTime(__DATE__, __TIME__));
}
Serial.print("INICIANDO SD ..");
if (!SD.begin(chipSelect)) {
Serial.println("SD FALLA, NO PRESENTE ??");
return;
}
Serial.println("SD INICIADA.");
now = RTC.now();
dataFile = SD.open("datalog.txt", FILE_WRITE);
dataFile.print("Start logging on: ");
dataFile.print(now.year(),DEC);
dataFile.print('/');
dataFile.print(now.month(),DEC);
dataFile.print('/');
dataFile.print(now.day(),DEC);
dataFile.println(" ");
dataFile.println("Celsius Time");
dataFile.close();
}
void loop(void) {
pickUpTemperature();
now = RTC.now();
dataFile = SD.open("datalog.txt", FILE_WRITE);
if (dataFile) {
dataFile.print(celsius);
dataFile.print(" ");
dataFile.print(now.hour(),DEC);
dataFile.print(":");
dataFile.print(now.minute(),DEC);
dataFile.print(":");
dataFile.println(now.second(),DEC);
dataFile.close();
Serial.println("data stored");
}
else {
Serial.println("error opening datalog.txt");
}
delay(1000); // tiempo para grabar registro
}
void pickUpTemperature(){
byte i;
byte present = 0;
byte type_s;
byte data[12];
byte addr[8];
if ( !ds.search(addr)) {
ds.reset_search();
delay(250);
return;
}
;
for( i = 0; i < 8; i++) {
}
if (OneWire::crc8(addr, 7) != addr[7]) {
Serial.println("CRC is not valid!");
return;
}
Serial.println();
switch (addr[0]) {
case 0x10:
type_s = 1;
break;
case 0x28:
type_s = 0;
break;
case 0x22:
type_s = 0;
break;
default:
return;
}
ds.reset();
ds.select(addr);
ds.write(0x44, 1);
delay(1000);
present = ds.reset();
ds.select(addr);
ds.write(0xBE);
for ( i = 0; i < 9; i++) {
data[i] = ds.read();
}
int16_t raw = (data[1] << 8) | data[0];
if (type_s) {
raw = raw << 3;
if (data[7] == 0x10) {
raw = (raw & 0xFFF0) + 12 - data[6];
}
} else {
byte cfg = (data[4] & 0x60);
if (cfg == 0x00) raw = raw & ~7;
else if (cfg == 0x20) raw = raw & ~3;
else if (cfg == 0x40) raw = raw & ~1;
}
celsius = (float)raw / 16.0;
Serial.print(" Temperatura = ");
Serial.print(celsius);
Serial.print(" Grados, ");
lcd.setCursor(2,0);
lcd.print(" DATALOG LCD ");
lcd.setCursor(0,1);
lcd.print(" TEMPERATURA: ");
lcd.setCursor(13,1);
lcd.print(celsius);
lcd.setCursor(18,1);
lcd.print((char)223);
lcd.setCursor(1,2);
lcd.print(" ULTIMO REGISTRO ");
lcd.setCursor(0,3);
lcd.print(now.day(), DEC); // Dia
lcd.print('/');
lcd.print(now.month(), DEC); // Mes
lcd.print('/');
lcd.print(now.year(), DEC); // Año
lcd.print(' ');
lcd.print(now.hour(), DEC); // Horas
lcd.print(':');
lcd.print(now.minute(), DEC); // Minutos
lcd.print(':');
lcd.print(now.second(), DEC); // Segundos
delay(1000); // La información se actualiza cada 1 seg.
}