Fatal error: WConstants.h: No such file or directory

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?

LelloGi

Non è che per caso stai includendo qualche cosa di veramente vecchio che ancora usa <Wiring.h> ? :wink:

Dovrai purtroppo modificare la librerie, mi dai il link da dove l’hai presa ?

Guglielmo

Lo sketch l'ho preso qui:

https://www.forgani.com/electronic/dcf77-signal-with-arduino/

La libreria l'ho presa da :

https://github.com/thijse/Arduino-DCF77

Appena posso provo con questa:

https://www.arduinolibraries.info/libraries/dcf77

Saluti

LelloGi

Molto strano …
… quella librerie inizia, correttamente con:

#if ARDUINO >= 100
#include <Arduino.h> 
#else
#include <WProgram.h> 
#endif
...

… 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 … ::slight_smile:

Includi qualche cosa d’altro che hai scaricato ?

Guglielmo

Fai una cosa, copia/incolla la parte di errore della compilazione che, sicuramente, dice dove quel file viene cercato ... ::slight_smile:

Guglielmo

L'errore è questo:

Arduino:1.8.13 (Mac OS X), Scheda:"Arduino Uno"





/Applications/Arduino.app/Contents/Java/arduino-builder -dump-prefs -logger=machine -hardware /Applications/Arduino.app/Contents/Java/hardware -hardware /Users/ezio/Library/Arduino15/packages -tools /Applications/Arduino.app/Contents/Java/tools-builder -tools /Applications/Arduino.app/Contents/Java/hardware/tools/avr -tools /Users/ezio/Library/Arduino15/packages -built-in-libraries /Applications/Arduino.app/Contents/Java/libraries -libraries /Users/ezio/Documents/Arduino/libraries -fqbn=arduino:avr:uno -ide-version=10813 -build-path /var/folders/sf/6l3wtqc949v0lvxt3030y21m0000gn/T/arduino_build_602542 -warnings=all -build-cache /var/folders/sf/6l3wtqc949v0lvxt3030y21m0000gn/T/arduino_cache_118691 -prefs=build.warn_data_percentage=75 -prefs=runtime.tools.avr-gcc.path=/Users/ezio/Library/Arduino15/packages/arduino/tools/avr-gcc/7.3.0-atmel3.6.1-arduino7 -prefs=runtime.tools.avr-gcc-7.3.0-atmel3.6.1-arduino7.path=/Users/ezio/Library/Arduino15/packages/arduino/tools/avr-gcc/7.3.0-atmel3.6.1-arduino7 -prefs=runtime.tools.arduinoOTA.path=/Applications/Arduino.app/Contents/Java/hardware/tools/avr -prefs=runtime.tools.arduinoOTA-1.3.0.path=/Applications/Arduino.app/Contents/Java/hardware/tools/avr -prefs=runtime.tools.avrdude.path=/Users/ezio/Library/Arduino15/packages/arduino/tools/avrdude/6.3.0-arduino17 -prefs=runtime.tools.avrdude-6.3.0-arduino17.path=/Users/ezio/Library/Arduino15/packages/arduino/tools/avrdude/6.3.0-arduino17 -verbose /Users/ezio/Desktop/sketch_jan25e/sketch_jan25e.ino


/Applications/Arduino.app/Contents/Java/arduino-builder -compile -logger=machine -hardware /Applications/Arduino.app/Contents/Java/hardware -hardware /Users/ezio/Library/Arduino15/packages -tools /Applications/Arduino.app/Contents/Java/tools-builder -tools /Applications/Arduino.app/Contents/Java/hardware/tools/avr -tools /Users/ezio/Library/Arduino15/packages -built-in-libraries /Applications/Arduino.app/Contents/Java/libraries -libraries /Users/ezio/Documents/Arduino/libraries -fqbn=arduino:avr:uno -ide-version=10813 -build-path /var/folders/sf/6l3wtqc949v0lvxt3030y21m0000gn/T/arduino_build_602542 -warnings=all -build-cache /var/folders/sf/6l3wtqc949v0lvxt3030y21m0000gn/T/arduino_cache_118691 -prefs=build.warn_data_percentage=75 -prefs=runtime.tools.avr-gcc.path=/Users/ezio/Library/Arduino15/packages/arduino/tools/avr-gcc/7.3.0-atmel3.6.1-arduino7 -prefs=runtime.tools.avr-gcc-7.3.0-atmel3.6.1-arduino7.path=/Users/ezio/Library/Arduino15/packages/arduino/tools/avr-gcc/7.3.0-atmel3.6.1-arduino7 -prefs=runtime.tools.arduinoOTA.path=/Applications/Arduino.app/Contents/Java/hardware/tools/avr -prefs=runtime.tools.arduinoOTA-1.3.0.path=/Applications/Arduino.app/Contents/Java/hardware/tools/avr -prefs=runtime.tools.avrdude.path=/Users/ezio/Library/Arduino15/packages/arduino/tools/avrdude/6.3.0-arduino17 -prefs=runtime.tools.avrdude-6.3.0-arduino17.path=/Users/ezio/Library/Arduino15/packages/arduino/tools/avrdude/6.3.0-arduino17 -verbose /Users/ezio/Desktop/sketch_jan25e/sketch_jan25e.ino


