如何从一个单片机的串口发送数据到Arduino上,然后用Arduino显示呢?
先用单片机的print函数把数据打印到串口,然后用Serial1.read把数据从串口读取回来(以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);
}
1,接收函数Serial.read()
int Serial.read(void)
如果串行数据缓冲区有数据,这个函数会读取串行数据缓冲区的第一个字节,数据读取位置移动到下一个数据缓冲区,也就是说如果继续读取的话会读取下一个数据缓冲区的第一个字节.
如果数据缓冲区没有数据,将返回-1.
2,发送函数Serial.print()
Serial.print(val)
print是一个打印函数,主要用于在上位机上显示,让数据可视化,它会将数据用字符的形式(ASCII码)逐个发送到串口. 一般不用这个函数来进行数据传输.
比如下面这段代码不会在串口助手上显示3个256,而会分别显示’2’,‘5’,'6’的ASCII码值,50,53,54(分三次发送,有三个地址不同的数据缓冲区)
void setup() {
// initialize serial ports:
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());
}
}
void loop() {
}
3,发送函数Serial.write()
写入二进制数据到串行端口。这个数据是作为一个字节或字节序列发送的。如果发送字符串则需要用到print方法。
Serial.write(str)
str为字符串的首地址,buf为一个用来存放数据的数组的首地址. 这个函数会先发送字符串,然后返回字符串的长度
Serial.write(val)
val的数据类型为unsigned char,这个函数每次只发送一个字节的数据,所以val的值在0-255之间.
Serial.write(buf, len)
buf为要发送的数组的首地址(注意数组的类型为unsigned char),len为数组的长度.
-
Serial.peek():功能类似于read(),但是我们知道当调用一次read()后,缓冲区的数据流会被读取并删除read过的数据,也就是available值会减少,但peek()不会出现类似情况,其功能类似于检测缓冲区的头部数据,反复调用peek()返回的值是一样的。
Serial.end(); //关闭通信串口
6.
Serial.available();//判断串口缓冲器是否有数据装入
7.
Serial.flush(); //清空串口缓存
8.
Serial.println(); //写入字符串数据+换行到串口
9.
Serial.SerialEvent();//read时触发的事件函数
10.
Serial.readBytes(buffer,length);//读取固定长度的二进制流
11.
Serial.println(incomingByte, DEC);//打印接到数据十进制表示的ascii码。 HEX 十六进制表示
转录于https://blog.csdn.net/nulidehahafr/article/details/80530067,用于个人学习