Il codice nella parte loop viene ripetuto continuamente, così mi è sembrato di capire.
Però questo codice se non lancio il monitor seriale non funziona.
void loop()
{
Serial.println();
sensors.requestTemperatures();
Serial.print("Temperatura = ");
Serial.print(sensors.getTempCByIndex(0));
Serial.println(" gradi C");
testo = sensors.getTempCByIndex(0);
// 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(testo);
// close the file:
myFile.close();
Serial.println("done.");
} else {
// if the file didn't open, print an error:
Serial.println("error opening test.txt");
}
delay(3000);
}
Il codice prende una temperatura e registra su una sd. Funziona perfettamente ma solo quando lancio il monitor seriale dall'IDE di arduino. Io ero convinto che il loop girasse continuamente una volta acceso il micro.
Questo è tutto il codice
#include <SPI.h>
#include <SD.h>
File myFile;
float testo ;
#include <OneWire.h>
#include <DallasTemperature.h>
#define ONE_WIRE_BUS 8
OneWire ourWire(ONE_WIRE_BUS);
DallasTemperature sensors(&ourWire);
void setup()
{
delay(1000);
Serial.begin(9600);
if (!SD.begin(10)) {
Serial.println("initialization failed!");
return;
}
Serial.println("initialization done.");
Serial.println("Misura la temperatura con sensore DS18B20");
Serial.println("continua la misurazione");
delay(1000);
sensors.begin();
}
void loop()
{
Serial.println();
sensors.requestTemperatures();
Serial.print("Temperatura = ");
Serial.print(sensors.getTempCByIndex(0));
Serial.println(" gradi C");
testo = sensors.getTempCByIndex(0);
// 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(testo);
// close the file:
myFile.close();
Serial.println("done.");
} else {
// if the file didn't open, print an error:
Serial.println("error opening test.txt");
}
delay(3000);
Guardando questo pezzo di programma "a freddo" vi sono alcune cose che non capisco:
Richiama la funzione e sensor.requesttemperarutes () ma non ne utilizza un eventuale valore di ritorno. Senza sapere cosa fa mi vengono da formulare un ipotesi: che serva per chiamare poi la funzione sensor.get... (0), ma allora chi le dice che la cosa sia "pronta"
Lei usa 2 volte il valore della sensor.get... (0), una lo stampa ed una lo assegna ad una variabile (che poi non sembra usare in altro). Chi le dice che i due valori coincidano? Fossi in lei la assegnerei prima alla variabile, e poi farei la print della variabile
lei usa una loop apparentemente velocissima, prevedo casini sul monitor seriale tipo che non riesca a leggere
La loop che usa non pare fare visivamente cose diverse da scrivere su seriale, come fa a dire che non funziona quando non può vedere la seriale?
Il loop(), terminato "correttamente" il setup() è chiamato in continuazione, e questo è certo ...
... c'è invece da capire:
di che Arduino stiamo parlando ?
sicuro che per qualche motivo il codice non vada in errore ? Senza seriale, io farei delle segnalazioni con un LED collegato ad un pin (NO il led sul 13 dato che usi la SPI) per indicare a ch punto del programma sei. Così vedi anche dove si blocca o dove passa.
Perdono se correggilo Guglielmo, il setup () termina, mentre il loop() é richiamato in continuazione.
Inoltre credo si possa usare anche un led sul 13, soltanto non comandato, un led "parassita" come quello che Arduino Uno ha di serie
Io_me:
Perdono se correggilo Guglielmo, il setup () termina, mentre il loop() é richiamato in continuazione.
La frase era esatta, mancava solo una virgola dopo "setup()" ...
... la frase corretta è: "Il loop(), terminato "correttamente" il setup(), è chiamato in continuazione ..."