标签:
一直听到许多做物联网、智能家居的控制器使用的是Arduino,从师兄那里拿到了一块Arduino开发板,进行了一下午的学习,感觉这个适合小孩子们玩:)
废话少说,总结一下,便于以后可能会用得到。我主要参考了百度文库的一个60+页的《arduino从零开始学》和一些技术论坛如极客工坊吧。
由于之前学习过若干块开发板,这里主要探究他们的异同,移植问题。
个人总结为三部分:
一、arduino IDE环境的搭建
由于无法进入官网下载,这里选择了1.6.11免安装版,并且是中文环境,非常方便
(2)驱动的安装
这种老版本的CH340一般在电脑上无法识别,通过设备管理器里选择手动安装,选中arduino 安装路径里的drivers文件夹即可
(3)如何编译
由于开发板主要通过串口进行程序的下载,所以需要选择开发板型号以及串口端口
之后,点击编译按钮、上传按钮实现程序的检错和下载。
二、基本语法的学习
(1)我们会发现arduino 主体程序包括两部分: setup()和 loop()
setup()只能初始化一次, 主要放置一些初始化函数如端口配置等
loop()里所以的语句会被反复执行需要小心。
(2)变量类型,全局/局部变量,数学运算符,关系运算符,逻辑运算符,位操作
三大控制结构,数组,函数的学习
(3)一些 arduino 内置函数的学习
比如串口配置打印显示,端口输入输出及赋值,pwm值的修改等
关于这部分,自己将学习的函数写成一个个小程序, 每个小程序设计不同知识点的学习,大家可以从中学习。附在后面。
三、以ardunio为核心控制器,完成一系列扩充功能。
由于笔者手上只有一块开发板,没有多余的面包板等配件,故该部分无法一一验证,不过总结一遍吧。
(1)首先要根据原理图观测开发板引脚的功能。
例如,在0-13引脚中:13引脚与LED相连,0/1引脚分别实现RX/TX功能,3/5/6/9/10/11/12/13端口输出电压值可变,即可实现pwm功能。
在A0-A5中,实现AD模拟输入的功能,能够将0-5v电压分成0-1023份,利用逐次逼近实现采样
数字电源,模拟电源等。
固定按键,或者那些端口可实现输入功能,进而扩展为上拉电阻式的按键设计电路
(2)功能的设计
显示类:数码管数字显示,LCD1602显示,OLED显示,8*8点阵显示...
按键类:外接独立按键,矩阵按键等
声控类:蜂鸣器,红外侦测等
定时中断类:时钟计数,脉冲计数,中断进行侦测,AD采样等
输出控制类:步进电机,舵机控制;LED亮度变化,直流电机等
通信类:SPI通信,uart通信,红外通信,外接网络端口通信
数据存储类:编码器译码器模块,SD模块等
....
附代码:
/******************* *功能:显示串口打印信息 *作者:王茂春 *知识点:了解,入门,使用串口波特率设置函数、串口打印函数 *********************/ void setup() { // put your setup code here, to run once: Serial.begin(9600); } void loop() { // put your main code here, to run repeatedly: Serial.println("wanghello"); delay(1000); } /******************* *功能:13引脚闪烁灯,时间间隔1000ms *作者:王茂春 *知识点:引脚输出配置,高低电平配置 *********************/ void setup() { // put your setup code here, to run once: pinMode(13,OUTPUT); //将13引脚设置为输出 } void loop() { // put your main code here, to run repeatedly: digitalWrite(13,HIGH); // //将13引脚高电平 delay(1000); digitalWrite(13,LOW); // //将13引脚低电平 delay(1000); } /******************* *功能:13引脚闪烁灯,时间间隔变化:1000-5000ms *作者:王茂春 *知识点:引脚输出配置,高低电平配置 * 全局变量使用,if-else语句使用,操作符+=、++等的使用 *********************/ int ledPin = 13; //使用全局变量表明引脚为13 int delayTime = 1000; //延时100ms void setup() { // put your setup code here, to run once: pinMode(ledPin,OUTPUT); //将13引脚设置为输出 } void loop() { // put your main code here, to run repeatedly: digitalWrite(ledPin,HIGH); // //将13引脚高电平 delay(delayTime); digitalWrite(ledPin,LOW); // //将13引脚低电平 delay(delayTime); delayTime+=100; if(delayTime ==5000) { delayTime = 1000; //恢复基准 } } /******************* *功能:全局数组数值打印 *作者:王茂春 *知识点:全局数组的初始化学习 * while循环的使用 *********************/ int arr[10]={1,2,3,4,5,6,7,8,9}; //全局数组声明并初始化 int count=0; //定义计数器变量并初始化为0 void setup() { // put your setup code here, to run once: Serial.begin(9600); } void loop() { // put your main code here, to run repeatedly: while(count < 10) { Serial.println(arr[count]); count++; } } /******************* *功能:全局数组数值打印 *作者:王茂春 *知识点:全局数组的初始化学习 * for循环的使用.注意该程序有一个错误: * 由于将计数器count初始化放置在for循环中,外加loop的影响导致该程序一直循环,容易死机 *********************/ int arr[10]={1,2,3,4,5,6,7,8,9}; //全局数组声明并初始化 void setup() { // put your setup code here, to run once: Serial.begin(9600); } void loop() { // put your main code here, to run repeatedly: for(int count=0;count < 10;count++ ) { Serial.println(arr[count]); } } /******************* *功能:max函数的调用 *作者:王茂春 *知识点:自定义函数的使用(无需声明) * 考虑形参一致问题,考虑到本次实验无需循环,代码放在setup里 *********************/ void setup() { // put your setup code here, to run once: Serial.begin(9600); int a=10,b=20; int value=maxValue(a,b); Serial.println(value); } void loop() { // put your main code here, to run repeatedly: } int maxValue(int x,int y) { return x > y ? x:y; }
今天就学习这么多了,希望和大家多多交流,推荐的博客有:
http://www.cnblogs.com/rayray/category/457863.html
http://www.cnblogs.com/shuqingstudy/
标签:
原文地址:http://www.cnblogs.com/shuqingstudy/p/5862375.html