定制网站平台的安全设计,办公室设计图片,哈尔滨模版建站公司推荐,wordpress文章图片目录
一、硬件介绍
1、控制器
2、TTL转USB串口
二、软件程序
1、单片机发送字符串
#xff08;1#xff09;每个串口对应的类名称介绍
#xff08;2#xff09;发送功能
#xff08;3#xff09;代码
#xff08;4#xff09;测试
2、单片机接收字符串
1每个串口对应的类名称介绍
2发送功能
3代码
4测试
2、单片机接收字符串
1使用串口1控制IO输出
2代码
3测试
3、串口中断事件
1串口中断介绍
2串口0、串口1中断测试
3串口中断设置接收标识符、结束标识符 一、硬件介绍
1、控制器
Arduino MEGA开发板。包含4个串口串口0即TX0、RX0出厂默认和USB连接使用。串口1、串口2、串口3用户可以实际使用。 2、TTL转USB串口
Arduino中的串口是TTL电平需要使用转接线转接以后才可以通信。
(TTL电平高低电平0-5V。0V为05V是1。
232串口电平全双工(逻辑1-15V--5V 逻辑03V--15V))
USB/TTL转接线使用的时候需要安装驱动程序。驱动程序下载链接或者打包的工程中包含。PL2303TA最新驱动.zip_免费高速下载|百度网盘-分享无限制 二、软件程序
1、单片机发送字符串
1每个串口对应的类名称介绍
串口0的类是Serial
串口1的类是Serial1
串口1的类是Serial2
串口1的类是Serial3。
2发送功能
使用串口0、串口1分别和串口调试助手链接测试一秒钟给串口调试助手发送一次字符串数据。
3代码
const long _1000msTime 1000; // 1000 milli seconds
unsigned long _1000msLastTime;
const long _100msTime 100; // 100 milli seconds
unsigned long _100msLastTime;
const long _10msTime 10; // 10 milli seconds
unsigned long _10msLastTime;void setup()
{//串口开启-波特率9600Serial.begin(9600); //串口0USB口连电脑Serial1.begin(9600); //串口1Serial2.begin(9600); //串口2Serial3.begin(9600); //串口3}void loop()
{TimeProc();}void TimeProc()
{//1000ms执行一次if ((millis() - _1000msLastTime) _1000msTime){_1000msLastTime millis( ); ////Serial.print(Distance is: ); //Serial.print(currDistance);Serial.println(USB Serial Send.);Serial1.println(Serial1 Send.);}//100ms执行一次if ((millis() - _100msLastTime) _100msTime){_100msLastTime millis( ); //}//10ms执行一次if ((millis() - _10msLastTime) _10msTime){_10msLastTime millis( ); //}}
4测试 2、单片机接收字符串
1使用串口1控制IO输出
PC端使用串口调试助手给单片机串口1发送字符串单片机根据串口1接收不同的字符串对IO口进行高低电平控制。
串口调试助手给单片机串口1发送字符串。
①发送a、IO输出高电平。单片机串口0给串口调试助手发送单片机串口1接收到的字符串。
②发送‘b’、IO输出低电平。单片机串口0给串口调试助手发送单片机串口1接收到的字符串。
2代码
const long _1000msTime 1000; // 1000 milli seconds
unsigned long _1000msLastTime;
const long _100msTime 100; // 100 milli seconds
unsigned long _100msLastTime;
const long _10msTime 10; // 10 milli seconds
unsigned long _10msLastTime;const int redLed22;void setup()
{//设置IO口为输出模式pinMode(redLed,OUTPUT);//IO口初始输出低电平。Led灯正极接IO口即输出高电平点亮。digitalWrite(redLed,LOW);//串口开启-波特率9600Serial.begin(9600); //串口0USB口连电脑Serial1.begin(9600); //串口1Serial2.begin(9600); //串口2Serial3.begin(9600); //串口3}void loop()
{TimeProc();if(Serial1.available()0){char chSerial1.read();Serial.print(Serial Recive: );Serial.print(ch);Serial.println( ;);if(cha){digitalWrite(redLed,HIGH);Serial.println(Turn On Success);}if(chb){digitalWrite(redLed,LOW); Serial.println(Turn Off Success);}}}void TimeProc()
{//1000ms执行一次if ((millis() - _1000msLastTime) _1000msTime){_1000msLastTime millis( ); //串口发送//Serial.println(USB Serial Send.);//Serial1.println(Serial1 Send.);}//100ms执行一次if ((millis() - _100msLastTime) _100msTime){_100msLastTime millis( ); //}//10ms执行一次if ((millis() - _10msLastTime) _10msTime){_10msLastTime millis( ); //}}
3测试
IO输出打开 IO输出关闭 3、串口中断事件
1串口中断介绍
当串口接收缓冲区有数据时自动触发该事件。串口0中断事件serialEvent()。
Arduino MEGA开发板
串口1中断事件serialEvent1()。
串口2中断事件serialEvent2()。
串口3中断事件serialEvent3()。
2串口0、串口1中断测试
实现功能
给串口0或者串口1发送字符串串口0或者串口1接收完成、将接收的字符串再通过串口0发送出去。
接收结束使用标识符‘#’
代码 String inputString ; //保存串口接收的字符串
bool stringComplete false; //串口接收完成标志位void setup()
{Serial.begin(9600);Serial1.begin(9600);inputString.reserve(200);
}void loop()
{if (stringComplete) {Serial.println(inputString); //串口0发送出去 //清空接收字符串inputString ;stringComplete false;}
}//串口0中断事件
void serialEvent()
{while (Serial.available()) {char inChar (char)Serial.read();inputString inChar;if (inChar #) //结束符{stringComplete true;}}
}//串口1中断事件
void serialEvent1()
{while (Serial1.available()) {char inChar (char)Serial1.read();inputString inChar;if (inChar #) //结束符{stringComplete true;}}
}3串口中断设置接收标识符、结束标识符
①发送的字符串第一个字符为$、结束字符为#才可以正常的发送和接收。
②串口0和串口1接收到的数据都通过串口1再发送出去并且反馈发送接收的字符数量。
举例说明
串口调试助手发送字符串$1,0,0,0,0,0,0,0,0,0#
代码
const long _1000msTime 1000; // 1000 milli seconds
unsigned long _1000msLastTime;
const long _100msTime 100; // 100 milli seconds
unsigned long _100msLastTime;
const long _10msTime 10; // 10 milli seconds
unsigned long _10msLastTime;const int redLed22;int num1 0; // 接收的字符数
int incomingByte 0; // 接收到的 data byte
String inputString ; // 用来储存接收到的内容
boolean startBit false; // 协议开始标志
bool recvComplete false; // 接收完成标志void setup()
{//设置IO口为输出模式pinMode(redLed,OUTPUT);//IO口初始输出低电平。Led灯正极接IO口即输出高电平点亮。digitalWrite(redLed,LOW);//串口开启-波特率9600Serial.begin(9600); //串口0USB口连电脑Serial1.begin(9600); //串口1Serial2.begin(9600); //串口2Serial3.begin(9600); //串口3}void loop()
{TimeProc();if(recvComplete){recvCompletefalse;Serial1.println(inputString);Serial1.print(Char count is:);Serial1.println(num1);num1 0;startBit false;inputString ;}}void TimeProc()
{//1000ms执行一次if ((millis() - _1000msLastTime) _1000msTime){_1000msLastTime millis( ); ////Serial.println(USB Serial Send.);//Serial1.println(Serial1 Send.);}//100ms执行一次if ((millis() - _100msLastTime) _100msTime){_100msLastTime millis( ); //}//10ms执行一次if ((millis() - _10msLastTime) _10msTime){_10msLastTime millis( ); //}}//上位机发送举例$1,0,0,0,0,0,0,0,0,0#//串口0中断
void serialEvent()
{while (Serial.available()){incomingByte Serial.read(); //一个字节一个字节地读下一句是读到的放入字符串数组中组成一个完成的数据包if(incomingByte $) //$是开始读取的标识符 {num1 0;startBit true;}if(startBit true){num1;inputString (char) incomingByte; // 全双工串口可以不用在下面加延时半双工则要加的//}if(startBit true incomingByte #) //#是读取结束的标识符 {recvComplete true;startBit false;} }}//串口1中断
void serialEvent1()
{while (Serial1.available()){incomingByte Serial1.read(); //一个字节一个字节地读下一句是读到的放入字符串数组中组成一个完成的数据包if(incomingByte $) //$是开始读取的标识符 {num1 0;startBit true;}if(startBit true){num1;inputString (char) incomingByte; // 全双工串口可以不用在下面加延时半双工则要加的//}if(startBit true incomingByte #) //#是读取结束的标识符 {recvComplete true;startBit false;} }}
测试