Why Arduino
我是一名“地地道道”的软件工程师,为什么这么说呢,很大一部分原因是因为我的硬件知识几乎为零,换别人一句别人的建议:"你还是专心搞软件吧,OK?"。我过去的所有经验都是上层应用软件的编码开发,不过从我个人的内心来讲,其实我对硬件也一直抱有着很大的兴趣。所以,我一直不断,不断想去尝试做一些硬件相关的研究。但是,硬件知识始终欠缺太多,想要搞一些硬件开发,原谅臣,实在做不到阿。但是很幸运的是,我碰到了树莓派,还有今天最大的主角:Arduino。(想吐嘈一下,说真的,可能到现在我对这个单词还不是念得很好,这是一个意大利的单词,应该是一个人名意思,没有具体中文意思)
Arduino不需要你有太多的硬件相关知识,你只需要知道一些特定,特别基础的电路知识,这些应该在国内的高中应该都学过的。更多的是,发挥你自己的创意,特别是软件层面的一些思想。Arduino的软件层面开发上面还封装了一些高层函数,你可以轻易地去控制硬件的相关内容。所以,Arduino让我们把精力放在了创意和实现上,而不是复杂而非必要性的底层物理硬件知识。
近期,从万能的宝宝网站上购买了Arduino的这个硬件,这个硬件其实很简单,主要有三个部分:数字接口的输入输出,串口通讯接口,模拟通讯接口。有了这三个部分,我们就能够用它来控制绝大部分的硬件和相关传感器,包括什么LED灯,开关,超声波探头,温度传感器,红外线传感器,巴拉巴拉之类的东西,当然啦,最让人兴奋的是你可以不断发挥你的创意,去破解和对接一些市面上的一些商业硬件,包括XBOX、Wii游戏手柄,HHKB键盘。当然,有时候甚至可以将Arduino作为一个附属模块,配合一些相对高层次的硬件,如和数莓派配合.当然更有意思的是,你甚至可以用他来做一款智能小车,或者比较让人兴奋的无人机:
所以,假如上帝给你一块Ardiuno,你应该用他来撬动你自己内心的小宇宙。
Arduino的开发流程
讲述一些基础的安装教学,大家去看官方介绍就好了,网上也有一大堆的教程,可谓资源丰富且海量,不过这里建议(包括给我自己),学习Arduino,最好多钻钻牛角尖,看看教程,COPY一些别人的代码,烧录到Arduino上面去,然后就认为自己学会了,这是一种很LOW,且意义不太大的学习方式。我个人建议,DEMO代码应该是仅仅是参考,关键还是自己亲手去实现自己设想的逻辑,才是最好的,当然,天才们可以跳过我说的这几句废话。
回到正题,正常来说,Arduino的开发流程一般分为几个阶段:
- 创意目标设计
- 电路及逻辑设计
- 环境搭建
- 软件编码实现
- 烧录并验证测试
举一个简单例子:
1.创意目标设计
由于手头上刚好有两个LED灯,分别为红色和蓝色,反正闲着没事,那就让他交替闪烁一下呗。
2.电路及逻辑设计
没啥好设计的,就是把他们分别连接到分别连接Arduino两个引脚上,为了防止电流过大,保护我这LED灯,减少财产损失,我给其中一个加了一个电阻,另外一个连接到自带电阻的引脚上了。为了体现我装逼的专业感,我特意用一款比较简易NB的电路设计软件:fritzing,给大家设计如下电路连接示意图结构:
对应原理图:
现在是要对应的PIN脚输出不同的电平,输出模式(高电平)就亮,输入模式就暗,分别控制用来亮暗,为了体现程序猿的水平,我又给大家画了一个简单的软件执行流程图:
3.环境搭建
按照示意图,原理图,把他们实际连接起来。
4.软件编码实现
Arduino提供了一个非常方便开发者的集成环境:Arduino IDE,有了他,妈妈再也不用担心我们不会编码烧录程序了。
在这一环节,软件编码者的优越感,油然而生。三下五除二,啪啪几声,我们按照流程图实现逻辑如下,感谢Arduino设计,只需要知道setup()方法是启动设置(启动只执行一次),把所有相关的配置写在该方法中。loop()方法是循环方法,在Arduino启动的状态中,会一直循环执行loop中的逻辑。digitalWrite是控制数字引脚的方法,所以最后代码说话:
//13号引脚连接着蓝色LED灯
const int LED_PIN_BLUE = 13;
//12号引脚连接着红色LED灯
const int LED_PIN_RED=12;
//延迟时间为1000毫秒
const int DELAY_TIME_MS = 1000;
void setup() {
}
void loop() {
//输出模式,蓝色LED灯亮
digitalWrite(LED_PIN_BLUE, OUTPUT);
//输入模式,红色LED灯暗
digitalWrite(LED_PIN_RED, INPUT);
//让灯保持现状蓝灯亮,红灯暗1000毫秒
delay(DELAY_TIME_MS);
//输入模式,蓝色LED灯暗
digitalWrite(LED_PIN_BLUE, INPUT);
//输出模式,红色LED灯亮
digitalWrite(LED_PIN_RED, OUTPUT);
//让灯保持现状蓝灯暗,红灯亮1000毫秒
delay(DELAY_TIME_MS);
//继续循环该方法
}
编写完毕,可以编译验证一下看代码是否正确,如果IDE没有抛出错误,恭喜你,我们可以将自己的代码烧录到Arduino实际验证了。
5. 烧录并验证测试
在Arduino IDE选择:工具->串口,选择你需要烧录的arduino连接的串口。配置一下目标硬件平台:工具->开发板,选择你自己的硬件平台。最后,烧录上传到arduino上,烧录完毕后,我们就可以看到效果了:
(选择Linux版IDE的用户,从官网下载后,最好以sudo权限启动:sudo ./arduino
,才有权限使用串口通讯并烧录。)
Arduino进阶之路
(作者很懒,待续。。。。)