Aiuto in programmazione di arduino

Salve sono nuovo del forum e nuovo pure di programmazione e sto cominciando ora a programmare, ho un problema in una riga di programma che arduino mi da errore, vi incollo qui sotto la riga che non mi fa compilare arduino:

Arduino:1.6.7 (Windows 7), Scheda:"Arduino/Genuino Mega or Mega 2560, ATmega2560 (Mega 2560)"

Datalogger:54: error: expected primary-expression before '.' token

sprintf(Calendario, "%02d/%02d/%d %02:%02:%02 %d %d", now.day(), now.month(), now.year(), now.hour(), now.minute(), now.second(), DHT.humidity, DHT.temperature);

c'è qualcuno cosi gentile da spiegarmi cosa e perché?

grazie in anticipo

^

Sketch completo, please!

#include <Wire.h>
#include "RTClib.h"
#include <SD.h>
#include <DHT.h>

#define CS 10
#define DHT11_PIN 4

RTC_DS1307 RTC;
char buffer[25];

File myFile;

void setup()
{
 // Open serial communications and wait for port to open:
 Serial.begin(9600);
 Serial.print("In lettura SD ...");
 pinMode(CS, OUTPUT);

 if (!SD.begin(CS)) {
   Serial.println("Lettura Fallita");
   return;
 }
 Serial.println("Lettura terminata.");

 Wire.begin();
 RTC.begin();
 if ( RTC.isrunning()) {
   Serial.println("RTC non è inserita!");
   RTC.adjust(DateTime(__DATE__, __TIME__));
 }
}
void loop ()  {
DateTime now = RTC.now();

int clk;
clk = DHT.read(DHT11_PIN);
int data = 0;
switch (clk) {
 case DHTLIB_OK:
           data = 0:
           break;
 case DHTLIB_ERROR_CHECKSUM:
           data = 997;
           break;
 case DHTLIB_ERROR_TIMEOUT:
           data = 998;
           break:
 default:
           data = 999;
           break;
   }
sprintf(Calendario, "%02d/%02d/%d %02:%02:%02 %d %d", now.day(), now.month(), now.year(), now.hour(), now.minute(), now.second(), DHT.humidity, DHT.temperature, data);
Serial.println(Calendario);
 
 myFile = SD.open("datalog.txt", FILE_WRITE);

 // if the file is available, write to it:
 if (myFile) {
   myFile.println(buffer);
   myFile.close();}
   else {
    Serial.println("errore di apertura datalog.txt");
   }
   delay(600000);
}

@giorgiotek: in conformità al regolamento, punto 7, edita (in basso a destra del post, bottone More -> Modify) il tuo post e racchiudi il codice all'interno dei tag CODE (... sono quelli che in edit inserisce il bottone fatto così: </>, tutto a sinistra). Grazie.

Guglielmo

P.S.: E ricontrolla bene il tuo codice ... hai messo in vari punti ":" al posto del ";" ... il rispetto della "sintassi" è fondamentale quando si scrive del codice !

giorgiotek:
Salve sono nuovo del forum

Ti invitiamo a presentarti (dicci quali conoscenze hai di elettronica e di programmazione) qui: Presentazioni
e a leggere il regolamento se non lo hai già fatto: Regolamento
Qui una serie di link utili, non inerenti al tuo problema:

gpb01:
@giorgiotek: in conformità al regolamento, punto 7, edita (in basso a destra del post, bottone More -> Modify) il tuo post e racchiudi il codice all'interno dei tag CODE (... sono quelli che in edit inserisce il bottone fatto così: </>, tutto a sinistra). Grazie.

Guglielmo

P.S.: E ricontrolla bene il tuo codice ... hai messo in vari punti ":" al posto del ";" ... il rispetto della "sintassi" è fondamentale quando si scrive del codice !

Grazie per l'aiuto che mi state prestando, ho corretto quello che mi hai consigliato ma il problema persiste.

Di seguito incollo il problema che l'IDE mi evidenzia:

Arduino:1.6.7 (Windows 7), Scheda:"Arduino/Genuino Mega or Mega 2560, ATmega2560 (Mega 2560)"

C:\Users\Gio\AppData\Local\Temp\arduino_abfef421f481d302eb070f1884b99556\Datalogger.ino: In function 'void loop()':

Datalogger:38: error: expected primary-expression before '.' token

clk = DHT.read(DHT11_PIN);

^

Datalogger:41: error: 'DHTLIB_OK' was not declared in this scope

case DHTLIB_OK;

^

Datalogger:41: error: expected ':' before ';' token

case DHTLIB_OK;

^

Datalogger:44: error: 'DHTLIB_ERROR_CHECKSUM' was not declared in this scope

case DHTLIB_ERROR_CHECKSUM;

^

Datalogger:44: error: expected ':' before ';' token

case DHTLIB_ERROR_CHECKSUM;

^

Datalogger:47: error: 'DHTLIB_ERROR_TIMEOUT' was not declared in this scope

case DHTLIB_ERROR_TIMEOUT;

^

Datalogger:47: error: expected ':' before ';' token

case DHTLIB_ERROR_TIMEOUT;

^

Datalogger:50: error: expected ':' before ';' token

default;

^

Datalogger:54: error: 'Calendario' was not declared in this scope

sprintf = (Calendario, "%02d/%02d/%04d %02d:%02d:%02d %02d %02d", now.day(), now.month(), now.year(), now.hour(), now.minute(), now.second(), DHT.humidity, DHT.temperature, data);

