一.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!