Arduino初探
研究了一把Ardunio,对这个东西的功能有了一点了解。
首先是它能够驱动LCD显示屏,能够和PC直接通讯。这个过程中不需要做PCB板,不需要焊接,程序也比较简单。
我没有找到汉字LCD的驱动办法,考虑到汉字的点阵问题,显然这个点阵只有存储在LCD里面,这个点阵显然不会小,于是这个LCD必然比较贵。不过在淘宝上查了一下,有个12864的LCD似乎带中文字库,比如这个,或者这个。价格60~75人民币,还不错。就是没有找到怎么连接到Ardunio上去。
LCD的显示不是那种手机的屏幕,比较粗糙,类似于机箱上的那种。所以用来显示Twitter的话,比较困难,没有中文汉字库,而且屏幕太小。
但是如果装上温控探头,显示机箱温度,以及通过PC程序在LCD上显示BT下载的进度,都是不错的应用。这些都只需要英文。其它系统状态也可以显示,比如内存情况,CPU情况,有多少封未读邮件。
Ardunio模块在澳洲可以直接买到,20多澳元;英文LCD模块要18澳元左右,12个字符×2行的那种。中文估计只能从中国弄过来。
我应该看一下LCD的说明书,然后找一个中文LCD的说明书,估计差不多,依葫芦画瓢就可以了。
PC段不用担心,只要能够连上,以我的软件的经验,调试不是问题,问题还在于硬件,是不是能够正常工作。我以前折腾单片机的时候,自己弄的PCB板,怎么都不工作,怎么改软件都没用,最后干脆精简到只有数行,以点亮一个发光二极管为目标,都没有成功。最后定位为硬件问题,但是我就是无力解决它。所以我最没有信心的就是这个东西的硬件。
先弄一个发光二极管,两块面包板,一些小的线头,一个Arduino板子,再带一个LCD板子,还有数个电阻,要不要一起把传感器买回来呢:温度的,超声波的,但是如果主板子不行,这个周边不都废掉了?
挺害怕自己搞到最后又是一场空的。不过如果做了起来,这绝对是一个全新的未涉足的领域。
值得尝试。
早上起来下载了一个Arduino软件,想着先试试软件,再花钱去买硬件。70兆的压缩包里面居然塞了一个JDK1.4。解压后200M,JDK占了40兆。启动时有点小错误,但是忽略即可。我试着把JDK目录改名,发现软件依然可以运行,说明依靠系统的JDK就够了。
尝试了一下编译,发现可以看到编译后的二进制码的大小。这样的话,最好的办法就是先把要做的东西设计出来,把代码写好,编译以后看看大小,如果足够小的话,不要买标准的Arduino,买一款比较小的就可以了。
不过我十分害怕低档型号的Arduino会不会需要连线什么,然后再次将我的军。我现在对自己不熟悉的领域多了不少谨慎。
早上把某人博客上用Arduino来连接LCD12864的文章打印了下来,坐火车的时候看了看,做火车时候特别适合看这种文档,感觉很好。三下五除二看完了又不觉得累,比在电脑前就是容易看进去。
开开小差,想到了KindleDX,如果有这种东西的话,以后就不用打印文档了,掏出来,连上USB,FireFox一键把当前网页(或者用Abduction插件保存成图片)传输过去,上班路上就可以慢慢消化了。
貌似连线很简单,程序也是现成的。但我隐约感到了以前犯的错误。那就是野心太大,调试困难。
应该把步骤写下来:
1、使用官方程序,点亮单个LED灯
2,让LED灯具有闪烁的功能
3,使用官方IDE,通过Serial输出窗口,来测试每个输入输出端口的状态
3.1 设置端口1状态为1,然后读取端口1,然后打印出来;等待2秒,设置端口1为0,读取,打印出来;不断循环
3.2 挨个测试各个端口
4,端口1作为输入,通过按钮开关连接到5V输入(是不是5V?),不停检测端口状态并打印,通过按钮开关测试
5,在4的基础上,搞一个Flash或Processing,实时显示端口1的状态。
6,在5的基础上,做一个Java(或.net,或what ever)程序,实时显示端口1的状态。
。。。。。(待完善,尽量分解,基本上到这个地步,应该问题不大了,还要分解LCD显示模块)
在购买硬件之前,先看一下LCD显示驱动的代码编译后到底有多大。
设计的原则是让Arduino只做输出功能,而把业务逻辑全部放到PC端,复杂的东西都有PC端的程序处理以后,把需要显示的信息输出到Arduino控制的LCD上。
至少传感器的部分,虽然有趣,但是可扩展性(只能通过硬件来实现,不像软件可以做的事情又容易又有无限可能性)不大,暂时可以不弄。
Arduino端可能要有一些按钮,用来告诉PC端,我要看哪方面的信息。差不多就够了。
风暴了一张图出来。
一个问题是如何或者BT下载的速度和进度,这个是非常重要的功能,但问题在于这个也是最难获取的。
另一个问题是编程语言,我可能使用Linux,那么Java是非常理想的选择,它天生就是跨平台的。但系统信息怎么获取,CPU占用率之类的可能都要通过系统函数才能获取。Flash也能跨平台,但是不能功能非常有限。
还有一个问题是如何获得自己当前的地理问题。毫无疑问,带有GPS功能的手机可以做到,包括iPhone(有人写了一篇关于iPhone地理定位的有趣的文章),但是GPS据说是最耗电的应用,除非手工开启GPS定时刷新自己的位置,还有就是昂贵的3G流量费用也会卡住这一块。因此这个应用(实时显示我在哪里)想起来虽然有趣,但是实际上基本不可用。就算技术方面解决了,隐私也是个大问题,就像那个文章写的那样,我可不想告诉小偷我出门了。
从需求的角度而不是新奇的角度,Report功能可能是最需要的,方便是关键。
报告BT下载的状态,是不是要重连,是不是应该加新的种子了。报告网络是不是又断了。报告CPU是不是过热了。报告内存是不是占用过多,需要重新启动。报告TPG流量是不是快要爆了。报告今天要做什么事情了(GTD)。报告今天(这周)花了多少钱。诸如此类。
另一方面,Arduino提供一个按键,按一下可以重连Wiimote也是相当不错的需求,只是未必好实现。
最近的研究表明是,这个东西天生就是Java的,IDE是Java的,它用的一个PC端软件Processing也是Java的,因此用Java写东西来玩简直天经地义一般。
网络上随便一搜就找到了Java如何访问Arduino的文章,实际上它使用了RXTX的Java包,这个包背后其实是通过不同平台不同库文件来实现的,支持很多平台,包括Windows和Linux。而Java和Arduino通讯的办法其实就是访问第4号串口(一个虚拟出来的串口,物理上实际上是个USB口)。
这样的话,用Java要简单过用Flash。而且调试的时候,似乎应该优先考虑Java的;晤,这样的问题就是,我怎么才能保证我向某个串口发送数据成功了呢。也许得找个模拟串口的程序了。这个倒不需要Arduino参与进来就可以玩。
文章的脚注信息由WordPress的wp-posturl插件自动生成





















最新评论