Arduino笔记1:点亮第一盏灯

2020-03-06  本文已影响0人  烂泥先生

    Hello,一起学习Arduino的同伴们。作为一个刚刚开始学习Arduino的菜鸟,有一些东西想向大家分享,目的是结识更多和我一样的业余爱好者,大家共同讨论创意,快速提高水平和生产力。进入Arduino的第一课,最经典的就是利用Arduino点亮第一盏LED灯了。从这个实例的分享中,我们将收获以下内容:

准备

目的

    用Arduino控制LED的亮灭,要求点亮1s、熄灭1s循环,并在串口监视器输出亮灭循环的次数。

电路连接

电路连接

※需要注意的几个问题

  1. LED的正负极判断


    LED
  1. LED导通的条件是电流由正极流向负极,也就是说正极电位高于负极时LED才会发光;反之则电阻很大,不能导通。由于LED导通时电阻很小,电流大,很容易烧毁,因此必须需要串联一个限流电阻,这个限流电阻的阻值可以公式R=\frac{V_{cc}-V_f}{I_f}确定,其中V_{cc}是供电电压,V_f是LED的电压降(管压降),I_f是点亮LED的电流。V_f与LED的颜色有关,红色为2.0-2.2V,黄色为1.8-2.0V,绿色3.0-3.2V,正常发光时的额定电流约为20mA。如果不想自己算也可以在网上搜计算器,输入个参数即可,或者干脆自己随便选一个,大约几百欧,只要不烧掉就可以了。我就是随便选了一个1000Ω的限流电阻。

编写程序

    Arduino的编程是以C/C++为基础的。本项目的原理是当提高2号脚位(Pin 2)的电压时,LED导通则发光;当降低Pin 2电压时,LED熄灭。控制Pin 2高低电压的持续时间即可实现控制LED亮灭时间。
    打开Arduino IDE,我们会看到两个函数,这是Arduino编程最基本的函数,任何Arduino程序都是根植于这两个函数。

void setup() {
  // put your setup code here, to run once:

}

void loop() {
  // put your main code here, to run repeatedly:

}

    在这个案例中,我们在setup()中要做的事情是定义需要的引脚Pin2为输出引脚,这样我们才可以通过控制Pin2输出的电平高低来决定LED的亮灭,同时串口的初始化操作也在此函数中完成。本案例还有一个小目标,就是要输出LED亮灭周期的次数,熟悉任何一门语言编程的人都知道需要定义一个计数变量并将其初值设为0,这个工作是否可以在setup()函数中做呢?我们一会儿再分析。本例中我们需要用到两个函数:

    loop()函数中我们要做的事情是让Pin2输出高电平点亮LED并维持1min,再让Pin2输出低电平熄灭LED并维持1min,还要让计数变量计数循环次数,最后将其值打印到串口监视器上,这里需要用到三个函数:

#define led 2
int i=0;  //循环次数计数变量

void setup() {
  pinMode(led,OUTPUT);  //定义Pin2为输出脚位
  Serial.begin(9600);   //串口初始化
}

void loop() {
  digitalWrite(led,HIGH);   //Pin2设置为高电平
  delay(1000);    //延时1min
  digitalWrite(led,LOW);   //Pin2设置为低电平
  delay(1000);    //延时1min
  i++;    //循环次数加1
  Serial.println(i);    //串口输出循环次数
}

将这个程序烧录到Arduino板上,看看是否达到了我们预期的效果,打开串口监视器,是否在输出亮灭循环的次数。这个例子相当于Arduino入门的第一课,其价值类似与各种编程语言学习中的Hello world
最后还有一个问题没有解决,如果我们把技术变量i的声明和赋初值放在setup()函数里可以吗?

#define led 2
void setup() {
  int i=0;  
  pinMode(led,OUTPUT);  
  Serial.begin(9600);  
}

或者,把i的声明放在setup()前,而赋初值放在setup()中是否可以?

#define led 2
int i;
void setup() {
  i=0;  
  pinMode(led,OUTPUT);  
  Serial.begin(9600);  
}

大家可以试一下。相信有过C/C++编程基础的小伙伴,都会脱口而出,那就在留言中回复我吧!

上一篇 下一篇

猜你喜欢

热点阅读