首页 > 编程知识 正文

两块arduino串口通讯,arduino串口通信实例

时间:2023-05-03 23:31:57 阅读:170136 作者:3547

创客教育方面,安卓可控制的屏幕有LCD1602液晶显示屏、OLED显示屏(I2C制式)等,但LCD1602只能显示英文字母和数字,OLED显示屏尺寸较小。

实际上,单片机的开发中还使用了TFT彩色液晶显示器,但这种显示器管脚数多,控制过于复杂,往往需要更先进的单片机才能进行控制,而且驱动码

但也有人想用简单的单片机控制复杂的显示器。 今天我给大家展示最适合控制Arduino的彩色液晶显示器——串口屏幕

串口是单片机中最常用的接口,编辑以前介绍过串口的概念,所以小伙伴们可以把以前的文章再翻一遍!

把串口和彩色液晶显示屏结合起来,就是我们今天要分享的串口屏了该控制方式简单方便,适用于创客教育领域!

基本原理1 .串口屏原理串口屏是由液晶屏+单片机+存储器三部分构成的

我们可以在计算机上使用上位机软件将图像和汉字的点阵存储在串口屏幕的存储器中。 然后串口屏通过串口接收指令后,可以调用内存中的图像和汉字进行显示

2 .接线方式

本文使用了Ustart-GPU 22E(II)型号的串口屏。 屏幕的右侧分别有四个针脚:5V、RX、TX、GND。 其中,RX是串口接收引脚,TX是串口发送引脚与Arduino UNO的连接方法如下所示。

Ustart-GPU Arduino UNO

5V--------5V

rx------------tx(1) )。

tx--------rx(0) )。

注意

Arduino UNO端使用的是Serial串口,因为它使用的是与下载Arduino程序时相同的串行管脚,所以在向Arduino下载程序之前,先切断TX和RX管脚,再进行prop (按重置键)。

熟悉Arduino的合作伙伴还可以选择更换软串口SoftSerial或具有多个串行端口的单片机。 例如mega2560

基本命令本文只分享了串口屏幕的基本用法和一些常用命令。 有关更高级的命令和使用方法,请参阅串行屏幕的数据手册。关注微信公众号并发送“串口屏”就可以获取数据手册和示例代码咯!

1 .清屏并给串口屏通电10秒后,串口屏接收不到串口命令自动进入演示状态,显示厂家预置的内容

但是,如果在接通电源后10秒以内向串行画面发送命令,则会自动进入串行命令状态。 也就是说,可以自由控制串行画面的显示内容

“清洁屏幕”命令为CLS(c ),其中的c表示常用颜色的快捷键索引号。 常用的有0~63的64个,演示状态下前16个中,如0提供黑色,1提供红色,2提供绿色等

串行屏幕上实际可以设置的颜色有65535种。 具体设定方法请参阅数据手册

使用Arduino发送串行命令时,以字符串形式发送。 另外,每次发送指令时,末尾都会加上“rn”。 示例代码如下所示。

void setup () serial.begin ) 115200; //设置串行端口波特率,串行屏幕默认为115200serial.print(cls(0); rn '; //发送清洁画面的命令Delay(100 ); }void loop () )2.显示文字串行屏幕上显示文字时,明确记载在哪个位置显示哪个文字的内容、将坐标指向哪个位置;

串口屏的坐标是以左上角为原点,横向为x轴,Ustart-GPU22E的x轴是从0到319,共320个像素点,纵向为y轴,从0到239,共240个像素点;

ds16(x1,y1,‘显示内容字符串’,c,limitX ); 命令是指在(x1,y1 )的地方用颜色c显示1行16点阵字符。

16个点表示1个汉字在x方向占16个像素点,在y方向占16个像素点; 显示16点英文字母时,系统用内置的8X16点英文字母显示,x方向占8像素点,y方向占16像素点;

