极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 11670|回复: 3

求助:arduino串口通讯问题

[复制链接]
发表于 2015-10-14 14:04:13 | 显示全部楼层 |阅读模式
  1. int led = 13;
  2. void setup() {
  3.   // USB串口通讯 控制 13 引脚 Led
  4.   Serial.begin(9600);
  5.   pinMode(led, OUTPUT);
  6.   Serial.println("Off is 0 , On is 1."); //0是关,1是开
  7. }

  8. void loop() {
  9.   // put your main code here, to run repeatedly:
  10.   while (Serial.available() == 0); //获取值

  11.   int val = Serial.read() - '0';

  12.   if (val == 1) //是1,执行打开
  13.   {
  14.     Serial.println("Led is On");
  15.     digitalWrite(led, HIGH);
  16.     }
  17.   else if (val == 0) //是0,执行关闭
  18.   {
  19.     Serial.println("Led is Off");
  20.     digitalWrite(led, LOW);
  21.     }
  22.   else
  23.   {
  24.     Serial.println("Please enter 1 or 0"); //请输入1或0
  25.    
  26.     }
  27.   // Serial.println(val);
  28.    while(Serial.read() >= 0){}//清空串口缓存
  29. }
复制代码


代码执行后,串口通讯输入两个数字,比如输入11,会执行两次,如何只执行1次呢。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复

使用道具 举报

发表于 2015-10-14 14:13:24 | 显示全部楼层
你的程式好像是想忽略第一個數字以後的輸入.
由於你用的是 9600bps, 傳輸比較慢, 在執行 read() 之後加一個 delay(1) 就可以了.
最後的清空改成這樣比較好:

  1. while (Serial.available()) {
  2.   Serial.read();
  3.   delay(1);
  4. }
复制代码
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-10-14 17:03:55 | 显示全部楼层
Super169 发表于 2015-10-14 14:13
你的程式好像是想忽略第一個數字以後的輸入.
由於你用的是 9600bps, 傳輸比較慢, 在執行 read() 之後加一個 ...

感谢你的回复,加上延时后可以解决这个问题了。非常感谢!!
回复 支持 反对

使用道具 举报

发表于 2015-10-16 19:59:20 | 显示全部楼层
Super169 发表于 2015-10-14 14:13
你的程式好像是想忽略第一個數字以後的輸入.
由於你用的是 9600bps, 傳輸比較慢, 在執行 read() 之後加一個 ...

做个记号,不懂再来看看
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|联系我们|极客工坊

GMT+8, 2026-6-15 19:32 , Processed in 0.054777 second(s), 20 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表