LiuYang
获得 305 次赞
帮助过251人
建立工程的时候加上了操作系统,现在来试一试线程。 单独为每一个外设建立了一个类,程序干净利落,main.cpp中只是逻辑控制,外设的功能由类来实现。 功能很简单,就是初始化再加上开关和反转,后面提供下载。 主要来看看main.cpp中的实现 在程序开始的时候创建一个线程,然后每一秒进入一次计时器的事件函数。 led_thread函数每一秒进入一次,在函数中执行io反转,就可以实现led的闪烁了。 这样写直接调用了操作系统的计时器,而不用再去用while循环延时或使用tim,省力有准确,而且是线程,可以同时执行多个线程,便于逻辑控制。
cypress公司的东西不错,使用起来很方便,尤其是psoc creator,可以自动生成驱动代码,自己只要写逻辑控制的代码就可以了。不过呢,这次试验居然栽在了cypress官网提供的app上。 app有两个,一个是android的,一个是ios的。android的app不论在什么版本上安装直接报错,说是安装包解析错误,好在我还有iphone的手机,还是装ios的吧。iphone4安装没问题,但是4的蓝牙硬件不是4.0的,所以app提示不支持,正常。只有从4s开始才是蓝牙4.0的,所以我又在6plus上安装。安装同样没有问题,能够进入程序,也能够搜索到这个蓝牙套件,但是始终不能连接上,马上就断开,然后报超时,看来ios8.x还是有改动的,鬼知道又改了什么东西。 无奈之下只能翻出5来试一试,结果终于正常了,下面开始用手机控制开发板。 简单起见,工程建立的过程省略掉。之前的那些工程都删掉了,实在抱歉,这次特意保留了工程,在后面附件里,当作参考吧 一个蓝牙组件,这是必须的,远程连接就靠它了。还有三个控制灯的引脚,用它来显示控制状态。 先设置蓝牙的,双击后弹出设置界面 从最简单的开始,find me,不用加密之类的东西 按照图上的设置 都选好后保存。 再来设置引脚,这个就简单多了,用程序来控制所以要把hw connection的勾去掉,初始高电平 三个同样的设置,设置好后保存。 分配引脚,p2_6、p3_6、p3_7,红绿蓝三色,哪个脚对应什么颜色我也忘了,能亮就行:-) 设置好后先编译一下,自动生成代码,以便写程序。 开始写逻辑控制的代码,在main.c中。 这里主要有三部分内容, 第一部分是初始化,在main函数中调用相关的函数(参照附件工程中的代码) 第二部分是蓝牙协议栈的回调函数,用于检测连接的断开事件 第三部分是接收app发送的控制指令,数据放在了flag变量中,transed变量是标识是否有新数据传输 全部工程完成,再次编译并烧写到开发板中准备测试 打开手机上的cypressb
估计有许多人用的着吧,附件是pdf格式的,方便查阅。
折腾了三个晚上终于做出来了,采用8 * 8 的rgb点阵,运行在香蕉派上。 在加入了红点之后刷新确实有些闪,不过还能接受,程序可能还有优化的空间。 程序共用了两个线程,一个用来刷屏幕,一个控制各个点的坐标生成。 看一下视频,跑动起来比较流畅 目前还有些bug,比如程序退出时需要强制结束(线程问题),没有判断撞自身(懒的加了,不难),有兴趣可以自己加上。 程序工程下载: 里面有可执行文件,可以直接运行来测试,和操作系统无关。 还是那句话,程序用的我自己的库,需要编译请先下载:https://github.com/tjcfeng/classa20
继昨天那个帖子,老邓的 rgb点阵。 程序改了很大一部分,可以动起来了。 程序是靠每次刷新屏幕来实现的,动态控制坐标的颜色,每次刷新一整屏。 采用线程来刷新,感觉还可以,不闪,不需要什么实时的linux。 下面是工程文件。由于还在试验阶段,代码中的注释就忽略掉吧。 如果要自行编译,请先下载库文件:https://github.com/tjcfeng/classa20
老邓的rgb点阵,适合香蕉派m1、r1。 实现了指定坐标和颜色的显示,扫描每一个点并用三种颜色显示。 采用模拟spi方式控制,可以把一个点所有的数据一次性发送完毕然后再拉低片选生肖。 每次显示一个点会覆盖上一次的显示,所以做成静态的话只能不能很好的控制,如果要显示多个不连续的点只能靠刷屏来实现了。 由于功能很简单,就没有录像,后面尝试做一些复杂点的东西。 扫描到最后一个点 工程代码,实现上面的功能,可以用于测试。 压缩包内有可执行文件,可以直接运行。 pascal写的,用的我自己的库,直接寄存器控制,和操作系统无关。 如果要自行编译,请先下载库文件:https://github.com/tjcfeng/classa20