Arduino的上位机通信
2016-11-16 18:24
369 查看
1,接收函数
Serial.read( )
int Serial.read(void)
如果串行数据缓冲区有数据,这个函数会读取串行数据缓冲区的第一个字节,数据读取位置移动到下一个数据缓冲区,也就是说如果继续读取的话会读取下一个数据缓冲区的第一个字节. 如果数据缓冲区没有数据,将返回-1.
2,发送函数
Serial.print
Serial.print(val)
Serial.print(val, format)
Serial.print(val)
首先注意: print是一个打印函数,主要用于在上位机上显示,让数据可视化,它会将数据用字符的形式(ASCII码)逐个发送到串口. 一般不用这个函数来进行数据传输.
比如下面这段代码不会在串口助手上显示3个256,而会分别显示’2’,’5’,’6’的ASCII码值,50,53,54(分三次发送,有三个地址不同的数据缓冲区)
既然print是一个打印函数,那么自然,参数val的类型是任意的.
Serial.print(val, format)
将val的值转换成format指定的形式发送,可为BIN,OCT,HEX,DEC.
3,发送函数 Serial.write (对比 Serial.print )
Serial.write(str)
str为字符串的首地址,
buf为一个用来存放数据的数组的首地址.
这个函数会先发送字符串,然后返回字符串的长度.
Serial.write(val)
val的数据类型为unsigned char,
这个函数每次只发送一个字节的数据,所以val的值在0-255之间.
Serial.write(buf, len)
buf为要发送的数组的首地址(注意数组的类型为unsigned char),len为数组的长度.
回到开头的问题,如何从一个单片机的串口发送数据到Arduino上,然后用Arduino显示呢? 我们可以先用单片机的print函数把数据打印到串口,然后用Serial1.readBytes(Serial的加强版,具体看官方参考手册)把数据从串口读取回来(以ASCII码的形式),然后把ASCII码转换成字符,然后发送.
注意:本文的串口使用的都是板上的串口,当和非Arduino板通信的时候注意使用TTL转RS232电平转接板.
Serial.read( )
int Serial.read(void)
如果串行数据缓冲区有数据,这个函数会读取串行数据缓冲区的第一个字节,数据读取位置移动到下一个数据缓冲区,也就是说如果继续读取的话会读取下一个数据缓冲区的第一个字节. 如果数据缓冲区没有数据,将返回-1.
2,发送函数
Serial.print
Serial.print(val)
Serial.print(val, format)
Serial.print(val)
首先注意: print是一个打印函数,主要用于在上位机上显示,让数据可视化,它会将数据用字符的形式(ASCII码)逐个发送到串口. 一般不用这个函数来进行数据传输.
比如下面这段代码不会在串口助手上显示3个256,而会分别显示’2’,’5’,’6’的ASCII码值,50,53,54(分三次发送,有三个地址不同的数据缓冲区)
void setup() { // initialize serial ports: Serial1.begin(9600); Serial3.begin(9600); Serial3.print(256); //发送函数 if (Serial1.available()>0) { Serial.println(Serial1.read()); Serial.println(Serial1.read()); Serial.println(Serial1.read()); //接收函数 } void loop() { }
既然print是一个打印函数,那么自然,参数val的类型是任意的.
Serial.print(val, format)
将val的值转换成format指定的形式发送,可为BIN,OCT,HEX,DEC.
3,发送函数 Serial.write (对比 Serial.print )
Serial.write(str)
str为字符串的首地址,
buf为一个用来存放数据的数组的首地址.
这个函数会先发送字符串,然后返回字符串的长度.
void setup(){ Serial.begin(9600); } void loop(){ Serial.write(45); // send a byte with the value 45 发送数据45 int bytesSent = Serial.write("hello"); //发送数据字符串“hello” Serial.println(bytesSent); //发送函数 }
Serial.write(val)
val的数据类型为unsigned char,
这个函数每次只发送一个字节的数据,所以val的值在0-255之间.
Serial.write(buf, len)
buf为要发送的数组的首地址(注意数组的类型为unsigned char),len为数组的长度.
void setup(){ Serial.begin(9600); Serial3.begin(9600); Serial1.begin(9600); } void loop(){ unsigned char data[2] ={11,0}; Serial3.write(data,2); //发送数据 if(Serial1.available()>0) Serial.println(Serial1.read()); //接收数据 Serial.println(Serial1.read()); }
回到开头的问题,如何从一个单片机的串口发送数据到Arduino上,然后用Arduino显示呢? 我们可以先用单片机的print函数把数据打印到串口,然后用Serial1.readBytes(Serial的加强版,具体看官方参考手册)把数据从串口读取回来(以ASCII码的形式),然后把ASCII码转换成字符,然后发送.
unsigned int send_data =1234; char rx_data[4]; void setup(){ Serial.begin(9600); //初始化数据率 Serial3.begin(9600); Serial1.begin(9600); } void loop() { Serial3.print( send_data); //接收数据 if(Serial1.available()>0) { Serial1.readBytes(rx_data,4); //接收数据 for(char i=0;i<4;i++) { Serial.print(char(rx_data)); //接收数据 } Serial.print("\n"); } delay(500); }
注意:本文的串口使用的都是板上的串口,当和非Arduino板通信的时候注意使用TTL转RS232电平转接板.
相关文章推荐
- 使用Processing与Arduino通信,玩转上位机。
- Arduino 与上位机的通信
- 怎样简单的Arduino与上位机的串口通信
- 使用C#应用程序与Arduino开发板进行通信
- 树莓派配置Arduino及其与ROS的通信
- Arduino 电平转换 升压 OUTPUT与9V/12V元件通信
- 两个Arduino之间进行串口通信出错的原因
- 智能车上位机与下位机通信的例子
- 【转】如何建立cc2430串口与上位机通信的任务
- Arduino和Android通过OTG 通信
- 【arduino】anroid的app与arduino的ch05,进行蓝牙通信遇到的问题
- Arduino UNO + esp8266 通信过程记录
- Arduino编程-串口双向通信
- 上位机与单片机的通信问题
- VS2008编写tcp客户端上位机与STM32单片机通信(结构体)
- 用VB编写的上位机与嵌入式LINUX下位机的网络通信(TCP)
- 倍福TwinCAT3上位机与PLC通信测试(ADS通信) 包含C#和C++代码
- 12.PMAC上位机-中断通信(下位机通知上位机)
- 关于Arduino 使用软pwm的方法以及与上位机的通讯(带示例)
- Arduino 双机通信 +类型转换(解决nodemcu引脚不够用咋办的问题)(此方案已经淘汰,查看最新版本)