^

Datalogger:54: error: expected primary-expression before '.' token

sprintf = (Calendario, "%02d/%02d/%04d %02d:%02d:%02d %02d %02d", now.day(), now.month(), now.year(), now.hour(), now.minute(), now.second(), DHT.humidity, DHT.temperature, data);

^

Datalogger:54: error: expected primary-expression before '.' token

sprintf = (Calendario, "%02d/%02d/%04d %02d:%02d:%02d %02d %02d", now.day(), now.month(), now.year(), now.hour(), now.minute(), now.second(), DHT.humidity, DHT.temperature, data);

^

Da quello che mi pare di capire non è solo quello il problema ma anche ben altri, l'IDE mi evidenzia soltanto il problema della riga 54, poi sperando di risolvere presto... per ora ringrazio per l'aiuto!!

Come ti è stato ben indicato da Nid, la presentazione va fatta nell'apposito posto per le presentazioni, ovvero QUI e non all'interno di questo thread.

Per il resto ... perdona, non voglio sembrare scortese, ma uno, prima di buttarsi a scrivere programmi, almeno le basi del linguaggio che deve usare bisogna che se le studia ... perché qui stiamo parlando delle BASI ... e tu continui a mischiare/confondere dove mettere i ":", dove mettere i ";", ecc. ecc.

Puoi cominciare con QUESTO e magari cercare in libreria qualche buon testo di programmazione C su Arduino. In inglese, ad esempio, c'è QUESTO , ma ne trovi parecchi anche in Italiano :slight_smile:

Guglielmo

gpb01:
Come ti è stato ben indicato da Nid, la presentazione va fatta nell'apposito posto per le presentazioni, ovvero QUI e non all'interno di questo thread.

Infatti mi sono accorto di aver sbagliato e ho sistemato :smiley:

Per il resto ... perdona, non voglio sembrare scortese, ma uno, prima di buttarsi a scrivere programmi, almeno le basi del linguaggio che deve usare bisogna che se le studia ... perché qui stiamo parlando delle BASI ... e tu continui a mischiare/confondere dove mettere i ":", dove mettere i ";", ecc. ecc.

Puoi cominciare con QUESTO e magari cercare in libreria qualche buon testo di programmazione C su Arduino. In inglese, ad esempio, c'è QUESTO , ma ne trovi parecchi anche in Italiano :slight_smile:

Guglielmo

Non sei stato scortese... è che necessito di questo sistema per monitorare la temperatura e umidità di una stanza... questo è uno sketch trovato su in giro su internet, il problema che mi da degli errori e non riesco a risolverli, che faccio? rinuncio?

Impossibile che il codice originale avesse tutti questi errori di sintassi. :o
Il codice che hai postato NON ha quegli errori, mentre le linee segnalate con errori hanno l'errore. Come mai ? ci hai messo le mani ?

case DHTLIB_OK;

Qui ci va i : e non ; nel codice postato è corretto, quello che compili no.

nid69ita:
Impossibile che il codice originale avesse tutti questi errori di sintassi. :o
Il codice che hai postato NON ha quegli errori, mentre le linee segnalate con errori hanno l'errore. Come mai ? ci hai messo le mani ?

case DHTLIB_OK;

Qui ci va i : e non ; nel codice postato è corretto, quello che compili no.

sto cercando di farlo andare... ora cerco il link da dove ho prelevato lo sketch e lo posto se posso..

ho trovato la pagina, lo sketch in questione arriva da qui:

Quel sito è famoso e molto valido. Ripeto, io codice NON ha errori.
Se ti segnala questo errore: case DHTLIB_OK*; *lo hai inserito tu

giorgiotek:
è che necessito di questo sistema per monitorare la temperatura e umidità di una stanza... questo è uno sketch trovato su in giro su internet, il problema che mi da degli errori e non riesco a risolverli, che faccio? rinuncio?

No, anzi ... un motivo in più per studiare bene il linguaggio ... così da capire esattamente i problemi, invece di limitarsi a dei copia/incolla e bloccarsi alle prime difficoltà :wink:

Guglielmo

nid69ita:
Quel sito è famoso e molto valido. Ripeto, io codice NON ha errori.
Se ti segnala questo errore: case DHTLIB_OK*; * lo hai inserito tu

no mi segnala errore in questa dicitura:

RTC.sqw(0); //0 Led off - 1 Freq 1Hz - 2 Freq 4096kHz - 3 Freq 8192kHz - 4 Freq 32768kHz

NO, se hai incluso le giuste librerie indicate sul sito da te linkato ... NON puoi avere quell'errore.

Ne hai in realtà un altro :D, dato che la libreria che ti fa scaricare, RTClib, contiene una riga non più compatibile con l'attuale versione dell'IDE di Arduino, ma ... basta una semplice correzione per sistemare il tutto ed avere:

Sketch uses 17,830 bytes (55%) of program storage space. Maximum is 32,256 bytes.
Global variables use 1,309 bytes (63%) of dynamic memory, leaving 739 bytes for local variables. Maximum is 2,048 bytes.

... ovvero il codice correttamente compilato.

L'unica correzione che occorre fare è alla linea 17 di RTClib.cpp che deve diventare:

static const uint8_t daysInMonth [] PROGMEM = { 31,28,31,30,31,30,31,31,30,31,30,31 };

... nota il const aggiunto dopo lo static che trovi in quella che scarichi.

Tutto qui.

Guglielmo

grazie

Grazie mille per l'aiuto