leo72:
Forse la libreria che usi tu non supporta la funzione F().
La funzione F() è stata aggiunta a partire dall'ultima versione dell'IDE ed è inclusa in Print.h, che a sua volta viene invocata dalla libreria Stream.h, usata come base per gli oggetti Serial e LiquidCrystal.
la versione dell'IDE è la 1.0.1 e ho provato ad includere anche Print.h o Stream.h, ma niente.
Altri suggerimenti?
Non basta includerla tu, deve essere il codice scritto per poterla usare.
L'altro suggerimento è modificare il codice della lib oppure riscrivere il tuo inserendo il supporto alle stringhe in Flash con ProgMem.
cyberhs:
E' evidente che la libreria che usi per inviare comandi HTML non supporta la funzione F().
Puoi risparmiare spazio, invece, usandola con tutte le istruzioni Serial.print.
L'errore "initializer fails to determine size of '__c'" mi viene tornato quando nel Serial.println o pc_client.println c'è una variabile, ad esempio:
Serial.println(F("Ciao")); // non da errore
Serial.println(F(nome_variabile_di_tipo_testo)); // da errore
Ho dato un'occhiata meglio al core e la funzione F() vedo che è un define per prendere direttamente una stringa. Non essendo una funzione, non accetta parametri in forma di variabili.
leo72:
Ho dato un'occhiata meglio al core e la funzione F() vedo che è un define per prendere direttamente una stringa. Non essendo una funzione, non accetta parametri in forma di variabili.
ho provato e anche solo nella dichiarazione di msg, ma mi da questo errore: error: "__c causes a section type conflict"
quindi, invece di
String msg = "";
ho scritto
PROGMEM String msg = "";
Non c'è un modo di debugare l'esecuzione dello sketch e vedere se la scheda freezata fa qualcosa?
Conferma del freeze:
con la scheda che non emette alcun lampeggio del led, ho provato a mandare lo sketch con alcune modifiche e mi dice che la porta è già occupata da un altro processo.
Se disabilito l'uso della seriale (che mi serve solo per debug), credete che risolverei il problema?
Grazie
Spannometricamente direi che F() mette delle costanti stringa in progmem, quindi mi sembra del tutto normale che usando una variabile (di qualunque tipo) si generi un errore.
tuxduino:
Spannometricamente direi che F() mette delle costanti stringa in progmem, quindi mi sembra del tutto normale che usando una variabile (di qualunque tipo) si generi un errore.
F() è una funzione aggiuntiva del metodo .print introdotta con l'ultima versione dell'IDE di Arduino che permette di gestire le stringhe in memoria Flash. Però non puoi fare la conversione da un tipo di dato a stringa in Flash, ottieni errore. E' ciò che ti abbiamo già detto: non va bene fare print(F(mario + " pippo")), puoi fare print(F("pippo")) e basta
tuxduino:
Spannometricamente direi che F() mette delle costanti stringa in progmem, quindi mi sembra del tutto normale che usando una variabile (di qualunque tipo) si generi un errore.
scusa ma non ho capito cosa intendi
Se solo trovassi la pagina di documentazione relativa ad F()...
leo72:
F() è una funzione aggiuntiva del metodo .print introdotta con l'ultima versione dell'IDE di Arduino che permette di gestire le stringhe in memoria Flash. Però non puoi fare la conversione da un tipo di dato a stringa in Flash, ottieni errore. E' ciò che ti abbiamo già detto: non va bene fare print(F(mario + " pippo")), puoi fare print(F("pippo")) e basta
Adesso é più chiaro. Scusate.
Quanto prima voglio usare un #define per togliere Serial dal codice di produzione e vedere se risolvo.
Mi chiedo, la Leonardo potrebbe essere guasta?
leo72:
F() è una funzione aggiuntiva del metodo .print introdotta con l'ultima versione dell'IDE di Arduino che permette di gestire le stringhe in memoria Flash. Però non puoi fare la conversione da un tipo di dato a stringa in Flash, ottieni errore. E' ciò che ti abbiamo già detto: non va bene fare print(F(mario + " pippo")), puoi fare print(F("pippo")) e basta
Adesso é più chiaro. Scusate.
Quanto prima voglio usare un #define per togliere Serial dal codice di produzione e vedere se risolvo.
Mi chiedo, la Leonardo potrebbe essere guasta?
impostato il #define che mi toglie completamente la seriale, ma niente, dopo un pò si blocca sempre.
Potrebbe essere guasta la Leonardo?