Recentemente mi sono accorto che le librerie per il TinkerKit non sono più compatibili con le ultime versioni di Arduino – io uso la 1.6.7. Ecco come ho risolto il problema.

L’errore segnalato è “'constexpr' needed for in-class initialization of static data member 'const float'“, si riferisce a quattro righe del file TinkerKit.h in cui vengono dichiarate e inizializzate altrettante variabili const static float. L’errore è causato dal fatto che nello standard della versione di C++ utilizzata dall’IDE di Arduino (C++11) non è consentito inizializzare variabili di questo tipo direttamente nell’header (il file .h), ma vanno dichiarate nell’header e inizializzate nel codice (il file .cpp).

Ho modificato il file TinkerKit.h lasciando solo le dichiarazioni delle variabili, alle righe segnalate dal compilatore di Arduino, quindi ho spostato le inizializzazioni delle quattro variabili all’inizio del file TinkerKit.cpp, come previsto dallo standard.

In pratica, nel file TinkerKit.h, ho cambiato queste righe:

222: const static float ADCres = 1023.0;
224: const static float Kelvin = 273.15; // 0°C = 273.15 K
226: const static float Ginf = 120.6685; // Ginf = 1/Rinf
293: const static float _gain = 1.414;

che diventano:

222: const static float ADCres;
224: const static float Kelvin;
226: const static float Ginf;
293: const static float _gain;

e nel file TinkerKit.cpp ho aggiunto queste righe:

7: const float TKThermistor::ADCres = 1023.0;
8: const float TKThermistor::Kelvin = 273.15; // 0°C = 273.15 K
9: const float TKThermistor::Ginf = 120.6685; // Ginf = 1/Rinf
10: const float TKAccelerometer::_gain = 1.414;

È possibile scaricare la libreria aggiornata da qui oppure da GitHub.