Arduino的上位机通信

本文介绍了Arduino的串口通信,包括接收和发送函数。重点讲解了Serial.read()用于读取串行数据,Serial.print()和Serial.write()的区别,其中print()用于数据显示,write()用于发送字节数据。此外,还提到了数据从单片机到Arduino的传输方法,涉及ASCII码转换和串口电平匹配问题。
摘要由CSDN通过智能技术生成

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(分三次发送,有三个地址不同的数据缓冲区)

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电平转接板.

易语言arduino通信源码.版本 2 .子程序 子程序_功能判断 .局部变量 局_收到数据, 文本型 .局部变量 局_分析标志, 文本型 .局部变量 局_分割文本, 文本型, , "0" .局部变量 返回数值, 文本型 局_收到数据 = 收到数据 收到数据 = “” 局_分析标志 = 取文本左边 (局_收到数据, 3) ' 子程序_输出显示信息 (“arduino收到返回数据: ” + 局_收到数据) .如果真 (局_分析标志 = 标志开头 + “-1”)     子程序_输出显示信息 (“arduino返回结果: 成功!”)     返回 () .如果真结束 .如果真 (局_分析标志 = 标志开头 + “-0”)     子程序_输出显示信息 (“arduino返回结果: 错误!”)     返回 () .如果真结束 .如果真 (局_分析标志 = 标志开头 + “-4”)     局_分割文本 = 分割文本 (局_收到数据, “-”, )     .如果真 (取数组成员数 (局_分割文本) = 4)         返回数值 = 局_分割文本 [3]         子程序_输出显示信息 (“arduino收到数据:数字针脚读数 ” + 返回数值)         返回 ()     .如果真结束     子程序_输出显示信息 (“arduino收到数据:数字针脚读数错误 ” + 局_收到数据)     返回 () .如果真结束 .如果真 (局_分析标志 = 标志开头 + “-6”)     局_分割文本 = 分割文本 (局_收到数据, “-”, )     .如果真 (取数组成员数 (局_分割文本) = 4)         返回数值 = 局_分割文本 [3]         子程序_输出显示信息 (“arduino收到数据:模拟针脚读数 ” + 返回数值)         返回 ()     .如果真结束     子程序_输出显示信息 (“arduino收到数据:模拟针脚读数错误 ” + 局_收到数据)     返回 () .如果真结束
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值