Arduino硬件开发入门点亮LED
原作者:陈帅华-探索技术艺术与国学之美
原文链接:http://www.shuaihuajun.com/article/arduino-led/
我现在手里有一套Ruff开发板套件和一套Arduino开发板套件。把Ruff开发套件中的所有传感器用了一个遍之后没玩够,于是开始把玩Arduino。没有对比就没有伤害真的是,虽然我真正接触Arduino时间不长,但就我自己的感觉来说,Arduino不论从程序角度还是从硬件角度上来讲都比Ruff更底层也就更加灵活,从长远来看Arduino更具学习和研究价值。所以果断弃坑Ruff,拥抱Arduino。
不过Ruff基于JavaScript语言编写控制硬件的程序确实勾起我对宏大的物联网世界的兴趣。Ruff更适合快速做出原型,但无法进入生产环境,这满足不了我对物联网世界更底层的好奇。所以再见,Ruff,你好,Arduino。
Arduino IDE
Arduino集成开发环境支持语法检查、上传程序到开发板、串口监视器等主要功能,最常使用的就是这三个功能。
一个Arduino程序需要包含一个setup
函数和一个loop
函数,loop
函数会在程序运行期间反复执行,setup
函数只会在程序开始运行时执行一次。学习就是一个不断循环重复的过程。
创意构思
不管做什么事情,在开始之前,都有在脑海里先有一个大致的轮廓,虽然在实际操作过程中会萌生新的想法,但一开始就有一个想法是好的。
因为是入门Arduino,所以目的很单纯,就是点亮一个LED灯这么简单,当成功点亮了一个LED等,可以试着点亮一排LED灯,还可以让这些LED灯拼成一个符号,不停的闪烁也蛮不错的,或者一个接着一个的点亮和熄灭。
先在脑子里画一个电路。
对于我这么个刚入门的小白来说,还能记得初中物理的电路知识,也是很值得鼓励的。如果我没有说错的话,上图中的情况叫做并联电路。之所以加一块220欧的电阻,是因为LED承受不住太强的电流。
可以把Arduino开发板看作是一块电池,我将8号引脚的模式设置为输出,可以看作是电池的正极,LED灯并联起来,汇集到Arduino的负极接地引脚。
我先脑子里有个大致的想法,然后一边摆弄电路再一边晚上想法,因为当时连接电路的时候也是不断地尝试,怎么连接线路能更美观,最终连成了这个样子,并且LED灯最终也点亮了。
我认为学习的过程应该是,理解消化前人总结的东西,真正理解之后再去记忆吸收,然后不断的模仿和重复,再创新,最后将创新总结起来并分享出去,等待那些识得你所创造的价值的人的理解。创新很难,能走到不断模仿和重复这一步已经很不简单。
组装电路
根据脑子里想象的样子,摸索着如何连接电路,过程中会不断改进和完善先前的想法。
连接好电路,接下来就是编程。使用pinMode(8, OUTPUT)
函数将8号引脚作为电平的输出端口即为正极,在loop
函数中不断变换8号引脚的电平。
编写程序
因为电路只有通和断两个状态,要么开,要么关,所以digitalWrite()
第二个参数只有中可能,要么HIGH
要么LOW
。当执行digitalWrite(8, HIGH)
的时候,通电,电路中有电压产生,所以就有运动的电流,电流从LED阳极流向阴极,LED就会发光;当执行digitalWrite(8, LOW)
的时候,断电,电路中没有电压,也就没有运动的电流,LED灯就不亮。
int led = 8;
void setup() {
// 这里写初始化配置,只执行一次:
pinMode(led, OUTPUT);
}
void loop() {
// 这里写主要代码,会重复执行:
digitalWrite(led, HIGH);
delay(500);
digitalWrite(led, LOW);
delay(500);
}
digitalWrite(8, HIGH)
执行后,电路通电,LED亮,此时执行delay(500)
函数主程序会暂停500毫秒在执行,LED就会亮500毫秒,然后digitalWrite(8, LOW)
执行,LED灭,主程序再暂停500毫秒,至此一个循环完毕,立即进入下一个循环。
我就看到面包板上的一排LED灯每1秒完成亮和灭的表演。
我还发现,如果将LED灯门串联起来,每一个LED发的光都很微弱,将LED灯并联起来每一个LED发的光一样而且很亮。
- ReflectASM-invoke,高效率java反射机制原理
- Web应用渗透测试-本地文件包含
- shiro权限控制(二):分布式架构中shiro的实现
- Groovy实现原理分析——准备工作
- HBCTF第一场2个pwn题的简单分析
- ACM竞赛之输入输出(以C与C++为例)
- 能让程序做的事情坚决不用人来做——批量修复markdownlint MD034警告
- swift demo1 tableview
- Swift Alamofire
- 给Ocelot做一个Docker 镜像
- 一步一步创建ASP.NET MVC5程序[Repository+Autofac+Automapper+SqlSugar](十一)
- 一步一步创建ASP.NET MVC5程序[Repository+Autofac+Automapper+SqlSugar](十)
- 一步一步创建ASP.NET MVC5程序[Repository+Autofac+Automapper+SqlSugar](九)
- 一步一步创建ASP.NET MVC5程序[Repository+Autofac+Automapper+SqlSugar](八)
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- [数据结构] 平衡二叉查找树 (AVL树)
- 写给前端的算法进阶指南,我是如何两个月零基础刷200题
- [Java] 在Java中优雅地进行文件IO操作
- [Java] 日期与时间的一些操作
- 一起来用python实现一下十大经典排序算法
- [数据结构] 稀疏矩阵的存储
- [Python] 关于 asyncio 与 aiohttp 协程并发的探索
- [数据结构]结构体练习之复数运算
- [数据结构] 队列的链式存储实现
- [数据结构] 两个有序线性表的合并
- Spring 简介,带你打开 Spring 的大门
- go test 测试用例那些事(二) mock
- [数据结构]链式存储: 多项式求和
- [Web] CSS 中 Display(显示) 与 Visibility(可见性)的区别与用法
- [数据结构] 二叉搜索树的CURD(增删改查)操作