Compilando uno sketch mi sono imbattuto in questo tipo di errore: Fatal error: WConstants.h: No such file or directory.
Ho cominciato una ricerca su internet e come primo consiglio trovo di inserire "#include <Arduino.h>".
Fatto ma l'errore permane, anzi adesso mi dice "Più di una libreria trovata per "DCF77.h".
In alcuni forum conegliano di modificare una libreria che non ho capito quale, solo che io per principio e su consiglio non voglio fare.
C'è qualche altra soluzione?
... quindi, dato che sicuramemte stai usando una versione di Arduino IDE aggiornata, NON dovrebbe andare a pescare le cose che erano relative a WProgram.h come WConstants.h che riporti ... :
La libreria incriminata è quella che si trova qui:
/Users/ezio/Documents/Arduino/libraries/DCF77/
... e NON mi sembra che sia quella che hai indicato tu perché, in quella, alla linea dell'errore, c'è tutt'altro.
Sicuro di NON avere più librerie relative al DFC77 ? ? ? Fai uno zip della cartella che ti ho indicato e allegalo che vediamo che codice c'è dentro ... :
Ho allegato la libreria che mi hai chiesto.
Anche io ho notato che c'era l'avviso di librerie doppie, però mi sono focalizzato sull'errore "WConstants.h".
Infatti ... NON è quella di cui hai messo il link ...
... cancella quella cartella, che contiene una libreria vecchissima di 15 anni fa, e riporva a compilare, magari va a prendere quella buona.
Se non va, tocca che cerchi anche l'altra cartella, cancelli pure quella e poi installi SOLO quella del link che hai messo prima.
Arduino:1.8.13 (Mac OS X), Scheda:"Arduino Uno"
sketch_jan25e:8:17: error: 'Utils' is not a namespace-name
using namespace Utils;
^~~~~
sketch_jan25e:8:22: error: expected namespace-name before ';' token
using namespace Utils;
^
sketch_jan25e:14:8: error: 'time_t time' redeclared as different kind of symbol
time_t time;
^~~~
In file included from /Users/ezio/Documents/Arduino/libraries/DCF77-1.0.0/DCF77.h:9:0,
from /Users/ezio/Desktop/sketch_jan25e/sketch_jan25e.ino:6:
/Users/ezio/Library/Arduino15/packages/arduino/tools/avr-gcc/7.3.0-atmel3.6.1-arduino7/avr/include/time.h:122:21: note: previous declaration 'time_t time(time_t*)'
time_t time(time_t *timer);
^~~~
/Users/ezio/Desktop/sketch_jan25e/sketch_jan25e.ino: In function 'void loop()':
sketch_jan25e:30:5: error: 'setTime' was not declared in this scope
setTime(DCFtime);
^~~~~~~
/Users/ezio/Desktop/sketch_jan25e/sketch_jan25e.ino:30:5: note: suggested alternative: 'isotime'
setTime(DCFtime);
^~~~~~~
isotime
sketch_jan25e:32:30: error: too many arguments to function 'void digitalClockDisplay()'
digitalClockDisplay(DCFtime);
^
/Users/ezio/Desktop/sketch_jan25e/sketch_jan25e.ino:35:6: note: declared here
void digitalClockDisplay() {
^~~~~~~~~~~~~~~~~~~
/Users/ezio/Desktop/sketch_jan25e/sketch_jan25e.ino: In function 'void digitalClockDisplay()':
sketch_jan25e:36:16: error: 'hour' was not declared in this scope
Serial.print(hour());
^~~~
sketch_jan25e:37:15: error: 'minute' was not declared in this scope
printDigits(minute());
^~~~~~
/Users/ezio/Desktop/sketch_jan25e/sketch_jan25e.ino:37:15: note: suggested alternative: 'init'
printDigits(minute());
^~~~~~
init
sketch_jan25e:38:15: error: 'second' was not declared in this scope
printDigits(second());
^~~~~~
/Users/ezio/Desktop/sketch_jan25e/sketch_jan25e.ino:38:15: note: suggested alternative: 'rewind'
printDigits(second());
^~~~~~
rewind
sketch_jan25e:39:37: error: 'day' was not declared in this scope
Serial.print(" "); Serial.print(day());
^~~
sketch_jan25e:40:37: error: 'month' was not declared in this scope
Serial.print(" "); Serial.print(month());
^~~~~
sketch_jan25e:41:37: error: 'year' was not declared in this scope
Serial.print(" "); Serial.print(year());
^~~~
/Users/ezio/Desktop/sketch_jan25e/sketch_jan25e.ino:41:37: note: suggested alternative: 'char'
Serial.print(" "); Serial.print(year());
^~~~
char
exit status 1
'Utils' is not a namespace-name
Questo report potrebbe essere più ricco di informazioni abilitando l'opzione
"Mostra un output dettagliato durante la compilazione"
in "File -> Impostazioni"
Lo sketch è molto semplice:
/*
DCFSignal.ino - DCF77 debug Example
https://www.forgani.com/electronic/dcf77-signal-with-arduino/
**/
#include <DCF77.h>
#include <Time.h>
using namespace Utils;
#define DCF_PIN 2 // Connection pin to DCF 77 device
#define DCF_INTERRUPT 0 // Interrupt number associated with pin
#define BLINK_PIN 13
time_t time;
DCF77 DCF = DCF77(DCF_PIN, DCF_INTERRUPT);
void setup() {
Serial.begin(9600);
pinMode(DCF_PIN, INPUT);
pinMode(BLINK_PIN, OUTPUT);
Serial.println("Waiting for DCF77 time ... ");
DCF.Start();
}
void loop() {
delay(1000);
time_t DCFtime = DCF.getTime(); // Check if new DCF77 time is available
if (DCFtime != 0) {
Serial.println("Time is updated");
setTime(DCFtime);
}
digitalClockDisplay(DCFtime);
}
void digitalClockDisplay() {
Serial.print(hour());
printDigits(minute());
printDigits(second());
Serial.print(" "); Serial.print(day());
Serial.print(" "); Serial.print(month());
Serial.print(" "); Serial.print(year());
Serial.println();
}
void printDigits(int digits) {
// utility function for digital clock display: prints preceding colon and leading 0
Serial.print(":");
if (digits < 10)
Serial.print('0');
Serial.print(digits);
}
Se commento la linea 8 "using monospace Utils", l'errore passa alla linea 14 "time_t time;".
Visto che lo sketch è pieno di errori, comincio a pensare fatti apposta, lascio perdere questo sketch e vedo di trovare qualcosa d'altro funzionante.
Saluti
LelloGi
Ennesima schifezza che viene messa su internet ... secondo me, chi ha scritto quel programma, manco lo ha provato dato che ci sono evidenti errori di sintassi ...
... prova così:
/*
* DCFSignal.ino - DCF77 debug Example
*/
#include <DCF77.h>
#include <Utility/Utils.h>
#include <Time.h>
using namespace Utils;
#define DCF_PIN 2 // Connection pin to DCF 77 device
#define DCF_INTERRUPT 0 // Interrupt number associated with pin
#define BLINK_PIN 13
time_t time;
DCF77 DCF = DCF77(DCF_PIN, DCF_INTERRUPT);
void setup() {
Serial.begin(9600);
pinMode(DCF_PIN, INPUT);
pinMode(BLINK_PIN, OUTPUT);
Serial.println("Waiting for DCF77 time ... ");
DCF.Start();
}
void loop() {
delay(1000);
time_t DCFtime = DCF.getTime(); // Check if new DCF77 time is available
if (DCFtime!=0) {
Serial.println("Time is updated");
setTime(DCFtime);
}
digitalClockDisplay();
}
void digitalClockDisplay(){
Serial.print(hour());
printDigits(minute());
printDigits(second());
Serial.print(" "); Serial.print(day());
Serial.print(" "); Serial.print(month());
Serial.print(" "); Serial.print(year());
Serial.println();
}
void printDigits(int digits){
// utility function for digital clock display: prints preceding colon and leading 0
Serial.print(":");
if(digits < 10)
Serial.print('0');
Serial.print(digits);
}
... da un po' di warning, ma sono trascurabili. Compilare compila:
Sketch uses 5892 bytes (18%) of program storage space. Maximum is 32256 bytes.
Global variables use 333 bytes (16%) of dynamic memory, leaving 1715 bytes for local variables. Maximum is 2048 bytes.
... che poi funzioni pure ... è un'altro paio di maniche
Grazie per l'aiuto, ma sono sempre più convinto di passare ad altro.
Nella compilazione mi da una serie di errori che si può vedere da qui:
Arduino:1.8.13 (Mac OS X), Scheda:"Arduino Uno"
sketch_jan25e:15:8: error: 'time_t time' redeclared as different kind of symbol
time_t time;
^~~~
In file included from /Users/ezio/Documents/Arduino/libraries/DCF77-1.0.0/DCF77.h:9:0,
from /Users/ezio/Desktop/sketch_jan25e/sketch_jan25e.ino:6:
/Users/ezio/Library/Arduino15/packages/arduino/tools/avr-gcc/7.3.0-atmel3.6.1-arduino7/avr/include/time.h:122:21: note: previous declaration 'time_t time(time_t*)'
time_t time(time_t *timer);
^~~~
/Users/ezio/Desktop/sketch_jan25e/sketch_jan25e.ino: In function 'void loop()':
sketch_jan25e:31:5: error: 'setTime' was not declared in this scope
setTime(DCFtime);
^~~~~~~
/Users/ezio/Desktop/sketch_jan25e/sketch_jan25e.ino:31:5: note: suggested alternative: 'isotime'
setTime(DCFtime);
^~~~~~~
isotime
/Users/ezio/Desktop/sketch_jan25e/sketch_jan25e.ino: In function 'void digitalClockDisplay()':
sketch_jan25e:37:17: error: 'hour' was not declared in this scope
Serial.print(hour());
^~~~
sketch_jan25e:38:16: error: 'minute' was not declared in this scope
printDigits(minute());
^~~~~~
/Users/ezio/Desktop/sketch_jan25e/sketch_jan25e.ino:38:16: note: suggested alternative: 'init'
printDigits(minute());
^~~~~~
init
sketch_jan25e:39:16: error: 'second' was not declared in this scope
printDigits(second());
^~~~~~
/Users/ezio/Desktop/sketch_jan25e/sketch_jan25e.ino:39:16: note: suggested alternative: 'rewind'
printDigits(second());
^~~~~~
rewind
sketch_jan25e:40:38: error: 'day' was not declared in this scope
Serial.print(" "); Serial.print(day());
^~~
sketch_jan25e:41:38: error: 'month' was not declared in this scope
Serial.print(" "); Serial.print(month());
^~~~~
sketch_jan25e:42:38: error: 'year' was not declared in this scope
Serial.print(" "); Serial.print(year());
^~~~
/Users/ezio/Desktop/sketch_jan25e/sketch_jan25e.ino:42:38: note: suggested alternative: 'char'
Serial.print(" "); Serial.print(year());
^~~~
char
exit status 1
'time_t time' redeclared as different kind of symbol
Sketch abbandonato!
Non è la prima volta che trovo su internet sorgenti schifezza.
Saluti
No, se ti da quegli errori, potrai avere sempre problemi ... c'è casino sulla TUA installazione di Arduino con librerie duplicate e quant'altro ...
... che quel codice sia una "schifezza" è appurato, ma che quello che ti ho messo, come hai visto, compila senza errori è un fatto, per cui, ribadisco ... il problema è la tua installazione di Arduino che ritengo "corrotta" e con librerie duplicate che vanno in conflitto.
gpb01: No, se ti da quegli errori, potrai avere sempre problemi ... c'è casino sulla TUA installazione di Arduino con librerie duplicate e quant'altro ...
Provvedo ad installare tutto da zero.
Saluti
LelloGi
Probabilmente la cartella scompattata si chiamera "arduino.1.8.13", con i file di arduino. Dentro alla cartella "arduino.1.8.13" si crea una cartella "portable".
Comunque un passo alla volta, prima scaricare la versione zip, scompattare e poi vediamo.
La risposta breve alla tua domanda é no, non vanno scompattati all'interno di "portable"