Массивы и растровые изображения Arduino

Я работаю над проектом, в котором мне нужно отображать растровые изображения на моем 5,0-дюймовом TFT-дисплее с использованием библиотек arduino gfx. Чтобы сгенерировать эти растровые изображения, я преобразовал их в байтовый массив и сохранил их в другом массиве примерно так:

const unsigned char* const array[] PROGMEM = {
one,//one, two, ... are the names of various arrays containing bitmaps
two,
three,
four,
five,
six,
seven,
eight,
nine,
};

Я использую следующую функцию для рисования растровых изображений:

void make(int x, int y)
{

for (int i =0; i<=151; i+= 150){
for (int j = 0; j < 601; j+= 150){

tft.drawBitmap(x+j,y+i,array[page],100,100,RA8875_GREEN);//page is defined as a global variable

}
}
}
}

Проблема в том, что если я использую изменяющуюся переменную, например страницу, растровое изображение отображается не полностью
Однако, если я использую константу, такую ​​как int a = 0; тогда растровое изображение рисуется полностью.

Может кто-нибудь мне помочь?

Спасибо

0

Решение

попробуй это :

  Serial.print("element_arr[alpha]: ");
Serial.println(element_arr[alpha]);
Serial.print("Patterns : ");
arrayA = ((element_arr[alpha] -1)/ 10);
Serial.println(arrayA);
colourA = (element_arr[alpha]) % 10 == 0 ? 9:(element_arr[alpha]) % 10 -1;
Serial.print("ColourA is : ");
Serial.println(colourA);

if (arrayA == 0){
tft.drawBitmap(x + j, y + i, array[0], 120, 120, pgm_read_word( &colour[colourA] ));
}else if (arrayA==1){
tft.drawBitmap(x + j, y + i, array[1], 120, 120, pgm_read_word( &colour[colourA] ));
}else if (arrayA==2){
tft.drawBitmap(x + j, y + i, array[2], 120, 120, pgm_read_word( &colour[colourA] ));
}else if (arrayA==3){
tft.drawBitmap(x + j, y + i, array[3], 120, 120, pgm_read_word( &colour[colourA] ));
}else if (arrayA==4){
tft.drawBitmap(x + j, y + i, array[4], 120, 120, pgm_read_word( &colour[colourA] ));
}else if (arrayA==5){
tft.drawBitmap(x + j, y + i, array[5], 120, 120, pgm_read_word( &colour[colourA] ));
}else if (arrayA==6){
tft.drawBitmap(x + j, y + i, array[6], 120, 120, pgm_read_word( &colour[colourA] ));
}else if (arrayA==7){
tft.drawBitmap(x + j, y + i, array[7], 120, 120, pgm_read_word( &colour[colourA] ));
}else if (arrayA==8){
tft.drawBitmap(x + j, y + i, array[8], 120, 120, pgm_read_word( &colour[colourA] ));
}else if (arrayA==9){
tft.drawBitmap(x + j, y + i, array[9], 120, 120, pgm_read_word( &colour[colourA] ));
}
0

Другие решения

Константа работает, потому что компилятор может оптимизировать массив array прочь, и используется указатель прямо на «указал на массив».

При использовании переменной, array хранится, а затем положить в PROGMEM,
Этот эффект, который вы видите, является результатом неиспользования PROGMEM данные правильно.

Вам придется использовать pgm_read_word правильно извлечь указатель.

Вместо:

array[page]

Вам нужно будет использовать:

(unsigned char*) pgm_read_word( &array[page] )
0

По вопросам рекламы [email protected]