Skip to content

Latest commit

 

History

History

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 

readme.md

Arduino教程:第二天

实验一:按钮控制LED开关

昨天制作了LED的闪烁之后,可能大家会觉得完全由程序控制的LED闪烁不够有趣,今天,我们尝试用按钮来对LED进行一些控制操作。 实验电路:

arduino-day2-1-The-experimental-circuit

实际电路:

arduino-day2-2-The-experimental-circuit

  • 元器件:按钮、导线、电阻*2、LED
  • 注意事项:有不少同学反映按键接触不良,造成无法使用,这个主要是因为按键没有完全插进面包板,所以才会有此问题。上两个按键正确插入面包板的图,大家可以参考一下,按入面包板的时候要左右用力均匀,完全压入面包板就可以了。如果往出拿呢,也很简单,可以使用面包板跳线盒中的圆头镊子,慢慢从中间槽中撬出来就可以了。

arduino-day2-3

arduino-day2-4

程序代码: 作用:当你按下按钮后1秒钟,灯会亮,然后维持5秒钟,熄灭

*/
 
void setup ()
{
  pinMode(4,INPUT);                 //将4号数字口设置为输入状态,13号数字口设置为输出状态
  pinMode(13,OUTPUT);
}
 
void loop()
{
  int n =digitalRead(4);                   //创建一个变量n,将4号数字口的状态采集出来赋值给他。
  if (n==HIGH)                             //判断n是否为高电平,如果是执行下面的语句,不是则跳过。
  {
 
    delay(1000);
    digitalWrite(13,HIGH);
    delay(5000);
    digitalWrite(13,LOW);
 
}
}

详细教程:http://www.geek-workshop.com/thread-1048-1-1.html

  • 拓展:大家可以尝试不同的按钮控制操作
  • 注意事项:按钮的连接方式
  • 课后练习:用一个按键操作两个LED,当按键按下时有一个LED亮起,另一个LED熄灭。

实验二:按钮PWM控制LED亮度

实验电路:

arduino-day2-5-The-experimental-circuit

  • 元器件:电阻3,LED,按钮2,导线
  • 从上图我们可以看到两个开关分别接到了数字接口,做输入检测,LED接到了板子上带有#号标识的数字接口上,注意只有带#号标识的接口才具备PWM输出功能。 程序代码:
  • 作用:通过两个开关来控制led的亮度
 */
 
int n=0;
void setup ()
{
  pinMode(4,INPUT);
  pinMode(6,OUTPUT);      //该端口需要选择有#号标识的数字口
  pinMode(10,INPUT);
}
 
void loop()
{
  int up =digitalRead(4);          //读取4号口的状态
  int down = digitalRead(10);      //读取10号口的状态   
  if (up==HIGH)                    //判断4号口目前是否是高电平
  { 
   n=n+5;                         //每次累加值为5
    if (n>=255) {
      n=255;
    }            //限定最大值为255   
analogWrite(6,n);               //使用PWM控制6号口输出,变量n的取值范围是0-255 
    delay (300);
  }
  if (down==HIGH)                    //减少亮度
  {
   n=n-5;
    if (n<=0) {
      n=0;
    }
 analogWrite(6,n);
    delay (300);
  }
}

扩展实验:脉冲计时

实验电路: arduino-day2-6-The-experimental-circuit

元器件:电阻、按键、导线 程序代码:

int pin = 2;  //定义引脚为D2
unsigned long duration;  //定义duration变量为无符号长整数型变量
 
void setup()
{
  Serial.begin(9600);  //串口波特率为9600
  pinMode(pin, INPUT); //设置引脚为输入模式
}
 
void loop()
{
  duration = pulseIn(pin, HIGH,60000000); //读取引脚上的高电平脉冲,最大脉冲时间间隔为60秒,并且把结果赋值给duration变量
  Serial.println(duration); //通过串口输出duration变量
}

  • 打开串口监视器后,按下按钮,就会返回每次按下松开这段时间有多长。比如第一条是196377,第二条是206748。他们对应的单位是微秒,单位换位秒以后分别是0.196377秒与0.206748秒。

arduino-day2-7

  • pulseIn()函数用来读取一个引脚的脉冲(HIGH或LOW)。例如,如果value是HIGH,pulseIn()会等待引脚变为HIGH,开始计时,再等待引脚变为LOW并停止计时。返回脉冲的长度,单位毫秒。如果在指定的时间内无脉冲函数返回。

  • 计时范围从10微秒至3分钟。(1秒=1000毫秒=1000000微秒)

语法:

pulseIn(pin, value) 
pulseIn(pin, value, timeout)