1,接收函数Serial.read()intSerial.read(void)如果串行数据缓冲区有数据,这个函数会读取串行数据缓冲区的第一个字节,数据读取位置移动到下一个数据缓冲区,也就是说如果继续读取的话会读取下一个数据缓冲区的第一个字节.如果数据缓冲区没有数据,将返回-1.2,发送函数Serial.printSerial.print(val)Serial.print(val,format)Serial.print(val)首先注意:print是一个打印函数,主要用于在上位机上显示,让数据可视化,它会将数据用字符的形式(ASCII码)逐个发送到串口.一般不用这个函数来进行数据传输.比如下面这段代码不会在串口助手上显示3个256,而会分别显示'2','5','6'的ASCII码值,50,53,54(分三次发送,有三个地址不同的数据缓冲区)voidsetup(){//initializeserialports:Serial.begin(9600);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());}}voidloop(){}既然print是一个打印函数,那么自然,参数val的类型是任意的.Serial.print(val,format)将val的值转换成format指定的形式发送,可为BIN,OCT,HEX,DEC.3,发送函数Serial.writeSerial.write(str)str为字符串的首地址,buf为一个用来存放数据的数组的首地址.这个函数会先发送字符串,然后返回字符串的长度.voidsetup(){Serial.begin(9600);}voidloop(){Serial.write(45);//sendabytewiththevalue45intbytesSent=Serial.write(hello);Serial.println(bytesSent);}Serial.write(val)val的数据类型为unsignedchar,这个函数每次只发送一个字节的数据,所以val的值在0-255之间.Serial.write(buf,len)buf为要发送的数组的首地址(注意数组的类型为unsignedchar),len为数组的长度.voidsetup(){Serial.begin(9600);Serial3.begin(9600);Serial1.begin(9600);}voidloop(){unsignedchardata[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码转换成字符,然后发送.unsignedintsend_data=1234;charrx_data[4];voidsetup(){Serial.begin(9600);Serial3.begin(9600);Serial1.begin(9600);}voidloop(){Serial3.print(send_data);if(Serial1.available()0){Serial1.readBytes(rx_data,4);for(chari=0;i4;i++){Serial.print(char(rx_data));}Serial.print(\n);}delay(500);}注意:本文的串口使用的都是板上的串口,当和非Arduino板通信的时候注意使用TTL转RS232电平转接板.(所有的代码已验证)