[英]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
來命名你的成員變量你的代碼有很多東西需要修復。 首先@Tom Mekken 指出你與==
進行比較,而不是=
。 然后你訪問成員.
而不是,
。 並且您應該閱讀直到available
大於零,不等於。 並且setup
和loop
功能不是Setup
和Loop
,如PinMode
和While
和Void
(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.