私の質問は、arduinoで多くの変数に簡単にアクセスする方法のトピックを扱います。ループ内で変数名を動的に変更する可能性があるかどうかを知りたい。私の英語は最高ではないので、私が現時点で扱っているコードについて説明しましょう。動的変数名のビルド、連結
私は小さなサーマルプリンタを持っています。印刷方法はadafruitサーマルプリント・ライブラリ
void Adafruit_Thermal::printBitmap(int w, int h, const uint8_t *bitmap, bool fromProgMem) {
...
}
から来ていると私はこのようになりますビットマップフォントを作成しました:
私はこの中で、文字のための文字を印刷したいstatic const uint8_t PROGMEM Char_32[] {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
}; // Char 032 ()
static const uint8_t PROGMEM Char_33[] {
0x00, 0x00, 0x2E, 0x00, 0x00, 0x00, 0x00, 0x00
}; // Char 033 (!)
... for each caracter
forループ:
for(j = 0; j <= messageLength - 1; j++){ // Go through each character in the message.
int character = message[j]; // reads and stores the ASCII value of the current Character
printer.printBitmap(letter_width, letter_height, Char_XX); // i like to print the specific character
}
Normaly私は2次元配列を取るだろうし、このように印刷します:
static const uint8_t PROGMEM letter_data[][8] =
{
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // Char 032 ()
{0x00, 0x00, 0x2E, 0x00, 0x00, 0x00, 0x00, 0x00}, // Char 033 (!)
{0x00, 0x03, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00} // Char 034 (")
}
for(j = 0; j <= messageLength - 1; j++){ //Go through each character in the message.
int Character = message[j] - 32; // first visible ASCIIcharacter '!' is number 33. reads and stores the ASCII value of the current Character we are dealing with and -32 so the char correspnds to our array.
printer.printBitmap(letter_width, letter_height, letter_data[Character]);
}
しかし、私の文字は8x8ピクセルよりずっと大きくなり、配列は大きくなります。これを回避する可能性はありますか?
大きすぎるとはどういう意味ですか?あなたは記憶がなくなっていますか? – user3853544
ビットマップのメッセージ/列にビットマップ/文字の行が3つネストされたループが必要です。 – stark
あなたのコードに基づいて、* "変数名の変更" *はあなたの問題の記述が間違っているように思えますし、メモリ使用を管理しようとすること、特にスタックの使用に関して問題があります。 – Xirema