Pages: 1 [2]   Go Down
Author Topic: programma non va  (Read 1336 times)
0 Members and 1 Guest are viewing this topic.
Camisano Vicentino (VI), Italy
Offline Offline
God Member
*****
Karma: 5
Posts: 956
ƎR like no other.
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

ahn ok ok, avevo capito male...
grazie ancora smiley-wink
Logged

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

Camisano Vicentino (VI), Italy
Offline Offline
God Member
*****
Karma: 5
Posts: 956
ƎR like no other.
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

non sto capendo una cosa di progmem perchè il compilatore non mi da errori però il programma non va come mi aspetto...
se per dichiarare una striga da dare al mio LCD scrivo così è giusto?
Code:
const char wrgpsw[] PROGMEM={"WRONG PASSWORD!"};
e devo darla alla funzione del LCD che è:
Code:
void ST7565::drawstring(uint8_t x, uint8_t line, char *c, uint8_t color) {
  while (c[0] != 0) {
    drawchar(x, line, c[0], color);
    c++;
    x += 6; // 6 pixels wide
    if (x + 6 >= LCDWIDTH) {
      x = 0;    // ran out of this line
      line++;
    }
    if (line >= (LCDHEIGHT/8))
      return;        // ran out of space :(
  }
 if (x <= LCDWIDTH && color)drawline(x,line*8,x,line*8+7,color);
}
quindi nel programma per scrivere nello schermo faccio:
Code:
  glcd.drawstring(0, 5,(char*)wrgpsw,0);
ma questo è sbagliato, da quello che ho letto bisogna usare
Code:
glcd.drawstring(0, 5,(char*)pgm_read_word(&(wrgpsw[i])),0);
però così sono costretto ad usare un ciclo for per scrivere tutta la stringa... e tra l'altro non sto capendo cosa mi ritorna perchè mi scrive simboli sbagliati smiley-confuse
Logged

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

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 327
Posts: 22720
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Non mi ricordo se l'avevo già detto a te oppure a qualcun altro.... ma il problema di PROGMEM non è tanto nel memorizzare dei dati dalla Flash, il problema è recuperarli  smiley-sweat

Prova così:

Code:
char buffer[25];
PROGMEM char *wrgpsw[] = {"WRONG PASSWORD!"};
strcpy_P(buffer, (char*)pgm_read_word(&(wrgpsw)));

Adesso dovresto avere in "buffer" (che è un array di tipo char) la stringa estratta dalla Flash.

PS: l'ho scritto di getto, compila ma non l'ho testato. La dimensione di buffer è arbitraria, regolala tu in base alla max lunghezza che devi trattare
Logged


Camisano Vicentino (VI), Italy
Offline Offline
God Member
*****
Karma: 5
Posts: 956
ƎR like no other.
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

ho provato come dicevi tu ma ancora niente smiley-sad-blue
Logged

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

Camisano Vicentino (VI), Italy
Offline Offline
God Member
*****
Karma: 5
Posts: 956
ƎR like no other.
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

sto leggendo il file pgmspace.html che è all'egato con l'IDE e veso la fine c'è scritto come si dovrebbere procedere con le stringe... se non ho capito male dicono che non si può mettere nella flash una stringa alla volta, o almeno non lo prendono neanche in considerazione quel caso, boh... smiley-roll-blue comunque dicono di fare così mettendole tutte in una tabella:

Code:
char string_1[] PROGMEM = "String 1";
char string_2[] PROGMEM = "String 2";
char string_3[] PROGMEM = "String 3";
char string_4[] PROGMEM = "String 4";
char string_5[] PROGMEM = "String 5";

PGM_P string_table[] PROGMEM =
{
    string_1,
    string_2,
    string_3,
    string_4,
    string_5
};

e poi per riportarle in ram quando ce n'è bisogno suggeriscono di fare così:
Code:
void foo(void)
{
    char buffer[10];
   
    for (unsigned char i = 0; i < 5; i++)
    {
        strcpy_P(buffer, (PGM_P)pgm_read_word(&(string_table[i])));
       
        // Display buffer on LCD.
    }
    return;
}

ora non ho il robot per provare, secondo voi ha senso la cosa?
Logged

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

Pages: 1 [2]   Go Up
Jump to: