Che non mi pare il miglior modo di risolvere questo problema, dato che le differenze potrebbero essere anche a livello di codice, non solo di nome di file.
Meglio allora inserire in tutte le lib che si usano una direttiva per il compilatore per discriminare tra versione 1.0 e non:
Grazie ma l'idea non è mia. Semplicemente mi ricordavo di aver letto da qualche parte di questa costante "ARDUINO". Cmq per me resta sempre miglior cosa aspettare ancora per il passaggio alla 1.0 che tutte le lib vengano aggiornate. So che ci vorrà tempo ma d'altronde che te ne fai della versione 1.0 in più rispetto alla 0022/23 se hai una UNO?
Controlla il contenuto della costante ARDUINO che contiene la versione dell'IDE in uso.
E' una direttiva per il compilatore: in base al suo valore modifica in fase di compilazione lo sketch. Nello specifico, carica in base alla versione il file appropriato per integrare le funzioni di Arduino nello sketch.
si deve inserire cosi' come e', in tutte le librerie che si usa per un determinato progetto ?
Sì
Si devono tenere installate entrambe le versioni, 0.23 e 1.0 ?
Secondo tua scelta. Io uso ancora la 0022 e non sento proprio la necessità di passare alla 0023 o alla 1.0, almeno finché non verrà aggiornato il core Tiny a quest'ultima versione.
Come si fa a capire se una libreria e' aggiornata per la 1.0 in modo da non mettere questo codice ?
Immagino dal changelog distribuito dallo stesso autore oppure vedendo appunto nel codice se richiama file della vecchia versione dell'Arduino oppure no.
provo immediatamente sul mio progetto e ti fo sapere i risultati.
nel frattempo una piccola polemica: Arduino con questa scelta e' andata contro ad uno dei principali obiettivi dichiarati dalla piattaforma stessa, coe' la facilita' dell'uso dell'hw e sw arduino
non riesco a capire perche' andare controcorrente e eliminare la compatibilita' con le migliaia di librerie esistenti.
IN genere le societa' fann il contrario, si impegnano per aumentare la retrocompatibilita', non abbatterla
Sinceramente credo per rendere un po' più "indipendente" Arduino da Wiring.
Senza note di polemiche, credo che vogliano un po' tagliare il cordone ombelicale col passato, non rinnegando le origini di Arduino (bene o male è nato grazie al creatore di Wiring, inteso come linguaggio e come scheda di prototipazione) ma evidenziando così la sua differenza ed identità personale.
WProgram.h è l'header di Arduino, che si può considerare una libreria/estensione del C che aggiunge le funzioni proprie di Arduino (ad esempio DigitalWrite, AnalogRead, millis ecc...) necessarie per gestire l'HW della scheda.
Quel file è richiamato in automatico durante la compilazione degli sketch (fino alla versione 0023). Ecco il file main.cpp contenuto in /arduino-0022/hardware/arduino/cores/arduino/:
#include <WProgram.h>
int main(void)
{
init();
setup();
for (;;)
loop();
return 0;
}
Come vedi, ogni sketch veniva "riportato alla normalità" di un comune file C/C++ con il suo main() che contiene il codice in setup() ed in loop(), ma prima vedi la chiamata a WProgram, per integrare le funzioni precostituite di Arduino.
Questo è invece quello della 1.0:
#include <Arduino.h>
int main(void)
{
init();
#if defined(USBCON)
USB.attach();
#endif
setup();
for (;;) {
loop();
if (serialEventRun) serialEventRun();
}
return 0;
}
quindi e' inutile inserirlo negli sketch ? perche' lo si trova piu' o meno in tutti ? forse nelle primissime versioni non era richiamato in automatico ?
Qui tocca mettere questa cosa in evidenza altrimenti nei prossimi mesi toccherà ripeterlo tutti i giorni.
Per compilare uno sketch 0022, o 0023, basta aggiungere in "..\arduino-1.0\hardware\arduino\cores\arduino" il fileWrogram.h contenente :
#include "Arduino.h"
Questo sistema automaticamente tutte le dipendenze, però rimangono da sistemare a mano gli eventuali metodi deprecati con quelli nuovi, e se è all'interno di una libreria di terze parti, cioè non fornita con l'IDE, tocca intervenire direttamente sulla stessa.
Inutile dire che in breve tempo gli sviluppatori seri aggiorneranno le loro librerie per poter funzionare con la versione 1.0.
Testato:
spetta ma questo e' un secondo metodo rispetto a quello di Leo ?
Leo ti ha suggerito una strada per rendere le librerie compatibili con la 0022 e la 1.0, e comunque non basta, io ti sto indicando un modo per risolvere senza toccare le librerie e gli sketch per quanto riguarda le varie dipendenze, cioè tutti i file .h utilizzati durante la compilazione.
aggiungo l'errore che ricevo io.
Ho sia creato il file come detto da astro, che inserito nella libreria indicata il codice di leo
ma la libreria va in errore per un altro file, WConstants.h, anch'esso non presente nella 1.0
In file included from Testato1_clock_data_temp_RTC.cpp:159:
D:\Backup\Elettronica\Arduino\arduino-1.0\libraries\DS1307/DS1307.h:18:24: error: WConstants.h: No such file or directory
E qui si torna a quanto ti dicevo prima io. Non solo va sistemata l'IDE affinché trovi i giusti file, vanno poi riguardate le lib.
uesto sistema automaticamente tutte le dipendenze, però rimangono da sistemare a mano gli eventuali metodi deprecati con quelli nuovi, e se è all'interno di una libreria di terze parti, cioè non fornita con l'IDE, tocca intervenire direttamente sulla stessa.
WCostants.h è un file che non è chiamato direttamente da WProgram.h. Quindi se DS1307.h lo invoca, non lo trova per forza. Devi vedere nell'IDE 1.0 qual è il file che lo ha sostituito e modificare la lib.