Salve a tutti! Vi espongo brevemente il problema: vorrei avere un codice in grado di salvare in sd la temperatura massima che si visualizza su display e fare in modo che se stacchi la corrente non perdi il dato acquisito. Insomma se la massima quando faccio girare il programma arriva a 22 gradi se stacco la corrente e poi rimetto non deve segnare un altro valore ma 22
L'SD è quella dell'ethernet shield, qui il codice:
#include <DS3232RTC.h>
#include <SD.h>
#include <EEPROM.h>
#include <Time.h>
#include <Wire.h>
#include <BMP180.h>
#include <SPI.h>
#include <Adafruit_GFX.h>
#define sclk 13
#define mosi 11
#define cs A3
#define dc A1
#define rst A2
#include <Adafruit_GFX.h> // Core graphics library
#include <Adafruit_ST7735.h> // Hardware-specific library
#include <SPI.h>
Adafruit_ST7735 tft = Adafruit_ST7735(cs, dc, rst);
#include "DHT.h"
#include <OneWire.h>
#include <DallasTemperature.h>
// Data wire is plugged into pin 2 on the Arduino
#define ONE_WIRE_BUS 8
// Setup a oneWire instance to communicate with any OneWire devices
// (not just Maxim/Dallas temperature ICs)
OneWire oneWire(ONE_WIRE_BUS);
// Pass our oneWire reference to Dallas Temperature.
DallasTemperature sensors(&oneWire);
DHT dht(5,DHT22); //Definisco il pin al quale è collegato il sensore e il tipo
const int chipSelect = 4;
float maxeeprom=-100;
File myFile;
File tempmax;
void setup() {
Serial.begin(9600);
tft.initR(INITR_BLACKTAB);
uint16_t time = millis();
tft.fillScreen(ST7735_BLUE);
time = millis() - time;
tft.setCursor (0,20);
tft.setTextSize(2);
tft.setTextColor (ST7735_GREEN);
tft.print (" STAZIONE");
tft.setCursor (10,40);
tft.print (" METEO:");
delay (2000);
tft.setTextColor (ST7735_YELLOW);
tft.setCursor (4,80);
tft.print ("SITUAZIONE ATTUALE");
SD.begin(chipSelect);
File logFile = SD.open ("Temperatura.csv",FILE_WRITE);
if (logFile)
{
String header = "Data, Ora, Temperatura, Temperatura Max";
logFile.println(header);
logFile.close();
Serial.println(header);
}
tempmax = SD.open("max.txt", FILE_WRITE);
if (tempmax) {
tempmax.print(maxeeprom);
tempmax.close();
}
tempmax=SD.open("max.txt");
if (tempmax) {
while (tempmax.available()) {
Serial.write(tempmax.read());
}
tempmax.close();
}
setSyncProvider(RTC.get);
sensors.begin();
Wire.begin();
}
void loop() {
sensors.requestTemperatures();
sensors.getTempCByIndex(0);
if (sensors.getTempCByIndex(0)>maxeeprom)
{
maxeeprom=sensors.getTempCByIndex(0);
tempmax = SD.open("max.txt", FILE_WRITE);
if (tempmax) {
tempmax.print(maxeeprom);
tempmax.close();
}
String dataString = String(year()) + "/" + String(month())+ "/" + String(day()) + " " + String(hour()) + ":" + String(minute())+ ":" + String(second()) + " " + String(sensors.getTempCByIndex(0));
File dataFile = SD.open("datalog.txt", FILE_WRITE);
if (dataFile) {
dataFile.println(dataString);
dataFile.close();
Serial.println(dataString);
tft.fillScreen(ST7735_BLACK);
tft.setTextColor (ST7735_GREEN);
tft.setCursor(0, 0);
tft.setTextSize(1);
tft.println(maxeeprom);
}
}
}