Buongiorno, rifacendomi a questa discussione e a questa funzione:
void logname(char const *date, char *buff) {
int month, day, year;
static const char month_names[] = "JanFebMarAprMayJunJulAugSepOctNovDec";
sscanf(date, "%s %d %d", buff, &day, &year);
month = (strstr(month_names, buff) - month_names) / 3 + 1;
sprintf(buff, "%d%02d%02d", year, month, day);
}
Vorrei capire come mai mi da un nome diverso se messa in questo codice:
#include <SD.h>
#include <SPI.h>
#include <DHT.h>
#include <Wire.h>
#include <TimeLib.h>
//#include <DS1307RTC.h>
#include <Ethernet.h>
byte mac[] = {0xAA, 0xBB, 0xCC, 0x00, 0x00, 0x09};
byte ip[] = {10, 0, 0, 30};
byte subnet[] = {255, 0, 0, 0};
byte gateway[] = {10, 0, 0, 254};
EthernetServer server(80);
File myFile1, myFile2;
DHT dht;
char nomefile[16];
int TIMING, TEMP_MAX_ALARM, TEMP_MIN_ALARM;
void logname(char const *date, char *buff) {
int month, day, year;
static const char month_names[] = "JanFebMarAprMayJunJulAugSepOctNovDec";
sscanf(date, "%s %d %d", buff, &day, &year);
month = (strstr(month_names, buff) - month_names) / 3 + 1;
sprintf(buff, "%d%02d%02d.csv", year, month, day);
}
void setup() {
Serial.begin(9600);
while (!Serial)
{
;
}
if (!SD.begin(4))
{
return;
}
myFile2 = SD.open("OPZIONI.txt");
if (myFile2)
{
while (myFile2.available())
{
TIMING = myFile2.parseInt();
Serial.println(TIMING);
TEMP_MIN_ALARM = myFile2.parseInt();
Serial.println(TEMP_MIN_ALARM);
TEMP_MAX_ALARM = myFile2.parseInt();
Serial.println(TEMP_MAX_ALARM);
}
} else {
Serial.println("Errore in OPZIONI.txt");
}
myFile2.close();
delay(200);
logname(__DATE__,nomefile);
Serial.println(nomefile);
Serial.println("Stato\tUmidita (%)\tTemperatura (F)\t(C)");
dht.setup(2);
Ethernet.begin(mac, ip, gateway, subnet);
server.begin();
Serial.print("server is at ");
Serial.println(Ethernet.localIP());
}
void loop() {
float umidita = dht.getHumidity();
float temperatura = dht.getTemperature();
Serial.print(dht.getStatusString());
Serial.print("\t\t");
Serial.print(umidita);
Serial.print("%");
Serial.print(" \t\t");
Serial.print(dht.toFahrenheit(temperatura));
Serial.print(" \t");
Serial.print(temperatura);
if (temperatura < TEMP_MIN_ALARM)
{
Serial.print("\tTEMP<MIN");
}
if (temperatura > TEMP_MAX_ALARM)
{
Serial.print("\tTEMP>MAX");
}
Serial.println();
delay(900);
myFile1 = SD.open(nomefile, FILE_WRITE);
if (myFile1)
{
Serial.println("Scrivendo/Delay");
myFile1.print(__TIME__);
myFile1.print(";");
myFile1.print(dht.getStatusString());
myFile1.print(";");
myFile1.print(umidita);
myFile1.print(";");
myFile1.print(temperatura);
myFile1.print(";");
myFile1.print(dht.toFahrenheit(temperatura));
if (temperatura > TEMP_MAX_ALARM)
{
myFile1.print(";");
myFile1.print(">MAX");
}
if (temperatura < TEMP_MIN_ALARM)
{
myFile1.print(";");
myFile1.print("<MIN");
}
myFile1.println();
} else {
Serial.println("Non sono riuscito a scrivere i dati.");
}
myFile1.close();
delay(400);
EthernetClient client = server.available();
if (client) {
Serial.println("new client");
boolean lineaVuota = true;
while (client.connected()) {
if (client.available()) {
char c = client.read();
Serial.write(c);
if (c == '\n' && lineaVuota) {
client.println("HTTP/1.1 200 OK");
client.println("Content-type: text/html");
client.println("Connection: close");
client.println("Refresh: 10");
client.println();
client.println("<!DOCTYPE HTML>");
client.println("<html>");
client.println("<head>");
client.println("<title>");
client.println("Log temp. e umid.");
client.println("</title>");
client.println("</head>");
client.println("<body>");
client.println(dht.getStatusString());
client.println(" ");
client.println(umidita);
client.println("%");
client.println(" ");
client.println(temperatura);
client.println("</body>");
client.println("</html>");
break;
}
if (c == '\n') {
lineaVuota = true;
} else {
if (c != '\r') {
lineaVuota = false;
}
}
}
}
delay(1);
client.stop();
}
delay(TIMING);
}
È un progetto che sto facendo (sul quale avevo fatto anche altri post), e deve leggere un file 'OPZIONI.txt' dalla micro SD presente in questo ethernet shield, montato su un arduino UNO; successivamente andrà a creare un file con questa sintassi aaaammgg.csv, nel quale scriverà i valori ottenuti da questo sensore.
Grazie dell'attenzione.
P.S mi serve dare un nome di 8 + 3 caratteri al file creato, 8 per il nome (puo anche essere piu corto) + 3 per l'estensione del file, a causa delle restrizioni imposte dalla libreria SD.h.
EDIT: sbaglio o l'orario del post è sbagliato?