2015-11-24 22 views
-1

我需要關於我的小項目的幫助我有arduino和im通過串口讀取整數值來控制LED,所以即使通過串口監視器插入任何值LED也會出現故障LED亮起,我想根據代碼中的條件控制LED。 我想讀取串行監視器中的整數值,並根據通過串行端口接收的值控制led。在Arduino中通過串口讀取整數

我的繼承人碼

int All; 

int LEDpin =13; 

Void Setup() 

{ 

PinMode(LEDPin,OUTPUT); 

} 

Void Loop() 

{ 

     While(Serial,Available()==0) 



    All=Serial.intParse(); 

if (All=1) 


{ 

digitalWrite(LEDpin,HIGH); 



} 


if (All=0) 


{ 


digitalWrite(LEDpin,LOW); 
} 

if (All=2) 

{ 

digitalWrite(LEDpin,HIGH); 
delay(1000); 
digitalWrite(LEDpin,LOW); 

} 

} 
+1

請縮進代碼並刪除多餘的空格。 – Lundin

回答

0

您設置的變量在你的代碼,而不是檢查它針對價值All:中

代替:

if(All=1){ 
    ... 
} 

你應該寫:

if(All == 1){ 
    ... 
} 

編輯:

你應該看一看的命名約定:

  • 使用void代替Void
  • 名的成員變量以小寫字母的all代替All
  • 開頭的大字母應該用於C++或其他OOP語言的課程
0

你的代碼有很多事情要解決。首先@Tom Mekken指出你與==進行比較,而不是=。然後,您使用.而不是,訪問會員。你應該閱讀,直到available大於零,不等於。並且setuploop函數不是SetupLoop,如PinModeWhileVoid(C區分大小寫)。你應該用波特率初始化串行通信。並且LEDPin不是LEDpin。並且intParse不是ParseInt

And ...正確縮進。這是你的代碼修正:

int All; 

int LEDpin = 13; 

void setup() 
{ 
    Serial.begin(9600); 
    pinMode(LEDpin, OUTPUT); 
} 

void loop() 
{ 
    while(Serial.available() > 0) 
     All = Serial.parseInt(); 
    if (All == 1) 
    { 
     digitalWrite(LEDpin,HIGH); 
    } 
    if (All == 0) 
    { 
     digitalWrite(LEDpin,LOW); 
    } 
    if (All == 2) 
    { 
     digitalWrite(LEDpin,HIGH); 
     delay(1000); 
     digitalWrite(LEDpin,LOW); 
    } 
} 

現在,這只是核心部分。但是,您的代碼也有功能問題。而不是一堆,如果我建議你使用開關。而不是讀整數,因爲你的數據只是一位數字,所以我建議你只讀一個字符。這樣你就不會遇到其他字符的問題,而且,當有可用的非打印字符時,你不會遇到任何問題。

像這樣的東西應該做的伎倆:

int LEDpin = 13; 

void setup() 
{ 
    Serial.begin(9600); 
    pinMode(LEDpin, OUTPUT); 
} 

void loop() 
{ 
    switch (Serial.read()) 
    { 
     case '1': 
      digitalWrite(LEDpin,HIGH); 
      break; 
     case '0': 
      digitalWrite(LEDpin,LOW); 
      break; 
     case '2': 
      digitalWrite(LEDpin,HIGH); 
      delay(1000); 
      digitalWrite(LEDpin,LOW); 
      break; 
    } 
}