Using board 'uno' from platform in folder: /Applications/Arduino.app/Contents/Java/hardware/arduino/avr


Using core 'arduino' from platform in folder: /Applications/Arduino.app/Contents/Java/hardware/arduino/avr


Detecting libraries used...


/Users/ezio/Library/Arduino15/packages/arduino/tools/avr-gcc/7.3.0-atmel3.6.1-arduino7/bin/avr-g++ -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -flto -w -x c++ -E -CC -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10813 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR -I/Applications/Arduino.app/Contents/Java/hardware/arduino/avr/cores/arduino -I/Applications/Arduino.app/Contents/Java/hardware/arduino/avr/variants/standard /var/folders/sf/6l3wtqc949v0lvxt3030y21m0000gn/T/arduino_build_602542/sketch/sketch_jan25e.ino.cpp -o /dev/null -DARDUINO_LIB_DISCOVERY_PHASE


Alternatives for DCF77.h: [DCF77-1.0.0@1.0.0 DCF77]


ResolveLibrary(DCF77.h)


  -> candidates: [DCF77-1.0.0@1.0.0 DCF77]


/Users/ezio/Library/Arduino15/packages/arduino/tools/avr-gcc/7.3.0-atmel3.6.1-arduino7/bin/avr-g++ -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -flto -w -x c++ -E -CC -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10813 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR -I/Applications/Arduino.app/Contents/Java/hardware/arduino/avr/cores/arduino -I/Applications/Arduino.app/Contents/Java/hardware/arduino/avr/variants/standard -I/Users/ezio/Documents/Arduino/libraries/DCF77 /var/folders/sf/6l3wtqc949v0lvxt3030y21m0000gn/T/arduino_build_602542/sketch/sketch_jan25e.ino.cpp -o /dev/null -DARDUINO_LIB_DISCOVERY_PHASE


/Users/ezio/Library/Arduino15/packages/arduino/tools/avr-gcc/7.3.0-atmel3.6.1-arduino7/bin/avr-g++ -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -flto -w -x c++ -E -CC -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10813 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR -I/Applications/Arduino.app/Contents/Java/hardware/arduino/avr/cores/arduino -I/Applications/Arduino.app/Contents/Java/hardware/arduino/avr/variants/standard -I/Users/ezio/Documents/Arduino/libraries/DCF77 /Users/ezio/Documents/Arduino/libraries/DCF77/DCF77.cpp -o /dev/null -DARDUINO_LIB_DISCOVERY_PHASE


Alternatives for WConstants.h: []/Users/ezio/Documents/Arduino/libraries/DCF77/DCF77.cpp:20:10: fatal error: WConstants.h: No such file or directory





 #include "WConstants.h"


ResolveLibrary(WConstants.h)          ^~~~~~~~~~~~~~





compilation terminated.


  -> candidates: []


Più di una libreria trovata per "DCF77.h"


Usata: /Users/ezio/Documents/Arduino/libraries/DCF77


Non usata: /Users/ezio/Documents/Arduino/libraries/DCF77-1.0.0


Uso la libreria DCF77 nella cartella: /Users/ezio/Documents/Arduino/libraries/DCF77 (legacy)


exit status 1


Errore durante la compilazione per la scheda Arduino Uno.

La versione di Arduino è la 1.8.13
Saluti

LelloGi

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 ... ::slight_smile:

Guglielmo

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

LelloGi

DCF77.zip (82 KB)

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.

Guglielmo

gpb01:
Se non va, tocca che cerchi anche l'altra cartella, cancelli pure quella e poi installi SOLO quella del link che hai messo prima.

Quella che trovo nel Playground di Arduino o quella su: GitHub - thijse/Arduino-DCF77: Efficient and complete DCF77 library for Arduino ?

LelloGi

Scusa, ma se quel progetto è basato su quella del link … metti quella del link non ti pare ? :wink:

Guglielmo

Adesso va un po meglio, è cambiato l’errore:

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

Se commenti anche time_t time che succede?
Mi pare che non venga utilizzata quella variabile.

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 :smiley: :smiley: :smiley:

Guglielmo

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

LelloGi

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.

Guglielmo

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

Suggerisco di usare la versione zip, scompattare in una cartella e in quella "creare" una cartella di nome portable.

speedyant:
Suggerisco di usare la versione zip, scompattare in una cartella e in quella "creare" una cartella di nome portable.

Per poi inserire i files scompattati e utilizzare l'applicazione Arduino direttamente li ?
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"