从疯教授那里订购的 Arduino UNO,终于收到了,当之无愧成为这个周末的主角。
其实大概2个月以前,手头就已经有 Netduino 了。不过,发现教材比较水,还没怎么玩,就开始介绍用 Netduino 怎么玩“云”,就比较晕,于是继续玩51。这方面,Arduino 的资源优势就显得很强大,各类资源及其丰富。虽然自己的主力编程语言一直是C#,但是最近一直在从微软阵营向Google阵营靠拢。而AVR似乎也是对51项目进行升级的不错选择,Arduino也确实已经火了很长一段时间。没关系,都不会闲着,一起学吧,反正大多数的东西都是相通的。看看自己有没有高屋建瓴的本事。
接触 Arduino,毫无疑问,在配置好开发环境以后,第一件事,依然是点LED。其意义几乎和其它语言中的“Hello, World”具有同样的意义。
然后发现 Arduino 有点蛋疼:
1. Arduino 0022 编译的速度,比 Keil 慢非常多,小小一个点灯程序,都要编译两三分钟,而这原本应该是刹那间完成的事情。道理可能是这样,因为arduino是建立arduino库上的二次编译甚至三次编译。而C玩51的话,似乎就是1次编译(C>>汇编)就好了。
2. 烧写flash就更慢了,同样也需要两三分钟,比起STC下载程序慢太多,后者只要握手成功,下载也是在瞬间完成;
3. IDE虽然集成了下载,但是快捷键就有点蛋疼,习惯了用F5、F6、F7,而 arduino 0022 却是用 Ctrl+R, Ctrl+U;
4. 语言方面,因为 Arduino 的优势在于其庞大的库文件支持,这样对于结构相对复杂的项目是比较有利的,但是这个优势在点LED的情况下体现不出来。而好好的一个IO赋值,就变成 digitalWrite(); 语句。而且,还用 HIGH/LOW。因为强大的C语言程序,其实很有意思,有各种各样巧妙、缩略的写法。都被整成这样的话,不知道到时候能不能玩什么花样。
虽然还认识 Arduino 不久,吐槽了一堆。希望自己能慢慢适应并且发现更好的方法吧,并看到Arduino尽早发挥它的优势。夸夸 Arduino 的一些好处。
1. 编程确实简单了很多,是较C语言的进一步模块化。简单到有点高手都没法显摆的程序……
2. IO口配置变得更加简单,而且输出模式的推电流的灌电流的能力都蛮不错。
教程上面说,arduino的IO推电流和灌电流的能力都达到40mA。这个是对51,尤其是Atmel传统51的巨大改进。
在经典点LED程序上稍作改良,有兴趣的朋友可以看看。这个程序,是用2个IO口,“同时”点亮正反插的2个高亮LED的程序。- int iLed_P = A0;
- int iLed_M = A1;
- void setup()
- {
- pinMode(iLed_P, OUTPUT);
- pinMode(iLed_M, OUTPUT);
- }
- void loop()
- {
- digitalWrite(iLed_P, HIGH);
- digitalWrite(iLed_M, LOW);
- delay(0x08);
- digitalWrite(iLed_P, LOW);
- digitalWrite(iLed_M, HIGH);
- delay(0x08);
- }
复制代码 说明:
我用的2个IO口,是A0和A1,实践证明,模拟口确实也可以当数字口来赋值使用。
没用限流电阻,因为
■草帽头高亮LED,哪怕直接接在5V和GND之间,都不会烧,电流大概在100mA
■如果LED阳极由设置为High的IO口提供电流,阴极接GND,实测电流<=37mA,也在IO能力范围内
■如果LED阳极由设置为High的IO口提供电流,阴极为设置为LOW的IO口灌电流,实测电流<=25mA,也在IO能力范围内
■在本实例中,其实2个LED的交替点亮的,而且快速切换,所以有效电流更小
你知道这意味着什么吗?这意味凭借标准 Arduino 板上的 17个IO口(除串口以及Pin13),可以实现直驱2个8×8点阵屏,道理和1608一样。不过那样电路比较麻烦,周末直驱单点一个8×8点阵屏给大家看看。
原文链接:http://aguegu.net/?p=222 |