面包板
面包板是常用的实验器材,常见的面包板有两种
所谓的小型面包板,是将标准面包板的电源区删除,只保留中间的接线区,并缩小尺寸,本质没有任何不同。
面包板的基本使用原则是纵向联通、跨栏独立。即每个纵列在自己的区域内是短路的,但是纵列之间是没有任何连接的。
使用面包板可以快速搭建实验电路,成本低廉,但联通的质量较差,如果是一个成型的产品,一般会使用焊接工具。
实例4:利用面包板和Arduino点亮LED
【实验说明】
使用面包板和杜邦线,利用程序代码,点亮一个普通LED。
【材料准备】
已经通电的UNO板,470电阻一只,发光二极管一只,杜邦线两根。
【马上行动】
1.硬件连接
先验证LED灯是否完好,不用程序,直接点亮测试
确保无误后,按照下图进行连接
2.程序设计
//项目一 —— LED 闪烁
/*
描述:LED每隔一秒交替亮灭一次
*/
int ledPin = 10;
void setup() {
pinMode(ledPin, OUTPUT);
}
void loop() {
digitalWrite(ledPin,HIGH);
delay(1000);
digitalWrite(ledPin,LOW);
delay(1000);
}
输入完毕后,点击IDE的“校验”,查看输入代码是否通过编译。如果显示没有错误,单击“下载”,给Arduino下载代码。以上每一步都完成了的话,你应该可以看到面包板上的LED每隔一秒交替亮灭一次
【思考】
以上代码和之前曾经下载的“Blink”实例代码是否实现了一样的功能?
Arduino基础语法
注释:规范程序必备
第一行中有如下内容
//项目一 —— LED 闪烁
这是代码中的说明文字,可以叫做注释。是以”//”开始,这个符号 所在行之后的文字将不被编译器编译。注释在代码中是非常有用的, 它可以帮助你理解代码,如果项目 比较复杂,自然而然,代码也会随之非常的长,而此时注释就会发挥 很大作用,可以快速帮你回忆起这 段代码的功能。同样,当把你的代 码分享给别人的时候,别人也会很快理解你的代码。
第二行的内容也是注释
/*
描述:LED每隔一秒交替亮灭一次
*/
是另外一种写注释的方式,用 “/…/”,这个符号的作用是可以注释多行,这也是与上一种注释方式的区别之处。在/和/中间的所有内容都将被编译器忽略,不进行编译。 IDE将自动把注释的文字颜色变为 灰色。
变量:程序设计中的“容器”
第五行中有如下内容:
int ledPin = 10;
其中,int为变量类型;变量是用来存储数据的。这个例子,我们用的类型是int型或者说是整型,可以表示一个在-32768到32767之间 的数。变量的类型,是由你存储的内容来决定的。这里我们存储的10 这个整数。
ledPin是变量名,变量名其实就是这个变量的一个名字,代表这个值。当然,也可以不叫ledPin,按你的喜好来取),变 量名的选取最好根据变量的功能来定。ledPin这里说明,这个变量表示LED和Arduino的数字引脚10相连。 在声明的最后用一个“;”来表示这句语句的结束。分号必不可少!必须切换到英文输入法中的分号。
【拓展阅读:什么是变量】
我们做个这样的比方,变量好比一个盒子,盒子的空间用来存放东西的,想要放的东西一定要 比盒子小,那样才放的下,否则会溢出。变量也是一样,你存储的数据一定要在变量的范围内,否则会出现溢出。 之所以叫变量,是因为程序运行过程中,可以改变它的值。程序中,有时候会对变量值进行数 字计算,变量的值也会随之发生变化。在以后的项目中,我们会有深入的了解。 在给变量起名字时,还需要强调的一点。在C语言中,变量名必须以一个字母开头,之后可以 包含字母、数字、下划线。注意C语言认为大小写字母是不同的。C语言中还有一些特定的名 称也是不能使用的,比如main,if,while等。为了避免这些特定名称作为变量名,所有这些名称在程序中显示为橙色。
框架:setup()与loop()函数
在这个程序里有两个函数,一个叫做setup()函数,它的目的主要的loop()函数运行之前为程序做必要的设置。
在Arduino中程序运行时将首先调用 setup() 函数。用于初始化变量、设置针脚的输出/输入类型、配置串口等等。每次 Arduino 上电或 重启后,setup 函数只运行一次。 函数内部被花括号括起来的部分将 会被依次执行,从“ { ”开始,“ } ”结束。两个符号之间的语句都属于这个函数。
Arduino程序必须包含setup()和 loop()两个函数,否则不能正常工作。 在 setup() 函数中初始化和定义了 变量后,就开始执行 loop() 函数。
setup()函数中,只有一条语句:
pinMode(ledPin, OUTPUT);
pinMode函数是用来设置Arduino数字引脚的模式的,只用于数字引脚定义是输入(INPUT)还是输出 (OUTPUT)。在函数的括号内包含两个参数,引脚号以及引脚的模式。
此处的pinMode()就是一个函数的调用,这个函数已经在Arduino软件内部编写好了,所以我们也只需直接调用就可以了。在函数的括号内包含两个参数,就是需设定引脚号及引脚的模式,引脚号是ledPin,在我们程序的第一句话就声明过了, ledPin代表10,之后用到ledPin的 地方,都可以理解为10的代名词。 这条语句能试着理解了吗?这条语句想告诉Arduino,数字引脚10被设置为OUTPUT模式。
【思考】 如果让你设置数字引脚2为输入模式,你会吗 ?
【拓展阅读:什么是函数】
函数通常为具有一个个功能的小模块,通过这些功能的整合,就组成了我们的整段代码,一个 完整的功能实现。这些功能块也能被反复运用。这时,就体现函数的好处了。在程序运行过程 中,有些功能可能会被重复使用,所以只需程序中调用一下函数名就可以了,无需重复编写。 而setup()和loop()比较特殊,不能反复调用。 还有一个概念我们需要了解一下,就是函数的返回值,我们可以理解为是一种反馈。在函数中 是如何体现有无返回值的呢?就是,函数的声明,比如“ void ”就是函数无返回值的信号,并且后面的括号内为空,我们之后会经常用到。
loop()函数,顾名思义,该函数在程序运行过程中不断的循环,loop()函数中的每条语句都逐次进行,直到函数的最后,然后再从loop函数的第一条语句再次开始,三次、四次……一直 这样循环下去,直到关闭Arduino 或者按下重启按钮 。
void loop() {
digitalWrite(ledPin,HIGH);
delay(1000);
digitalWrite(ledPin,LOW);
delay(1000);
}
pinMode()的中被设置为OUTPUT模式时,其电压将被设置为相应的值,HIGH为5V(3.3V控制板上为3.3V),LOW为0V。我们这里就是给引脚10(ledPin)一个5V的高电平,点亮了引脚10这个LED。我们这里强调了,pinMode()被设置为OUTPUT时,才用到digitalWrite()。而delay()函数,用于延时等待,如等待1000毫秒。