极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 22455|回复: 11

arduino 串口输入文字运行一问

[复制链接]
发表于 2013-8-23 21:11:41 | 显示全部楼层 |阅读模式
依据下面 arduino 程序 , 程序写入Arduino板卡后,打开串口试运行一下,分别输入ON,OFF, LED都沒有变化。
我使用 Arduino 1.05 版,请问是何原因

  1. String str = "";
  2. int LED = 7;
  3. void setup()
  4. {
  5.   Serial.begin(9600);
  6.   pinMode(LED,OUTPUT);
  7. }

  8. void loop()
  9. {
  10.   while (Serial.available() >0)  
  11.   {
  12.     str +=char(Serial.read());
  13.     delay(2);
  14.   }
  15.   Serial.print(str);
  16.   if (str.length() >0)
  17.   {
  18.     if(str == "ON")
  19.     {
  20.       digitalWrite(LED,HIGH);
  21.     }
  22.     else if(str == "OFF")
  23.     {
  24.       digitalWrite(LED,LOW);
  25.     }
  26.     str = "";
  27.   }
  28. }
复制代码
回复

使用道具 举报

发表于 2013-8-23 22:00:14 | 显示全部楼层
int LED = 13;试试看,板子上的led
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-8-23 22:33:54 | 显示全部楼层
本帖最后由 hsiaochung 于 2013-8-23 22:35 编辑

int LED = 13; 一样不亮
回复 支持 反对

使用道具 举报

发表于 2013-8-24 01:15:45 | 显示全部楼层
hsiaochung 发表于 2013-8-23 22:33
int LED = 13; 一样不亮

str 有print出来么? 代码看着木有问题啊
回复 支持 反对

使用道具 举报

发表于 2013-8-24 01:17:05 | 显示全部楼层
hsiaochung 发表于 2013-8-23 22:33
int LED = 13; 一样不亮

你把pinMode(LED,OUTPUT);注释掉看下可以不
回复 支持 反对

使用道具 举报

发表于 2013-8-24 10:15:29 | 显示全部楼层
  digitalWrite后面加延时!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-8-24 10:49:17 | 显示全部楼层
输入 ON ,str 有print出来么ON , 但是  if(str == "ON") 无法成功进入

pinMode(LED,OUTPUT);注释掉看下可以不  => 没用

digitalWrite后面加延时! => 没用
回复 支持 反对

使用道具 举报

发表于 2013-8-24 11:26:15 | 显示全部楼层
hsiaochung 发表于 2013-8-24 10:49
输入 ON ,str 有print出来么ON , 但是  if(str == "ON") 无法成功进入

pinMode(LED,OUTPUT);注释掉看下可 ...

那就是STR!==“ON”,你把串口监视输改为ASC看看,后面是否多了什么东西!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-8-24 12:14:15 | 显示全部楼层
若是将 Serial.print(str); 改成 Serial.print(str,DEC);
输入 A ,会输出 6513
其中 65 是 A 的 ASCII 码
     13 是 new line的 ASCII 码

输入 OK ,会输出 797513
其中 79 是 O 的 ASCII 码
     75是 K的 ASCII 码
     13 是 new line的 ASCII 码
回复 支持 反对

使用道具 举报

发表于 2013-8-24 14:05:48 | 显示全部楼层
程序没错,我只改了一点,你看看波特率和其他因素
  1. String str = "";
  2. int LED = 13;
  3. void setup()
  4. {
  5.     Serial.begin(9600);
  6.     pinMode(LED, OUTPUT);
  7. }

  8. void loop()
  9. {
  10.     while (Serial.available() > 0)
  11.     {
  12.         str += char(Serial.read());
  13.         delay(2);
  14.     }

  15.     if (str.length() > 0)
  16.     {
  17.         Serial.println(str);
  18.         if(str == "ON")
  19.         {
  20.             digitalWrite(LED, HIGH);
  21.         }
  22.         else if(str == "OFF")
  23.         {
  24.             digitalWrite(LED, LOW);
  25.         }
  26.         str = "";
  27.     }
  28. }
复制代码
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-8-24 15:50:29 | 显示全部楼层
还是无解 ,各位帮帮忙解决
回复 支持 反对

使用道具 举报

发表于 2013-8-28 16:05:48 | 显示全部楼层
本帖最后由 瘦网虫 于 2013-8-28 16:21 编辑

String类不使用==来判断,用equals

if( A.equals("ON"))
{
//here comes your code
}

http://arduino.cc/en/Reference/StringEquals
回复 支持 反对

使用道具 举报

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

本版积分规则 需要先绑定手机号

Archiver|联系我们|极客工坊

GMT+8, 2024-5-6 09:53 , Processed in 0.058887 second(s), 21 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

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