簡體   English   中英

在arduino中通過串口讀取整數

[英]Reading integer via serial port in arduino

我需要關於我的小項目的幫助,我有 arduino,我通過串行端口讀取整數值來控制 LED,所以如果我通過串行監視器 LED 打開插入任何值,我會遇到麻煩,我想根據代碼中的條件控制 LED。 我想讀取串行監視器中的整數值並根據通過串行端口接收到的值控制 LED。

這是我的代碼

   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);  

}

}

您在代碼中設置變量All而不是根據值檢查它:

代替:

if(All=1){
  ...
}

你應該寫:

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

編輯:

你應該看看命名約定:

  • 使用void而不是Void
  • 用小寫字母all而不是All來命名你的成員變量
  • 開頭的大字母應該用於 C++ 或其他 OOP 語言中的類

你的代碼有很多東西需要修復。 首先@Tom Mekken 指出你與==進行比較,而不是= 然后你訪問成員. 而不是, 並且您應該閱讀直到available大於零,不等於。 並且setuploop功能不是SetupLoop ,如PinModeWhileVoid (C 區分大小寫)。 並且您應該以波特率初始化串行通信。 並且LEDPin不是LEDpin intParse不是ParseInt

並且...正確縮進。 這是您修復的代碼:

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;
    }
}

暫無
暫無

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

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