通过arduino中的串口读取整数

时间:2015-11-24 08:33:13

标签: c 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);  

}

}

2 个答案:

答案 0 :(得分:0)

您在代码中设置了变量All,而不是根据值进行检查:

而不是:

if(All=1){
  ...
}

你应该写:

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

修改

你应该看看命名惯例:

  • 使用void代替Void
  • 使用小写字母all而不是All
  • 命名您的成员变量
  • 开头的大字母应该是C ++或其他OOP语言的类

答案 1 :(得分:0)

您的代码有很多需要修复的地方。首先,@ Tom Mekken指出你与==进行比较,而不是=。然后,您使用.代替,访问成员。你应该阅读,直到available大于零,不等于。 setuploop函数不是SetupLoop,例如PinModeWhile以及Void(C就是这种情况)敏感)。您应该使用波特率初始化串行通信。而LEDPin不是LEDpinintParse不是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;
    }
}