一.hello word实验
1.基础结构
void setup() {
// put your setup code here, to run once:
//设置初始状态,比如引脚、波特率等
}
void loop() {
// put your main code here, to run repeatedly:
//相当于main函数,但一直循环
}
2.Serial(串行通信)
Serial.begin
:设置电脑与Arduino进行串口通讯时的数据传输速率(每秒传输字节数)。Serial.read
:从开发板接收到数据中读取一个字节的数据。Serial.print
:发送数据(不换行)。Serial.println
:发送数据(换行)。
3.源代码
void setup()
{
Serial.begin(9600);//设置波特率为9600,这里要跟软件设置相一致
}
void loop()
{
val=Serial.read();//读取PC 机发送给Arduino板子的字符,并将该指令或字符赋给val
if(val=='R')//判断接收到的字符是否是“R”。
{ //如果接收到的是“R”字符
Serial.println("Hello World!");//在串口上显示“Hello World!”字符串
}
}
4.注意
Serial.read()
函数返回的确实是一个字节(Byte),它表示了串口接收缓冲区中的下一个字符。 但是,这个字节可以存储在 byte
、char
或 int
类型的变量中。
二.LED灯闪烁实验
1.源代码
int LED = 2;//对应板子上数字接口2
void setup()
{
pinMode(LED,OUTPUT);//设置数字2口为输出接口
}
void loop() //函数循环体
{
digitalWrite(LED,HIGH);//IO口2设置为高电平,点亮数字2口LED
delay(1000);//延时1000MS
digitalWrite(LED,LOW);//IO口2设置为低电平,熄灭数字2口LED
delay(1000);//延时1000MS
}
2.pinMode
函数
通过pinMode()
函数,你可以将Arduino的引脚配置为以下三种模式:
- 输出(OUTPUT)模式
- 输入(INPUT)模式
- 输入上拉(INPUT_PULLUP)模式 (仅支持Arduino 1.0.1以后版本)
在输入上拉(INPUT_PULLUP)模式中,Arduino将开启引脚的内部上拉电阻,实现上拉输入功能。一旦将引脚设置为输入(INPUT)模式,Arduino内部上拉电阻将被禁用。
- 输出模式:当引脚设置为输出(OUTPUT)模式时,引脚为低阻抗状态。这意味着Arduino可以向其它电路元器件提供电流。
- 输入模式:当引脚设置为输入(INPUT)模式时,引脚为高阻抗状态(100兆欧)。此时该引脚可用于读取传感器信号或开关信号。
注意:当Arduino引脚设置为输入(INPUT)模式或者输入上拉(INPUT_PULLUP)模式,请勿将该引脚与负压或者高于5V的电压相连,否则可能会损坏Arduino控制器。
- 输入上拉模式:Arduino 微控制器自带内部上拉电阻。如果你需要使用该内部上拉电阻,可以通过pinMode()将引脚设置为输入上拉(INPUT_PULLUP)模式。
3.输入模式与输入上拉模式的区别
在输入模式下,当数字引脚未连接到任何信号源时,它的状态是不确定的(称为“悬浮”状态)。在这种情况下,数字引脚可能会受到电磁干扰或其他噪声,导致它产生随机的高或低电平信号。因此,在使用输入模式时,最好将数字引脚始终连接到有效的信号源(例如传感器或开关)。
在输入上拉模式下,当数字引脚未连接到任何信号源时,它的状态被强制拉高到板子的供电电压(通常为5V或3.3V)。这意味着如果数字引脚未连接到有效的信号源,则它将始终处于高电平状态,从而避免了悬浮状态的问题。
因此,输入上拉模式提供了一种简单的方式来处理数字引脚的悬浮状态,但它也有一个缺点,即消耗额外的电流。当数字引脚处于高电平状态时,它需要更多的电流才能维持这个状态,即使没有实际电路负载。因此,如果您需要处理大量的数字引脚,输入上拉模式可能会使系统的总功耗增加。
4.digitalWrite
函数
作用:将数字引脚写HIGH(高电平)或LOW(低电平)。
- 如果该引脚通过pinMode()设置为输出模式(OUTPUT),您可以通过digitalWrite()语句将该引脚设置为HIGH(5伏特)或LOW(0伏特/GND)。
- 如果该引脚通过pinMode()设置为输入模式(INPUT),当您通过digitalWrite()语句将该引脚设置为HIGH时,这与将该引脚将被设置为输入上拉(INPUT_PULLUP)模式相同。
5.delay
函数
delay()
函数可用于暂停程序运行(延时函数)。暂停时间可以由delay()函数的参数进行控制,单位是毫秒(1秒钟=1000毫秒),无返回值。
三.流水灯实验
1.源代码
int ledMark = 2 ; //第一颗LED对应板子的数字口2
int num = 5; //LED 灯的个数
void setup()
{
for (int i = ledMark; i < ledMark + num; i ++)
{
pinMode(i, OUTPUT); //设置数字口2到6为输出模式
}
}
void loop()
{
for (int i = ledMark; i < ledMark + num; i ++)
{
digitalWrite(i, LOW); //设置对应的数字口为低电平,使得小灯逐渐熄灭
delay(500); //延时500ms
}
for (int i = ledMark; i < ledMark + num; i ++)
{
digitalWrite(i, HIGH); //设置对应的数字口为高电平,使得小灯逐渐亮起
delay(500); //延时500ms
}
}
2.for循环
和C语言里面的for循环一样使用,不解释。
3.电路
相当于5个LED电路,用for循环控制这些电路工作时间:
四.按键控制LED灯实验
1.源代码
int led=2;//定义板子上数字2口
int key=4;//定义板子上数字4口
int flag=0;//定义一个变量记录按键按下后小灯是亮起还是熄灭
void setup()
{
pinMode(led,OUTPUT);//定义小灯为输出模式
pinMode(key,INPUT_PULLUP);//定义按键为输入模式,此时引脚为高电阻低电平
}
void loop()
{
if(digitalRead(key)==LOW)//判断按键是否按下,按键按下时为低电平
{
if(flag==0){//判断小灯是否亮起
flag=1; //标志小灯亮起
digitalWrite(led,LOW);//对应的LED小灯亮起
}else{
flag=0; //标志小灯亮熄灭
digitalWrite(led,HIGH);//对应的LED小灯熄灭
}
while(!digitalRead(key));//按键释放时候退出while循环,防止按键按下多次触发
}
}
2.电路图
3.digitalread
函数
-
语法:
digitalread(pin)
-
参数:pin 被读取的引脚号码
-
作用:读取数字引脚的 HIGH(高电平)或 LOW(低电平)。
digitalRead(key)==LOW
理解:key引脚原来是输入上拉模式,按键未按下时,电路断开,key引脚由于输入上拉模式强制提供供电电压,所以为高电平;而在按键按下后,电路接通,引脚为输入模式时为低电平。
while(!digitalRead(key))
理解:按键按下,!digitalRead(key)值为1,一直在while循环里,就不会因为loop循环特性而执行其他命令造成多次触发;按键松开,!digitalRead(key)值为0,退出while循环,也不满足if真值条件,使LED灯一直熄灭。
4.代码理解
if(flag==0){//判断小灯是否亮起
flag=1; //标志小灯亮起
digitalWrite(led,LOW);//对应的LED小灯亮起
}else{
flag=0; //标志小灯亮熄灭
digitalWrite(led,HIGH);//对应的LED小灯熄灭
}
注意看电路图,此时LED灯的正极接到5V电源,负极接的数字2号引脚,与我们常用的用数字引脚控制LED灯电路不同。当数字引脚为高电平时,正极负极都为5V电压,没有电势差,所以LED熄灭;当数字引脚为低电平时,正极为电源5V电压,负极为0,有电势差,所以LED灯亮。
五.抢答器实验
1.源代码
int redLed=2;//定义板子上数字口2
int yellowLed=3;//定义板子上数字口3
int greenLed=4;//定义板子上数字口4
int redKey=5;//控制红色LED的按键
int yellowKey=6;//控制黄色LED的按键
int greenKey=7;//控制绿色LED的按键
int resetKey=8;//初始化控制按键
void setup()
{
pinMode(redLed,OUTPUT);//控制对应的口为输出模式
pinMode(yellowLed,OUTPUT);//控制对应的口为输出模式
pinMode(greenLed,OUTPUT);//控制对应的口为输出模式
pinMode(redKey,INPUT_PULLUP);//控制对应的按键为输入模式
pinMode(yellowKey,INPUT_PULLUP);//控制对应的按键为输入模式
pinMode(greenKey,INPUT_PULLUP);//控制对应的按键为输入模式
pinMode(resetKey,INPUT_PULLUP);//复位按键
}
void loop()
{
if(digitalRead(redKey)==LOW)//判断控制红色LED的按键是否按下,按下小灯亮起
RED();
if(digitalRead(yellowKey)==LOW)//判断控制黄色LED的按键是否按下,按下小灯亮起
YELLOW();
if(digitalRead(greenKey)==LOW)//判断控制绿色LED的按键是否按下,按下小灯亮起
GREEN();
}
void RED()
{
while(digitalRead(resetKey)==1)//判断reset按键是否按下,如果按下将跳出当前的while循环,进行clear()函数
{
digitalWrite(redLed,HIGH);//红色LED亮起
digitalWrite(greenLed,LOW);//绿色LED熄灭
digitalWrite(yellowLed,LOW);//黄色LED熄灭
}
clear();//熄灭所有小灯
}
void YELLOW()//判断reset按键是否按下,如果按下将跳出当前的while循环,进行clear()函数
{
while(digitalRead(resetKey)==1)
{
digitalWrite(redLed,LOW);//红色LED熄灭
digitalWrite(greenLed,LOW);//绿色LED熄灭
digitalWrite(yellowLed,HIGH);//黄色LED亮起
}
clear();//熄灭所有小灯
}
void GREEN()//判断reset按键是否按下,如果按下将跳出当前的while循环,进行clear()函数
{
while(digitalRead(resetKey)==1)
{
digitalWrite(redLed,LOW);//红色LED熄灭
digitalWrite(greenLed,HIGH);//绿色LED亮起
digitalWrite(yellowLed,LOW);//黄色LED熄灭
}
clear();//熄灭所有小灯
}
void clear()
{
digitalWrite(redLed,LOW);//红色LED熄灭
digitalWrite(greenLed,LOW);//绿色LED熄灭
digitalWrite(yellowLed,LOW);//黄色LED熄灭
}
2.电路图
3.自定义函数
arduino编程本来就是C语言的一种,因此他的格式和用法都和C语言一样,但在这里毕竟setup()和loop()函数才是系统主函数,所以为了实现某个功能而定义的函数我们把它放在后面。
4.代码理解
注意这里的电路图中LED灯的连接方式,它是我们经常用的正极接数字引脚、负极接GND的常见方式,和上一个实验的连接方式不同。
复位函数:
void clear()
{
digitalWrite(redLed,LOW);//红色LED熄灭
digitalWrite(greenLed,LOW);//绿色LED熄灭
digitalWrite(yellowLed,LOW);//黄色LED熄灭
}
复位函数即所有灯熄灭,从新开始抢答。抢答器应满足三个LED灯同时只有一个能亮,其余熄灭。代码虽然有点长,但无陌生函数,耐心可以理解。
六.总结
这是初次接触硬件,而arduino是最简单的硬件,通过学习50个简单实验来了解arduino,每次学习五个进行一次总结,这是学习笔记1!