Ciao tutti,
sono un autodidatta e vorrei chiedere il vostro aiuto con lo scopo di salvare i valori di una sonda digitale (DHT11) in un file su SDCard.
In rete ho trovato come costruire il supporto per breadboard e i collegamenti ma adesso non so come si scrive il codice, potete aiutarmi?
@antoniocnn: ... qui vuoi parlare di come salvare su SD, mentre nell'altro thread parlavi di come salvare su PC ...
Diciamo che avresti potuto fare tutto in un unico thread senza aprirne due, per cui, in funzione di come evolverà la discussione, mi riservo di unire i due thread in uno solo.
Ciao,
grazie della risposta.
Ci temgo a precisare che sono un autodidatta e che non dispongo di tanto tempo da dedicare per cui mi occorre il vostro aiuto.
Procediamo con ordine.
step 1
Dal tuo url posso capire che devo inserire nel mio codice alcune librerie per cui:
#include <SPI.h> // Include SPI library
#include <SD.h> // Include SD library
#include <dht11.h> // Include DHT11 library
dht11 DHT;
#define DHT11_PIN 4 // Input at digital PIN 4
File myFile;
Tutto corretto? Devo invertire, aggiungere qualcosa?
Se usi un Arduino recente (consiglio sempre l'ultima versione, 1.6.9 al momento), SPI.h non serve nemmeno, puoi toglierla. SD.h ovviamente invece serve, è la libreria che si interfaccia con la SD.
SukkoPera:
Se usi un Arduino recente (consiglio sempre l'ultima versione, 1.6.9 al momento), SPI.h non serve nemmeno, puoi toglierla. SD.h ovviamente invece serve, è la libreria che si interfaccia con la SD.
Bene,
grazie del consiglio.
Proseguo con la compilazione.
step 2 (parte 1)
void setup(){ // Start setup
Serial.begin(9600);
delay(1000); // Delay to let system boot
while (!Serial) {
; // wait for serial port to connect. Needed for native USB port only
}
Serial.print("Initializing SD card...");
if (!SD.begin(4)) {
Serial.println("initialization failed!");
return;
}
Serial.println("initialization done.");
L'unica cosa che puoi avere sbagliato è il 4, che deve corrispondere al pin usato per lo Slave Select dell'adattatore che usi per la SD. Se usi l'Ethernet Shield ufficiale dovrebbe essere corretto, altrimenti dovrai consultare la documentazione della scheda.
Noto che usavi il pin 4 per il DHT, ovviamente dovrai spostarlo.
Però, ti prego, non procediamo in questo modo. Leggi il tutorial, cerca di CAPIRE l'esempio e abbozza uno sketch intero, poi se non funziona o se hai domande specifiche vediamo.
SukkoPera:
L'unica cosa che puoi avere sbagliato è il 4, che deve corrispondere al pin usato per lo Slave Select dell'adattatore che usi per la SD. Se usi l'Ethernet Shield ufficiale dovrebbe essere corretto, altrimenti dovrai consultare la documentazione della scheda.
SukkoPera:
Però, ti prego, non procediamo in questo modo. Leggi il tutorial, cerca di CAPIRE l'esempio e abbozza uno sketch intero, poi se non funziona o se hai domande specifiche vediamo.
gpb01:
Spero che la somma dei due facesse 1.52€ QUESTO viene 0.49 US$ ...
Sì, la somma! Ho anche quel modello che indichi (pagato 0.89€ per due esemplari), ma me ne serviva uno che esponesse il pin 3.3V, per poterlo alimentare a tale tensione. Vero che potevo saldare un filo al punto giusto e utilizzare quell'altro, ma ho preferito ostentare la mia estrema ricchezza :D.
//
// FILE: Humidity.07GIU16
// PURPOSE: READ AND WRITE DATA FROM DHT11 TO SD CARD FILE
// PROBE: ONE SENSOR
// AUTHOR: Antonio Cannavale
// COMFORT: HR 40%, T 23C
//
#include <SPI.h> // Include SPI library
#include <SD.h> // Include SD library
#include <dht11.h> // Include DHT11 library
dht11 DHT;
#define DHT11_PIN 2 // Input at digital PIN 2
File myFile;
void setup(){ // Start setup
Serial.begin(9600);
delay(1000); // Delay to let system boot
while (!Serial) {
; // wait for serial port to connect. Needed for native USB port only
}
Serial.print("Initializing SD card...");
if (!SD.begin(4)) { // Digital PIN 4
Serial.println(" initialization failed!");
return;
}
Serial.println("initialization done.");
// open the file. note that only one file can be open at a time,
// so you have to close this one before opening another.
myFile = SD.open("test.txt", FILE_WRITE);
// if the file opened okay, write to it:
if (myFile) {
Serial.print("Writing to test.txt...");
myFile.println("DHT TEST PROGRAM");
myFile.print("LIBRARY VERSION: ");
myFile.println(DHT11LIB_VERSION);
myFile.println();
myFile.println("Type,\tStatus,\tRH (%),\tT (C)");
} else {
// if the file didn't open, print an error:
Serial.println("error opening test.txt");
}
Serial.println("DHT TEST PROGRAM");
Serial.print("LIBRARY VERSION: ");
Serial.println(DHT11LIB_VERSION);
Serial.println();
Serial.println("Type,\tStatus,\tRH (%),\tT (C)");
delay(1000); // Wait before accessing Sensor
} // End setup
void loop(){ // Start loop
int chk;
Serial.print("DHT11, \t");
chk = DHT.read(DHT11_PIN); // Read the value returned from sensor at digital PIN 4
switch (chk){
case DHTLIB_OK: // The sensor samples and its checksum are OK
Serial.print("OK,\t");
break;
case DHTLIB_ERROR_CHECKSUM: // The checksum test failed
Serial.print("Checksum error,\t");
break;
case DHTLIB_ERROR_TIMEOUT: // A timeout occurred, and communication has failed
Serial.print("Time out error,\t");
break;
default:
Serial.print("Unknown error,\t");
break;
}
// DISPLAY DATA
Serial.print(DHT.humidity,1); // Print the humidity
Serial.print(",\t");
Serial.println(DHT.temperature,1); // Print the temperature
// FILE WRITE
myFile.print(DHT.humidity,1); // Print the humidity
myFile.print(",\t");
myFile.println(DHT.temperature,1); // Print the temperature
delay(600000); // Wait 10 minutes before accessing sensor again
} // End loop
Per evitare di danneggiare la scheda non l'ho colegata perché ancora non ho le resistenze ma dal monitor seriale leggo:
Initializing SD card... initialization failed!
DHT11, OK, 62, 21
Domanda.
Perché non compaioni le scritte "DHT TEST PROGRAM" "LIBRARY VERSION:" "Type, Status, RH (%), T (C)" dopo la frase "Initializing SD card..."?
Vanno percaso messe prima? In quale riga?
Perché dopo "Inizialization failed" hai messo un "return" che ti fa uscire dal setup() ...
Non credo che la cosa sia voluta ... magari c'era da dove hai fatto copia/incolla, ma messo li, appena l'inizializzazione della SD non riesce, ti butta fuori dal setup() e, peggio, vai quindi a finire nel loop() senza aver terminato il setup() !!!
gpb01:
Perché dopo "Inizialization failed" hai messo un "return" che ti fa uscire dal setup() ...
Non credo che la cosa sia voluta ... magari c'era da dove hai fatto copia/incolla, ma messo li, appena l'inizializzazione della SD non riesce, ti butta fuori dal setup() e, peggio, vai quindi a finire nel loop() senza aver terminato il setup() !!!
Guglielmo
E quindi?
Basta toglierlo e sostituirlo con qualcos'altro, ma cosa?