“第二十二课--Microduino 串口调试/zh”的版本间的差异

来自Microduino Wikipedia
跳转至: 导航搜索
设备
串口控制led灯
第54行: 第54行:
 
*程序
 
*程序
 
<source lang="cpp">
 
<source lang="cpp">
String comdata = "";//定义一个字符串类型变量
+
#define led_pin 13
int led=LOW;
+
 
 +
String comdata = ""; //显示的字符串
 +
String onedata = ""; //判断clean缓存字符串
 +
 
 
void setup()
 
void setup()
{
+
{
   Serial.begin(115200);//配置波特率
+
   Serial.begin(9600);
   pinMode(13, OUTPUT);
+
   pinMode(led_pin,OUTPUT);
 +
  while(!Serial)
 +
  {
 +
  }
 
}
 
}
 +
 
void loop()
 
void loop()
 
{
 
{
   while (Serial.available() > 0)  //有串口缓冲数据就一直循环
+
 
   {      
+
   while (Serial.available() > 0)  //判断串口是否有输入
     comdata += char(Serial.read());   //读取数据,每次只读取一个字节
+
   {
     delay(2);//串口缓冲
+
     comdata = "";                    //清空显示字符
 +
    onedata += char(Serial.read()); //读取字符
 +
    comdata += onedata;              //同上
 +
     delay(2);                         //等待串口缓存
 
   }
 
   }
   if (comdata=="on")
+
 
     led = HIGH;
+
   if(comdata=="on")
 +
     digitalWrite(led_pin,HIGH);
 
   else if(comdata=="off")
 
   else if(comdata=="off")
     led = LOW;
+
     digitalWrite(led_pin,LOW);
  digitalWrite(13,led);
 
  if (comdata.length() > 0)
 
  {
 
    Serial.print(comdata);  //打印串口数据 
 
    Serial.print("  led:");  //打印串口数据
 
    Serial.println(led); //打印led状态
 
  
    comdata = "";//清空数据
+
  onedata = ""; //缓存字符串清空
   }
+
   Serial.println(comdata);
 +
  delay(100);
 
}
 
}
 +
 
</source>
 
</source>
 +
 
===结果===
 
===结果===
 
*实物监视:
 
*实物监视:

2014年11月17日 (一) 09:51的版本

Language English

目的

以往程序串口都用来监视,实际上是将数据写出,今天讲讲如何读取串口接收的数据,并进行控制。

设备

实验一

串口接收字符串

只要Microduino core和Microduino Ft232RL,不需要任何外置元件。

  • 程序
String comdata = "";//定义一个字符串类型变量
void setup()
{
 Serial.begin(115200);//配置波特率
}
void loop()
{
    while (Serial.available() > 0)  //有串口缓冲数据就一直循环
    {        
comdata += char(Serial.read());   //读取数据,每次只读取一个字节
     delay(2);//串口缓冲
    }
    if (comdata.length() > 0)
    {
Serial.println(comdata);  //打印串口数据   
   comdata = "";//清空数据
    }
}

结果

在串口监视界面填写发送数据框写入任意数据,点击发送(或按回车),在接收数据显示框就显示发送的数据文字。

Lesson22-send.jpg
Lesson22-receive.jpg

注意:

  • String类型变量,很简单的实现了字符转换成字符串,并且可直接将字符串输出或赋值。
  • while (Serial.available() > 0)语句while不能改成if,否则只能读取一个字符。
  • delay(2)语句不删除,否则串口缓冲区不够时间接受数据。
  • comdata = ""语句不能删除,否则串口数据将一直叠加。
  • comdata定义是字符串,也是一个数组,可以用comdata[0],comdata[1]、、、comdata[n]将每个数据引用。

实验二

串口控制led灯

  • 程序
#define led_pin 13

String comdata = "";  //显示的字符串
String onedata = "";  //判断clean缓存字符串

void setup()
{  
  Serial.begin(9600);
  pinMode(led_pin,OUTPUT);
  while(!Serial)
  {
  }
}

void loop()
{

  while (Serial.available() > 0)  //判断串口是否有输入
  {
    comdata = "";                     //清空显示字符
    onedata += char(Serial.read()); //读取字符
    comdata += onedata;               //同上
    delay(2);                         //等待串口缓存
  }

  if(comdata=="on")
    digitalWrite(led_pin,HIGH);
  else if(comdata=="off")
    digitalWrite(led_pin,LOW);

  onedata = "";  //缓存字符串清空
  Serial.println(comdata);
  delay(100);
}

结果

  • 实物监视:

D13引脚接一个led灯。在串口监视界面填写发送数据框写入“on”,点击发送(或按回车),led点亮;写入“off”,点击发送(或按回车),led熄灭;其他情况下led都维持前一个状态。

  • 串口界面监视

在串口监视界面填写发送数据框写入“on”,点击发送(或按回车),返回“on led:1”;写入“off”,点击发送(或按回车),返回“off led:0”;其他情况下返回发送的字符串并且led值都维持前一个状态。

Lesson22-command.jpg

串口接收字符串详细参考:http://www.geek-workshop.com/thread-158-1-1.html

串口接收字符串转化成数组详细参考:http://www.geek-workshop.com/thread-260-1-1.html

视频