设为首页收藏本站

arduino 单片机机器人爱好者之家

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 6692|回复: 3

Arduino入门教程—基础实验篇七 串口通信实验

[复制链接]

签到天数: 433 天

[LV.9]以坛为家II

发表于 2013-6-6 11:31:17 | 显示全部楼层 |阅读模式
本帖最后由 AllBlue 于 2013-8-15 20:03 编辑

串口通信实验

上次贴子给大家介绍了光敏电阻的使用,它根据周围环境的亮度变化电阻值也变化,系统将它转化为电压值,再将它转化为一个在1~1023范围中的值,根据这个值我们来设定LED 的开关,但这个值到底是怎么样变化的呢!

想要知道这个值是怎么变化的我们就必须让控制板将数据发送回计算机,这样我们使用串口监视器就可以看到值,下面我们就利用光敏电阻实验,来观察它的返回值!

实验电路使用光敏电阻实验电路(不知道的用户可以回看光敏电阻实验);

下面我们看下程序:

  1. /*
  2. 串口通讯
  3. 读取模拟口的值并传到计算机
  4. 程序上传后打开串口监视器
  5. */

  6. #define SENSOR 5 //定义传感器输入引脚为模拟5口

  7. int val = 0; //定义变量储存传感器的返回值

  8. void setup(){
  9. Serial.begin(9600); //打开串口并设置通信波特率为9600
  10. }
  11. void loop(){

  12. val = analogRead(SENSOR); //读取传感器接口反馈值
  13. Serial.println(val); //串口监视窗口显示传感器返回值
  14. delay(100); //每100毫秒发送一次数据
  15. }
复制代码

将程序上传到控制板后,我们打开串口监视器,可以看到返回的数据:

12 (2).jpg
串口通信语法:

Serial.begin(speed)
为与Arduino串口通信做准备,我们可以通过Arduino的上位机软件检测返回值,这里设置通信的波特率,我们通常使用9600,我们也可以使用其他的通信波特率,但最大值是115200.
例如:
Serial.begin(9600);

Serial.print(data)
Serial.print(data, encoding)
将数据通过串口传回,encoding指明数据传回类型,默认为纯文本格式。
例如:
Serial.print(75); //显示75
Serial.print(75, DEC); //同上
Serial.print(75, HEX); //4B”(75的十六进制表达)
Serial.print(75,OCT); //113”(75的八进制表达)
Serial.print(75, BIN); //1001011”(75的二进制表达)
Serial.print(75, BYTE); //K”(KASCII码值是75

Serial.println(data)
Serial.println(data, encoding)
Serial.print(data)相同,只是在传回数据的末尾多加一个换行符(\r\n)。换行符的意义就等于你在输入一些文字后敲入的回车键。
例如:
Serial.println(75); //显示“75\r\n
Serial.println(75, DEC); //同上
Serial.println(75, HEX); //4B\r\n
Serial.println(75,OCT); //113\r\n
Serial.println(75, BIN); //1001011\r\n
Serial.println(75, BYTE); //K\r\n

int Serial.available()
传回一个数值,告诉上位机有多少字节没有被read()函数读取,若Serial.available()返回值是0,则代表串行数据都已被read()读取。
例如:
int count = Serial.available();

int Serial.read()
读取一个字节的串行数据
例如:
int data = Serial.read();

Serial.flush()
因为数据传输的速度要大于Arduino程序处理速度,所以Arduino会将数据先存放在缓存区中。如果有需要,我们可以利用Serial.flush()函数来清空缓存区,以确保缓存区的数据是最新的。
例如:
Serial.flush();

本帖被以下淘专辑推荐:

该用户从未签到

发表于 2014-1-6 12:25:49 | 显示全部楼层
#include <SPI.h>
int ppmin=2;
unsigned time=0;
unsigned bfb=0;
unsigned data=0;
void setup()
{
  Serial.begin(115200);
  pinMode(2,INPUT);
  attachInterrupt(ppmin, jiema, RISING);


  
}
void loop()
{
  interrupts();
  detachInterrupt(1);


}
void jiema()
{
  unsigned char val=0;
  time=pulseIn(2,HIGH);
  bfb=time/1000*1024;
  data=bfb/4;//256 8weijingdu
  Serial.println(data,DEC);
  val=val++;
  time=0;
  bfb=0;
  data=0;
  if(val>8)
{
    detachInterrupt(0);
    delay(400);
    detachInterrupt(1);
  }
}


我这个是利用上升沿来触发外部中断来解码PPM信号的并由串口发送的程序,有问题能帮忙看看嘛
回复 支持 反对

使用道具 举报

签到天数: 250 天

[LV.8]以坛为家I

发表于 2014-8-27 00:50:24 | 显示全部楼层
多謝樓主分享
回复 支持 反对

使用道具 举报

该用户从未签到

发表于 2016-8-24 20:05:12 | 显示全部楼层
感谢楼主分享,
回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|Archiver|手机版|小黑屋|联系我们|YFRobot ( 苏ICP备13017135  

GMT+8, 2017-4-28 19:55 , Processed in 0.401179 second(s), 31 queries .

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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