Hello guys! I am trying to do a datalogger using Arduino Shield and a Shield SD Logger with DS1307. I noticed that with the example file RTCLib (DS1307) I can see the date and other messages working at Serial Monitor.
I am trying to write these information to my SD card but I noticed that the data on my SD card comes with errors, like 2185/865...
I believe that my shield and code are OK because at Serial Monitor I can see the year/month/day...but when I write at SD card I got this issue.
In attached I am putting the code .ino
ds1307_changed.ino (1.64 KB)
Olá Douglas_Rocha.
Que erros obténs mesmo?
Escreve coisas sem sentido no cartão?
Isto não funciona como o println do serial. Para escrever no SD, tens de fazer um string composta e escrever tudo duma vez.
Ou seja, quando tu mandas myFile = SD.open("log.txt", FILE_WRITE);
essa variável ainda tá vazia.
Tenho aqui um exemplo que eu fiz uma vez para tu adaptares.
#include <SD.h> // carrega a biblioteca para o cartão SD
#include <LiquidCrystal.h> // carrega a biblioteca para o LCD 16x2
//Definição de variáveis e constantes
LiquidCrystal lcd(10, 9, 8, 7, 6, 5); //Pinos do arduino para o LCD
const int chipSelect = 4; //Pino do arduino que activa o Chipselect do cartão SD
int temperatura; //Variável de saída em ºC
int id = 0; //Variável de incremento para atribuir um id a cada registo
void setup() {
lcd.begin(16, 2); //Inicialização do display
lcd.clear (); //Limpa o display
delay (250); //Espera para iniciar o boot
lcd.print("Termometro PT100");
lcd.setCursor(0, 1); //Determina posição do cursor na primeira linha
lcd.print("SDCARD LOG V6.0");
delay (1000);
lcd.clear();
lcd.print("Universidade da ");
lcd.setCursor(0, 1); //Determina posição do cursor na primeira linha
lcd.print("Madeira 2012");
delay (1000);
lcd.clear();
lcd.print("Prof Luis Gomes");
lcd.setCursor(0, 1); //Determina posição do cursor na primeira linha
lcd.print("Projecto TMI");
delay (1000);
lcd.clear();
lcd.print("David Inacio ");
lcd.setCursor(0, 1); //Determina posição do cursor na primeira linha
lcd.print("Gregorio Sousa");
delay (1000);
lcd.clear(); //
Serial.begin(9600);
Serial.print("Iniciando SD card...");
lcd.print("Iniciando SDCard");
delay (1000);
lcd.clear();
if (!SD.begin(chipSelect)) { //verifica se não existe cartão.
Serial.println("Cartao nao presente, erro."); //Se não existe cartão
lcd.clear();
lcd.print("SD not present");
delay (1000);
}
else
{
Serial.println("cartao inicializado."); //Se existe cartão
lcd.clear();
lcd.print("SDCard Status OK");
delay (1000);
lcd.clear();
}
}
void loop() {
int temperatura = analogRead(A0); //leitura analógia da porta A0
lcd.setCursor(0, 0);
lcd.print("Temperatura (C)");
lcd.setCursor(0, 1);
temperatura = map(temperatura,0,485,0,320); //converte os valores lidos na porta para a gama de temperatura
lcd.print(temperatura);
String datastring = String(id) + "," + String(temperatura) ; //compõe a string que é enviada para, porta série, Lcd e SDcard.
File dataFile = SD.open("datalog.txt", FILE_WRITE);
if (dataFile) {
dataFile.println(datastring);
dataFile.close();
Serial.println(datastring ); //
delay (5000);
}
else {
Serial.println("erro ao abrir datalog.txt");
}
id++;
}
no meu primeiro protótipo eu utilizei um shield DS3231 e um shield Micro SD. com o código em anexo eu consegui escrever as datas no cartão sem problemas.
porém quando fui tentar adaptar o código para o DS1307 (usando o shield datalogger que junto o cartão SD e o RTC em uma placa só) obtive as datas com valores estranhos..
jig_diadema.txt (5.93 KB)
será o que a pinagem desse shield precisa de um ajuste na lib?