科天会议平板会议的质量可以信赖吗

最近在淘宝的店铺上淘到了一块ILI9341嘚彩色液晶屏打算研究一下如何使用。

淘宝店铺购买屏幕之后有附源代码可供下载代码质量惨不忍睹,各种缩进不规范就不说了先拿来试一下吧。

这是淘宝店铺代码的核心部分:

setup()函数在开机时只运行一次运行完之后就开始循环运行loop()函数。

程序先在setup()函数里做了一下初始化操作Lcd_Init()接着开始连续用不同颜色清屏。

这里的LCD_Clear()就是清屏函数了原型如下:

缩进不规范就不吐槽了(;へ:),连变量名都起得乱七八糟简直惨不忍睹。稍微重写了一下函数长这样:

这个函数先使用Address_set()设置了刷新区域,然后把LCD_CS针脚电压拉低之后循环写入color。

color分两次写入┅次写入高八位(16位整形前面8个bit),一次写入低八位

看上去好像没什么问题,但loop()函数中LCD_Clear()却是直接用1到16的十六进制制写入的

写一个RGB()函数把RGB颜銫转换成1到16的十六进制制,不是更人性化吗

读了一遍源代码,结果真的找到了店家的RGB函数:

还是不规范的缩进(╯︵╰)但有总比没有好,输出红色试一下:

Arduino重启后屏幕输出了黑色!再试着排除一下故障,把RGB(255,0,0)改成RGB(0,255,0)输出绿色试试:

之后我又反复尝试了,没有一次输出正确嘚颜色莫非是这个RGB()函数有问题,淘宝店铺才用1到16的十六进制制数字

R代表红色位,G代表绿色位B代表蓝色位,每种颜色8位总共24位。计算了一下可能性:

 总共1677万种可能也就是1677万种颜色,这就是普通电脑的真彩颜色但LCD_Clear()函数是这么写的:

总的只能写入十六个bit,也就是16位這和24位对不上号啊?

再回头看了一下店铺代码的setup()函数中有这样一行白色清屏指令:

0xf800换算成十进制,是63488有没有感觉很接近一个数?

没错就是65535,单个16位无符号整数的最大储存范围

16位整型变量,顾名思义就是用16个0和1组成的变量可以储存的整数范围是-32768 ~ 32767,32768 + 32767刚好等于65535换算到②进制,就是1111,16个1

这时,真相出现了——这台机器所采用的是16位颜色,也被成为RGB565颜色模式

早期的16位计算机由于架构的设计,一次只能處理一个16位二进制数而图形显示对速度要求特别高,所以一个像素必须要用一个16进制数来表示也就是16位颜色。

如果用采用24位颜色就需要两个16进制数,也就是2Bytes速度就慢了一半。

而每个像素都是使用红黄蓝三基色来显示的所以一个16进制数必须分3份,来分别表示红、黄、蓝的数据

帖子总价串口发送和接收多个1箌16的十六进制制字节,谢谢   的细心指导

串口发送1到16的十六进制制,根据多位网友的帖子总结

接收并转换成字符显示与计算机的串口

现茬使用软串口向电流表头以1到16的十六进制制发送命令“AA 55 02 FE 01 00 ” ,并且需要能够得到1到16的十六进制制的返回值并转发给PC端这个1到16的十六进制制嘚发送和接收应该如何写呢?求教大神

设置很简单我们将使用:

引脚4 - 11:键盘输入

键盘输入垂直向下连接。将键盘上的每根电线从右到左连接到引脚4-11伺服电机直接连接到5V,接地和引脚3.在我的伺服(Tower Pro SG90)上红線为5V,接地为棕色输出引脚为黄色。检查伺服电机的文档

{‘1’, ‘2’ ‘3’, ‘A’}

{‘4’, ‘5’ ‘6’, ‘B’}

{‘7’, ‘8’ ‘9’, ‘C’}

{‘*’, ‘0’ ‘#’, ‘D’}

在这里,我们导入键盘和伺服库来帮助进行一些输入和输出处理 numkeyPresses变量跟踪已输入的条目数。当达到maxKeyPresses时这将重置为0.键盘映射设置为4x4矩阵,模仿物理键盘

这里我们使用一个名为resetAngleMultiplier的方法,我将使用马上讨论一下我们的想法是,我们希望在數学上将输入转换为可用数字而不是字符。这使我们做到了这一点

这里我们接受输入并处理它。我们将讨论如何处理它

在循环中,峩们检查非数字输入并重置numKeyPresses变量if检测进行转换的部分是:angle + = angleMultiplier *(key - 0x30)。当我们获得按键时它将作为键映射2-diminsional数组中的字符返回。 key - 0x30以1到16的十六进淛制的形式减去30以获得它的数字等价物

然后,我们必须将它乘以angleMultiplier角度乘数从100开始。因此例如,如果第一个数字输入为3则添加到角喥的数字将为300.然后将角度乘数除以10,以便下一次迭代角度乘数将为10如果输入2,则将其乘以10并相加得到320.这将一直持续到输入结束。

我写這个是可扩展的允许扩展maxKeyPresses。 C ++的最大整数值是所以使用这个程序,理论上你可以输入多达10位的输入只要实际的密钥代码加起来不超过這个数。您总是可以使用 long 来存储输入但出于我们的目的,没有必要

所以,现在我们我们(可能过于复杂)的计算只需将其传递给伺垺机构,将其定位到该特定角度这里限制为180度的移动。如果数字输入超过180则重置为180度并传递给伺服。这可能有多个应用程序无论您昰想在家中实现锁定系统,安全摄像机定位器还是您需要的任何应用程序。

我要回帖

更多关于 平板会议 的文章

 

随机推荐