我试图通过Serial发送数组内容。这是代码:
#include <PCM.h>
const unsigned char sample[] PROGMEM = {
126, 127, 128, 128, 128, 128, 128, 127, 128, 128, 128, 129, 129, 128, 127, 128, 128, 127, 126, 127, 128, 129, 128, 127, 126, 127, 128, 128, 126, 126, 127, 127, 127, 127, 127, 127, 126, 127, 129, 130, 129, 128, 126, 126, 126, 126, 127, 129, 130, 129, 127, 127, 127, 127, 128, 128, 128, 128, 127, 127, 127, 127, 127, 127, 128, 130, 131, 129, 127, 126, 126, 126, 127, 127, 128, 128, 128, 128, 127, 128, 128, 127, 127};
void setup()
{
Serial.begin(115200);
delay(3000);
for (int i=0; i<sizeof(sample); i++)
{
delay(100);
Serial.println(sample[i]);
}
}
void loop()
{
}
当我开始监视串行端口时,它会提供非预期的输出,而不是数组内的原始值。 这是第一个代码的输出&#34;与Println&#34;:
0
0
6
0
0
0
1
0
0
6
6
6
6
6
6
6
0
0
135
0
0
6
0
0
1
3
0
6
171
0
0
0
0
0
0
0
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
2
6
1
4
45
0
0
6
0
6
0
248
254
这是&#34;写&#34;的输出: i could not paste the output of "write", i captured it as jpg
但是,当我这样做时,我得到了我想要的值,但我将失去FOR循环,
#include <PCM.h>
const unsigned char sample[] PROGMEM = {
126, 127, 128, 128, 128, 128, 128, 127, 128, 128, 128, 129, 129, 128, 127, 128, 128, 127, 126, 127, 128, 129, 128, 127, 126, 127, 128};
void setup()
{
Serial.begin(115200);
delay(3000);
//for (int i=0; i<sizeof(sample); i++)
// {
delay(100);
Serial.println(sample[0]);
Serial.println(sample[1]);
Serial.println(sample[2]);
Serial.println(sample[3]);
Serial.println(sample[4]);
// }
}
void loop()
{
}
有什么问题? 我无法理解。 任何帮助将不胜感激。
注意:两个代码对于数组中的前5个值应给出相同的结果,但它没有,第二个代码给出&#34; 126 127 128 128 128&#34;它很好,但第一个代码不会,它只有变量&#34; i&#34;而不是逐个列出数组的所有内容。
提前谢谢你,
答案 0 :(得分:1)
我将程序存储器“PROGMEM”中的内存类型更改为普通或动态内存,并且在此代码中一切正常,我可以轻松地使用“for”循环进行迭代。
开发人员应该了解如何使用“for or while”或程序存储器“PROGMEM”中的任何循环指令进行迭代,而不仅仅是动态存储器(或告诉我们如何存在^ _ ^)
谢谢,