极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 12421|回复: 2

关于串口接收格式化数据的问题

[复制链接]
发表于 2016-1-9 17:29:06 | 显示全部楼层 |阅读模式
本帖最后由 lqh 于 2016-1-9 17:38 编辑

纵观论坛,讲用Arduino发送数据的多,用Arduino接收数据的少,可供初学者学习接收格式化数据的资料就更少。但在实际工作中,很多初学者经常会用Arduino接收格式化数据,以便控制各类终端。比如,用电脑串口发送一个数据去控制灯的亮度等等,看起来好象很简单,其实操作起来并不容易,这是因为串口传输的数据都是ASCII码,初学者很难掌握。本着共同学习、共同提高的宗旨,本人把今天学习理解的拿出来,供初学者参考。

int value=0;//控制灯亮度的值,应在0-255之间;
void setup()
{
  Serial.begin(9600);
}

void loop() {
  if(Serial.available()){
    char ch=Serial.read();   //接收到一个字节,且为ASCII,切记
     if(isDigit(ch)){        //判断接收的字节是否为0-9的数字
      value=value*10+(ch-'0');//如果ch代表字符1,因为它的ASCII为49,0的ASCII为48,所以49-48正好等于1,即它本身;
     }                        //这样就把ASCII码转换过来了;
     else if(ch==70){         //"F"的ASCII为70,作为输入数据的结束
      Serial.println(value);
      }
      else if(ch==69){       //"E"的ASCII为69,作为输入数据的开始
      value=0;
      }
  }
analogWrite(13,value);//将输入的数据控制引脚的指示灯亮度
}

好了,在电脑中输入“E123F”、“E12F”、“E3F”等,看看LED灯有什么变化。



回复

使用道具 举报

发表于 2016-1-11 11:28:54 | 显示全部楼层
//  analogWrite(13,value);//将输入的数据控制引脚的指示灯亮度 //

有兩點意見:
1) 要小心輸出腳,D13 不是每一種板也可以作 analgoWrite 的
2) 此句放在以下位置感覺會比較好
     else if(ch==70){         //"F"的ASCII为70,作为输入数据的结束
      Serial.println(value);
      analogWrite(9,value);//将输入的数据控制引脚的指示灯亮度
      }

回复 支持 反对

使用道具 举报

发表于 2016-1-11 21:26:14 | 显示全部楼层
学习一下~
一直没有整理清楚这个方面的事情
回复 支持 反对

使用道具 举报

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

本版积分规则

Archiver|联系我们|极客工坊

GMT+8, 2026-6-15 02:26 , Processed in 0.034372 second(s), 19 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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