Я в процессе рисования растровых изображений на OLED-экране. Каждое изображение отформатировано как
`const stati c unsigned char waddle_dee_0 [] PROGMEM = { bits };
В настоящее время я пытаюсь добавить анимацию и очистить код. Для этого я создал класс «Bitmap».
Этот класс будет хранить такие вещи, как размер, ширина и массив, содержащий указатель на каждый кадр изображения, например
const static unsigned char* const waddle_table[] PROGMEM = {
waddle_dee_0,
waddle_dee_1,
waddle_dee_2,
waddle_dee_3,
waddle_dee_4,
waddle_dee_5
};
В Bitmap. cpp у меня есть конструктор и функция
#include "bitmaps.h"
Bitmap::Bitmap(double w, double h, uint8_t f, size_t s, const unsigned char* const b){
setWidth(w);
setHeight(h);
setFrames(f);
setSize(s);
setAllFrames(b);
}
void Bitmap::drawFrames(){
size_t currSize = this->getSize();
uint8_t numbOfFrames = this->getFrames();
double width = this->getWidth();
double height = this->getHeight();
Serial.println(currSize);
Serial.println(numbOfFrames);
for (int i = 0; i < numbOfFrames; i++)
{
const unsigned char* frameAt = this->getSingleFrame(i);
drawBitmap(0,0,width,height, frameAt, currSize);
delay(100);
}
}
И в заголовочном файле у меня есть определения
#include <stdint.h>
#include "Arduino.h"
// ensure this library description is only included once
#ifndef Bitmap_h
#define Bitmap_h
// library interface description
class Bitmap
{
// user-accessible "public" interface
public:
Bitmap(double w, double h, uint8_t f, size_t s, const unsigned char* const b);
double getWidth(){return width;}
double getHeight(){return height;}
uint8_t getFrames(){return frames;}
size_t getSize(){return size;}
double setWidth(double w){width = w;}
double setHeight(double h){height = h;}
uint8_t setFrames(uint8_t f){frames = f;}
size_t setSize(size_t s){size = s;}
//const unsigned char* const* getFrameArr(){return bitmap_frames;}
void drawFrames();
const unsigned char* const* getAllFrames(){return bitmap_frames;}
void setAllFrames(const unsigned char* const b){*bitmap_frames = b;}
const unsigned char* getSingleFrame(uint8_t f){return bitmap_frames[f];}
private:
double width;
double height;
uint8_t frames;
size_t size;
const unsigned char* const bitmap_frames[];
};
#endif
Моя проблема связана с массив указателей и как правильно копировать эти кадры или правильно копировать указатели в новый массив (bitmap_frames). Цель состоит в том, чтобы bitmap_frames были такими же, как у массива waddle_table, чтобы я мог l oop по индексу рисовать каждое растровое изображение по одному в порядке. Мой код работал, когда у меня был один жестко запрограммированный массив, но после попытки его обобщения я столкнулся с множеством ошибок типов и несоответствий.
Если кто-то может привести меня в правильном направлении, я, кажется, получил потерян в системе указателей. Спасибо!