Ardunio与计算机通讯最经常使用的方式就是串口通讯。在Arduino控制器上,串口都是位于Rx和Tx两个引脚,Arduino的USB口经过一个转换芯片与这两个串口引脚链接。该转换芯片会经过USB接口在计算机上虚拟出一个用于Arduino通讯的串口。当你使用串口功能的时候,就意味着你不能引用串口引脚做为输入或者输出。
要想使串口与计算机通讯,首先须要先启用串口功能,初始化Arduino的串口通讯功能,也就是:git
其中参数speed指串口通讯波特率,用于设定串口通讯速率的参数。串口通讯双方必须使用相同的波特率才能够正确通讯。
波特率是一个衡量通讯速度的参数,表示每秒传送的bit的个数。如9600波特表示每秒发送9600bit的数据,经常使用如下波特率:300,600,1200,2400,4800,9600,14400,19200,28800,38400,57600,115200。波特率高表示串口通讯速率越快。
你可使用Arduino IDE内置的串口监视器与Arduino板子通讯。点击工具栏上的串口监视器按钮(注意设置相同波特率),咱们接下来的实验就是用到它。
Arduino Mega上有三个额外的串口:Serial1,Serial2,Serial3。如有使用这三对引脚与您的我的电脑通讯,你须要一个额外的USB转串口适配器;若要用它们来与外部的TTL串口设备进行通讯,将Tx引脚链接到设备Rx引脚,将Rx引脚链接到设备的Tx引脚,将GND链接到设备的GND。缓存
接下来介绍一下串口经常使用函数。函数
那么,问题来了,串口到底有什么用?根据我本身的经验:工具
#define BTSerial Serial1 #define MyDebugSerial Serial //该条语句用于使能DEBUG输出信息,屏蔽掉就不会输出debug调试信息 #define DEBUG #ifdef DEBUG #define DBGLN(message) MyDebugSerial.println(message) #else #define DBGLN(message) #endif
当不须要调试信息时就注释掉 #define DEBUG。oop
/** * @Desc 读取数据并原样返回数据 * @author 单片机菜鸟 * @Date 2016/12/10 */ void setup() { // 初始化串口 Serial.begin(9600); //等待串口准备好 while(!Serial); } void loop() { //若是缓冲区中有数据,则读取并输出 if(Serial.available()>0){ char ch = Serial.read(); Serial.print(ch); } }
打开Arduino IDE自带的串口监视器进行调试(要设置相同波特率),当进行串口通讯时,Arduino控制器上就会看到标有RX TX的2个LED灯闪烁提示,如没有意外,应该显示以下(我本身随便写的):ui
/** * @Desc 串口控制开关灯 * @author 单片机菜鸟 * @Date 2016/12/10 * 注意:LED的一端接到5V,另一端接到输出引脚,低电平亮 */ #define LED_START 2 #define LED_END 9 void setup() { // 初始化串口 Serial.begin(9600); //等待串口准备好 while(!Serial); led_Init(); } void loop() { //若是缓冲区中有数据,则读取并输出 if(Serial.available() > 0){ char ch = Serial.read(); Serial.print(ch); //开灯 if(ch == 'a'){ led_On(); }else if(ch == 'b'){ led_Off(); } } } /** * @Desc 初始化LED */ void led_Init(){ // 将2-9号引脚设置为输出状态 for(int i=LED_START;i<=LED_END;i++){ pinMode(i,OUTPUT); digitalWrite(i,HIGH);//灭掉LED } } /** * @Desc 打开LED */ void led_On(){ //从引脚2到9引脚,点亮LED for(int i=LED_START;i<=LED_END;i++){ digitalWrite(i,LOW);//LED亮 } } /** * @Desc 关闭LED */ void led_Off(){ //从引脚2到9引脚,关闭LED for(int i=LED_START;i<=LED_END;i++){ digitalWrite(i,HIGH);//LED灭 } }
个人实验结果就是灯根据个人指令亮灭.debug
整体来讲,这节课不难,在理解串口基础上运用串口提供的一些函数就能进行基本的串口通讯开发。调试