void setup () serial.begin ) 115200; serial.print('cls ) ) 0; rn '; 延迟(100; }void loop () serial.print ) ds16 (100,50,) Happy New Year! ',2; rn '; 延迟(100; } 3.显示汉字串口屏幕上显示的汉字可以直接使用上述显示字符的命令,但由于在ArduinoIDE上输入的中文代码与串口屏幕的中文代码不一致,需要特殊处理

在保存Arduino代码的目录下创建新文本

档,文档中编写如下代码 const char hz[][32]={"新年快乐!", //0"Arduino -- 串口屏", //1}; 然后另存到同一文件夹中,另存的文件名为hz.c,编码类型要选择ANSI

注意:

const char hz[][32]实际上是声明了一个字符串数组,每个字符串不能超过32字节,如果你要显示的汉字特别长,可以修改这个数字;这个文件的目的就是为了解决使用IDE编程环境无法编辑汉字的问题,请勿使用IDE编程环境打开编辑此文件,这样操作会将此文件改写为UTF8内码的文件!在Arduino中编写代码时要先引入hz.c文件,最好使用绝对路径 #include "C:UsersDesktopgpuTestHz.c"String s;void setup() { Serial.begin(115200); Serial.print("CLS(0);rn"); delay(100);}void loop() { Serial.print("DS16(100,50,'Happy New Year!',2);rn"); //指令要拼接成一个字符串统一发送 //hz是一个字符数组,使用时要先转换成字符串 s = "DS16(50,100,'" + (String)hz[0] + "',2);rn"; Serial.print(s); s = "DS16(50,120,'" + (String)hz[1] + "',2);rn"; Serial.print(s); delay(100);} 4.画圆弧和直线

CIR(x1,y1,r,c); 指令是指在(x1,y1)处用颜色 c 画一个半径 r 的空心圆
参数(x1,y1)表示圆心点的坐标;r表示圆的半径;c表示圆的颜色序号

PL(x1,y1,x2,y2,c); 指令是指从(x1,y1)用颜色 c 画一条直线到(x2,y2)
参数(x1,y1)表示起点的坐标;(x2,y2)表示终点的坐标;c表示线的颜色序号,直线可以是横线,竖线,斜线;

void setup() { Serial.begin(115200); Serial.print("CLS(0);rn"); delay(100);}void loop() { Serial.print("PL(0,0,319,239,1);rn"); Serial.print("CIR(160,120,50,2);rn"); delay(100);} 时 钟 案 例

小编在串口屏上显示了一个钟表的表盘,并实现了指针的转动,作为最后的案例跟大家分享一下,代码逻辑比较简单,就不具体分析说明了,简单说几个注意的地方吧

1.模拟时钟

时分秒的更新可以通过额外增加时钟模块来设置真实的时间,小编在此文中只是模拟了一个时钟

视频链接:https://b23.tv/520xkd

2.指令拼接

串口发送的指令中涉及到小数的要先转换成整数,然后再把整数数字转换成字符串,最后再把要发送的指令拼接成完整的字符串发送出去

3.表盘初始化

表盘的圆圈和数字不必一直刷新,可以放在初识化中,只发送一次指令即可

4.更新时钟指针

由于表盘中的指针要实时更新,所以在新位置上显示指针时也要把原位置上的指针抹掉,小编直接用背景颜色重新画了一条线来实现的。

所以代码中用到了数组来保存指针上一次的位置坐标,由于表盘中有时分秒三个指针所以用到了二维数组
部分代码如下:

Serial.print("CIR(160,120,3,2);rn");Serial.print("CIR(160,120,115,2);rn");for (int i = 0; i < 12; i++) { startX = (int)(160 + 110 * sin(3.14 * i * 30 / 180)); startY = (int)(120 - 110 * cos(3.14 * i * 30 / 180)); endX = (int)(160 + 115 * sin(3.14 * i * 30 / 180)); endY = (int)(120 - 115 * cos(3.14 * i * 30 / 180)); as = "PL(" + (String)startX + "," + (String)startY + "," + (String)endX + "," + (String)endY + ",2);rn"; Serial.print(as); delay(10); }


版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。