Arduino学习笔记1

简介: Arduino学习笔记1

一.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循环控制这些电路工作时间:

fbfa78404d50885111cf0baf9d39ab2b.jpg

四.按键控制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.电路图

a323808cea405b978198807a3bec78af.jpg

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.电路图

41d144830b61a029c30daa333d21a85f.jpg

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!


相关文章
|
传感器 监控 IDE
什么是Arduino?
Arduino是一个基于易于使用的硬件和软件的开源电子平台。 Arduino开发板能够读取输入——控制传感器上的LED灯;按钮上的手指或WeChat消息转换为——输出启动电动机、监控等在线发布内容。您可以通过向板上的微控制器发送一组指令来告诉您该怎么做。为此,您可以使用Arduino编程语言(基于Wiring)和Arduino软件(IDE)(基于Processing)。
253 0
|
传感器 存储 运维
Arduino学习笔记2
Arduino学习笔记2
162 0
|
传感器 计算机视觉
Arduino学习笔记3
Arduino学习笔记3
184 0
|
传感器 存储 缓存
Arduino学习笔记4
Arduino学习笔记4
289 0
|
传感器 安全 机器人
Arduino学习笔记5
Arduino学习笔记5
229 0
|
IDE 物联网 开发工具
1.2为什么选择Arduino
1.2为什么选择Arduino
122 0
|
传感器 IDE Java
1.1什么是Arduino
1.1什么是Arduino
141 0