2015-12-05 16 views
0

我試圖通過串行發送數組內容。這是代碼:打印數組內容到串行,給出意想不到的值

#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() 
{ 
} 

當我開始監測串行端口時,它給出非預期的輸出,而不是數組內的原始值。 這是第一個代碼「用的println」的輸出:

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 

這是「寫」的輸出: 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個值給出相同的結果,但它沒有,第二個代碼給出了「126 127 128 128 128」,它是好的,但是第一個代碼不會,並且它只有變量「i」而不是逐一列出數組的所有內容。

謝謝你在前進,

+0

我不確定這裏發生了什麼,但是如果你在每個'println'之前放了一個延遲,第二個例子仍然「工作」嗎?這更像第一個例子。同樣,如果你剛剛在循環中有第一個'println'會發生什麼:你正確地得到126的負載? –

+1

使用write而不是println。 Printeln在每個字節後添加LF字符。 –

+0

感謝您的重播, 是的,我得到的126s你提到的負載,這是我的問題, 當我使用變量「我」循環數組,我得到非數組值(如在第一個代碼中) ,但是當我通過它們各自的索引調用這些項時,我在數組中正確地得到它們......但是我將失去for循環,因爲我無法一個一個地迭代它們! – Sharista

回答

1

我改變的內存類型從程序存儲器「PROGMEM」正常或動態內存和每一件事去罰款,此代碼,我可以用迭代「for」循環很容易,沒有問題。

開發人員應該瞭解如何使用迭代「for或while」或程序存儲器「PROGMEM」,而不是隻有動態內存中的任何循環指令(或告訴我們如何,如果存在的^ _ ^)

謝謝,

相關問題