Go Down

Topic: programma non va (Read 1 time) previous topic - next topic

?R

Riccardo Ertolupi of the Vicenza Thunders Team: http://www.VicenzaThunders.com

?R

la F() invece non ha bisogno della libreria, no?
però non funziona sempre, dipende dal metodo nella quale la uso, per esempio ho provato ad usarla in una funzione della libreria del mio GLCD e mi da questo errore:
Code: [Select]
VI_Thunders_2_0:263: error: no matching function for call to 'ST7565::drawstring(int, int, const __FlashStringHelper*, int)'
C:\Users\User\SkyDrive\Documenti\Arduino\Arduino-sw\libraries\ST7565/ST7565.h:106: note: candidates are: void ST7565::drawstring(uint8_t, uint8_t, char*, uint8_t)

perchè si aspetta un char penso, potrei facilmente modificare la libreria per rendere compatibile... cosa ne dite?
Riccardo Ertolupi of the Vicenza Thunders Team: http://www.VicenzaThunders.com

leo72

Sì la F() si aspetta un char* ma passato direttamente e non per referenza, per cui
Code: [Select]
Serial.println(F("MARIO"));
funziona

Code: [Select]
char* mario = "MARIO";
Serial.println(F(mario));

non funziona.

Prima di riscriverti la funzione, fai prima ad usare PROGMEM.

?R

ma la funzione sarebbe:
Code: [Select]
glcd.drawstring(6*2,2,"INFRARED RECEIVERS",0);
che usando F()
diventa:
Code: [Select]
glcd.drawstring(6*2,2,F("INFRARED RECEIVERS"),0);
ma così mi da quell'errore
Riccardo Ertolupi of the Vicenza Thunders Team: http://www.VicenzaThunders.com

leo72

Perché la funzione F() funziona solo in abbinamento alla classe Print, usata dalla sottoclasse Stream e dalle sue derivate, come Serial ed altre, per cui al momento funziona solo se richiami il metodo .print/ln() di queste classi derivate. Ma se usi librerie di terze parti, puoi scordartela.
Quindi impara ad usare PROGMEM e sei a posto.  ;)

Go Up