PRECISO DE AJUDA COM UM SISTEMA DE COLETA DE TEMPERATURA EM FUNÇÃO DA DATA E HORA

Boa noite, beleza?

Estou quebrando a cabeça a um tempo, e me esgotaram os recursos junto com o tempo.... hahahah. Preciso começar a aquisição de dados pra ontem e não encontro o erro no código.

Primeiramente...

- Preciso sincronizar a data e a hora no meu RTC com o PC para ter a data e hora na aquisição de temperatura;

- Depois, preciso salvar esses dados num cartão SD (ta dando erro...).

Parece simples o código, mas estou penando... Quando a sincronização de data e hora, apenas consegui a sincronização pela hora (HR:MIN:SEG), mas não consegui a data (DD/MM/AA); usei exemplo da biblioteca DS1307RTC, "SetTime". 

Outro problema, foi o SD. Depois de dias tentando, encontrei um código que testasse o shield Datalogger SD RTC 1307, e ele está funcionando. Agora, ta dando erro no meu código e não to conseguindo continuar.

Quanto ao sensor de temperatura, está ok. É o sensor DS18B20 á prova d'água; desejo usar a biblioteca OneWire após esse teste com mais 3 sensores de temperatura, mas acredito que seja tranquilo de incluir.

Meu código:

#include <SD.h> //sd
#include <TimeLib.h>
#include <Wire.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#include "Arduino.h"
#include <DS1307RTC.h>
float tempC; // temperatura geral
float temp1; //temperatura 1
float tm;
File txt;

#define ONE_WIRE_BUS 10
#define TEMPERATURE_PRECISION 12

// Prepara uma instância de OneWire para se comunicar com qualquer dispositivo OneWire
OneWire oneWire(ONE_WIRE_BUS);
// Passa uma referência à instância OneWire para Dallas Temperature.
DallasTemperature sensors (&oneWire);
DeviceAddress insideThermometer = { 0x28, 0xFF, 0x8E, 0xD7, 0x71, 0x16, 0x05, 0x9B }; // com o abrigo
//DeviceAddress insideThermometer = { 0x28, 0xCC, 0x28, 0x77, 0x91, 0x04, 0x02, 0x10 }; // sensor 1
//DeviceAddress insideThermometer = { 0x28, 0xF5, 0x00, 0x77, 0x91, 0x12, 0x02, 0xEB }; // sensor 2

void setup() {
Serial.begin(9600);
tmElements_t tm;
RTC.read(tm);
//inicio relógio
if(year() == 1970 ){
Serial.println("erro hora");
}
//inicio SD
SD.begin(4); //pino cs
while(!SD.open("calibracao.txt", FILE_WRITE)){
Serial.println("erro cartao sd");
}
//inicio sensores

sensors.setResolution(insideThermometer, TEMPERATURE_PRECISION);
//sensors.setResolution(outsideThermometer, TEMPERATURE_PRECISION); colocar outros sensores depois
//sensors.setResolution(wallThermometer, TEMPERATURE_PRECISION);

}

void loop() {
delay(1000);
getTemperature(insideThermometer);
temp1=tempC;
gravar();

}

void gravar(){
tmElements_t tm;
RTC.read(tm);
SD.begin(10);
txt = SD.open("dados.csv", FILE_WRITE);
txt.print(temp1);
txt.print(";");
txt.print(tm.Hour);
txt.print(":");
txt.print(tm.Minute);
txt.print(" ");
txt.print(tm.Day);
txt.print("/");
txt.print(tm.Month);
txt.print("/");
txt.print(tm.Year);
txt.println();
txt.println();
txt.println("dados: ");
txt.println();

//parte pra mostrar no terminal

Serial.print(temp1);
Serial.print(";");
Serial.print(tm.Hour);
Serial.print(":");
Serial.print(tm.Minute);
Serial.print(" ");
Serial.print(tm.Day);
Serial.print("/");
Serial.print(tm.Month);
Serial.print("/");
Serial.print(tm.Year);
Serial.println();
Serial.println();
Serial.println("dados: ");
Serial.println();

}

void getTemperature(DeviceAddress deviceAddress)
{
sensors.requestTemperatures();
tempC = sensors.getTempC(deviceAddress);
}

Exibições: 218

Responder esta

Respostas a este tópico

Encontrei um código pata sincronizar a hora e a data com meu shield Datalogger SD com RTC DS1307, mas agora o ano está errado (1948) e meu sensor DS18B20 não está sendo reconhecido.

Bom dia ROS,

Recomendações:
1. Remova seu sketch da área de texto do seu tópico;
2. Leia http://labdegaragem.com/forum/topics/sugest-o-de-como-postar
3. Comente as linhas do seu sketch. Fica mais fácil entender o que vc quer fazer com cada
     linha e facilita a ajuda.
4. Clique em : " Deseja carregar arquivos? " e depois em " Escolher arquivo" e anexe o arquivo
       com o seu sketch.

RV

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço