loop

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);
}
  1. metti TUTTO il codice e NON solo un pezzo (il loop())

  2. "non funziona" è un po' generico ... spiega bene cosa fa/non fa.

Guglielmo

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:

  1. 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"
  2. 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
  3. lei usa una loop apparentemente velocissima, prevedo casini sul monitor seriale tipo che non riesca a leggere
  4. 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?

Correzione: vedendo la loop completa tolgo il punto 3

Il loop(), terminato "correttamente" il setup() è chiamato in continuazione, e questo è certo ...
... c'è invece da capire:

  1. di che Arduino stiamo parlando ?

  2. 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.

Guglielmo

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

Scusate il codice funziona perfettamente sono io che non funziono. :slight_smile: :slight_smile: :slight_smile:

Inserivo la scheda sd dopo che arduino era già acceso e quindi il setup era già partito, logicamente non la vedeva.

Ecco perché ho chiesto se il loop è infinito come avevo letto.

La variabile testo è un float perché provando come stringa non veniva scritta sulla sd.

Guglielmo devi avere pazienza sono vecchio :):slight_smile:

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 ..."

Guglielmo

michelearduino:
Guglielmo devi avere pazienza sono vecchio :):slight_smile:

Si, perché io so' un ragazzino invece ... :grin: :grin: :grin:

Guglielmo

Scusi Guglielmo, avevo capito male io

gpb01:
Si, perché io so' un ragazzino invece ... :grin: :grin: :grin:

Guglielmo

Guglielmo ma tu sei un prof :)... ti devo chiedere un consiglio "personale"

michelearduino:
Guglielmo ma tu sei un prof :)... ti devo chiedere un consiglio "personale"

Ma quale "prof" :smiley: :smiley: :smiley:

Se è una cosa "personale" scrivi in MP :slight_smile:

Guglielmo