在使用 Ardino UNO 從 BME280 讀取氣壓之前,我試圖從數字引腳 7(來自雨量計的資料)中填充 1800 個字符的字符陣列。結果通過 USB 使用 Serial.println 列印。
#include <Adafruit_BME280.h>
#define DATA 7
Adafruit_BME280 bme;
void setup()
{
Serial.begin(9600);
bme.begin(0x76);
pinMode(DATA, INPUT);
}
void loop()
{
int rmax = 1800; //1460
char r[rmax 1]; // changed from r[rmax]
int i;
for (i = 0; i < rmax; i )
{
if (digitalRead(DATA) == 1)
r[i] = '1';
else
r[i] = '0';
}
r[rmax] = '\0';
Serial.println(r);
Serial.println(bme.readPressure());
delay(1000);
}
如果陣列大小大于 1460,則不從 BME280 讀取資料,列印陣列時不進行換行。誰能告訴我為什么,如果陣列的大小是 1800,可以做些什么來獲得成功?
uj5u.com熱心網友回復:
看起來你有一個堆疊溢位問題。
正如您在此處或此處的 ATMega328 資料表中看到的,您只有 2KB RAM。ATMega328/ATMega328P 通常用作 Arduino UNO 板的基礎 MCU。
要檢查這一點,您可以將陣列char r[rmax];設為靜態并修復緩沖區溢位問題,正如 Ian 所說。
在這里您可以找到帶有修復程式的代碼:
// ...
// you previous code here
// NOTE: next row was added
#define rmax 1800
void loop()
{
// NOTE: next row was changed
static char r[rmax 1];
int i;
for (i = 0; i < rmax; i )
{
if (digitalRead(DATA) == 1)
r[i] = '1';
else
r[i] = '0';
}
r[rmax] = '\0';
Serial.println(r);
Serial.println(bme.readPressure());
delay(1000);
}
如果您在代碼編譯時遇到問題,則說明您有堆疊溢位問題(RAM 結束)。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/430120.html
標籤:C 数组 Arduino i2c arduino-ide
