簡體   English   中英

Arduino變量用法

[英]Arduino variable usage

對於Arduino和C ++,我是新手。

我正在嘗試編寫一個從模擬引腳零(POT)讀取輸入數據的程序。 讀取值后,我希望它打印到串行監視器,但只打印一次。 如果模擬引腳零值的值發生變化,我希望它將新值打印到串行監視器。 我正在嘗試使用全局變量,但無濟於事。 任何幫助將不勝感激!

int entered=0;
int flag;

void setup()
{
Serial.begin(9600);
}

void loop() {

int potValue=analogRead(A0);

if (!entered){
entered=1;
Serial.println(potValue);

}
int flag=potValue;

if (flag!=flag){
entered=0;
}
 }

那真的很接近。 這條線是你的錯

int flag=potValue;

如上所述,這會創建一個新的局部變量標志 局部變量隱藏全局變量。 因此,比較始終是對自己的,永遠不會失敗。 將行更改為:

flag=potValue;

並且您的程序將按照需要運行。

您可以像這樣保存一些內存和代碼空間:

int g_lastValue = 0;

void loop() {

  int nowValue = analogRead(A0);

  if (nowValue != g_lastValue) {
    Serial.println(nowValue);
    g_lastValue = nowValue;
  }
  ...
}

使用g_作為名稱前綴是變量是全局的提示。 我使用這個命名約定,因為它有助於在讀取函數時知道非本地變量。 如果沒有名稱提示,則需要掃描整個函數體以查看是否存在變量聲明,並且只有通過查看函數而不查找聲明才能知道變量必須是全局的。 在小函數上,並不是真正的問題,但隨着代碼的增長,您可能需要一些命名約定提供的自我文檔。

你正在路上,但你在變量方面有點糾結。

它可以更簡單:只需一個全局變量和一個條件檢查。

int lastRead = -1; // init to value outside of possible range

void setup()
{
  Serial.begin(9600);
}

void loop() {

  // get current value
  int currentRead = analogRead(0);

  //compare and only print if !=
  if (currentRead != lastRead){
   lastRead = currentRead; // store
   Serial.println(lastRead);
  }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM