我的问题涉及如何使用arduino轻松访问大量变量的主题。我想知道是否有可能在循环中动态更改变量名称。我的英语不是最好的,所以让我用我正在处理的代码解释。
我有一台小型热敏打印机。印刷方法来自adafruit热印刷库
-0
我创建了一个如下所示的位图字体:
void Adafruit_Thermal::printBitmap(int w, int h, const uint8_t *bitmap, bool fromProgMem) {
...
}
我喜欢在这个for循环中打印出一封信:
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
Normaly我会采用2d数组并打印出来:
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
}
但是,我的字母会比8x8像素大得多,而且我的数组变大了。那么有可能解决这个问题吗?
答案 0 :(得分:1)
从您的描述中可以看出,您遇到了内存使用问题。 Arduino官方文档表明,低端Arduino主板的代码标记为31.5Kb of Flash Memory(32 - 0.5) - 或PROGMEM
,其他系统最高为248Kb(256 - 8)。
根据你的评论,如果每个字符占用1224字节的内存(或1.2Kb),你将在前一个系统中用25个字符排除这个限制(甚至不足以覆盖字母表,没有别的!)和后者中的202个字符。
所以这取决于您正在构建的确切系统,但很明显,根据您使用的字符大小,您将会遇到问题这一切,即使在更大的系统中(因为这个内存容量将与其他类似大小的结构共享)。
所以,问题的简短答案:您需要压缩数据。我的建议是缩小每个字母使用的数据量(可能将两个尺寸的尺寸减小一半),然后在运行时写入输出设备(即显示设备)时将其展开。