> 文章列表 > arduino学习笔记1

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板子的字符,并将该指令或字符赋给valif(val=='R')//判断接收到的字符是否是“R”。{  //如果接收到的是“R”字符Serial.println("Hello World!");//在串口上显示“Hello World!”字符串}
}

4.注意

Serial.read() 函数返回的确实是一个字节(Byte),它表示了串口接收缓冲区中的下一个字符。 但是,这个字节可以存储在 bytecharint 类型的变量中。

二.LED灯闪烁实验

1.源代码

int LED = 2;//对应板子上数字接口2
void setup() 
{pinMode(LED,OUTPUT);//设置数字2口为输出接口
}void loop() //函数循环体
{digitalWrite(LED,HIGH);//IO口2设置为高电平,点亮数字2口LEDdelay(1000);//延时1000MSdigitalWrite(LED,LOW);//IO口2设置为低电平,熄灭数字2口LEDdelay(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循环控制这些电路工作时间:

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

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

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!

QQ头像