Arduino制作实践课程(1)闪灯和流水灯

从本周开始,我们每一周推出一片arduino的实践课程。今天我们开始最基础的两个内容。
一、闪灯blink
这个程序我们只需要一个arduino板即可,在arduino的开发环境的example中直接可以找到。打开我们就可以在开发板上看到效果。对于有c语言基础的同学很容易看懂,但对于c语言没有基础的童鞋而言这里还是需要简单的做一些说明。
在这里插入图片描述
代码如下:

// the setup function runs once when you press reset or power the board
void setup() {
  // initialize digital pin LED_BUILTIN as an output.
  pinMode(LED_BUILTIN, OUTPUT);
}

// the loop function runs over and over again forever
void loop() {
  digitalWrite(LED_BUILTIN, HIGH);   // turn the LED on (HIGH is the voltage level)
  delay(1000);                       // wait for a second
  digitalWrite(LED_BUILTIN, LOW);    // turn the LED off by making the voltage LOW
  delay(1000);                       // wait for a second
}

打开代码后,其实我们发现英文的注解已经说明得很清楚了。但这里还是详细说明以下几点:
1、arduino中的语法完完全全的c语言语法,只不过进行了函数的封装,多了些类和类库。
2、这里的setup和loop其实都是C语言中主函数中经过封装后的函数,loop调用的就是一个while无限循环。
3、对于需要调用硬件资源的嵌入式开发(这里指arduino),都必须对端口设置(输入或输出)状态。
4、pinMode就是arduino中特有的封装了的用来设置端口状态的专用函数。
5、digitalWrite是用来改变端口状态(高电平或低电平,或可理解为动态正负极的改变)的特用函数。
6、之所以有loop这样的无限循环,那是因为单片机一般都处于不停的工作状态,除非关键或重启。

我们可以看到,pinMode和digitalWrite两个函数都只有两个参数,而且一样。
第一个参数为管脚编号,这里的LED_BUILTIN=13,在arduino中已经被事先定义了,我们可以用13替代它。当然,我们也可以用我们喜欢的管脚来替代它,只不过你要在指定的管脚上接上LED。
第二个参数为状态如,LOW/HIGH,OUTPUT/INPUT,其实他们都可以用0或1来直接表示。

二、流水灯
在众多的嵌入式编程中,流水灯也几乎约定俗成的成为了和blink一样的入门必学课程。下面我们来看看它是如何编写的,说到底,它是很简单的,所用到的编码函数也和blink一样,所用到的硬件种类也几乎一样只不过数量增大了,前面是一个LED灯,流水灯则有多个LED灯,可能7个8个或者十多个几十个都是可以的。下面我们来看代码:

int LED0=1;
int LED0=2;
int LED0=3;
int LED0=4;
int LED0=5;
int LED0=6;
int LED0=7;
int LED0=8;


void setup()
    {
    //设置管及管脚的pinMode
        pinMode(LED0,OUTPUT);
	    pinMode(LED1,OUTPUT);
	    pinMode(LED2,OUTPUT);
	    pinMode(LED3,OUTPUT);
	    pinMode(LED4,OUTPUT);
	    pinMode(LED5,OUTPUT);
	    pinMode(LED6,OUTPUT);
	    pinMode(LED7,OUTPUT);

    }
    void loop()
    {
   		   digitalWrite(LED0 , LOW); 
           delay(1000);  
           digitalWrite(LED0 , HIGH);    
               
          digitalWrite(LED1 , LOW); 
          delay(1000);  
          digitalWrite(LED1 , HIGH); 
          
           digitalWrite(LED2 , LOW); 
           delay(1000);  
           digitalWrite(LED2 , HIGH); 
           
           digitalWrite(LED3 , LOW); 
           delay(1000);  
           digitalWrite(LED3 , HIGH); 
           
           digitalWrite(LED4 , LOW); 
           delay(1000);  
           digitalWrite(LED4 , HIGH); 
           
           digitalWrite(LED5 , LOW); 
           delay(1000);  
           digitalWrite(LED5 , HIGH); 
           
           digitalWrite(LED6 , LOW); 
           delay(1000);  
           digitalWrite(LED6 , HIGH); 
           
           digitalWrite(LED7 , LOW); 
           delay(1000);  
           digitalWrite(LED7 , HIGH);    
    }

下面是实物连接图,我们发现只不过是数量增加了(红色线为正极,蓝色线为信号控制线)
在这里插入图片描述
2、使用循环
上面的代码只最简单的代码,下面我们利用for循环来实现它,我们发现使用for循环后代码更简洁了,代码如下:

void setup()
    {
    //设置管及管脚的pinMode
       for(int i=0;i<8;i++)
        pinMode(i,OUTPUT);
    }
    void loop()
    {
    for(int i=0;i<8;i++)
    {
     digitalWrite(i, HIGH);   
	 delay(1000);                       
  	digitalWrite(i, LOW);  
  	delay(1000);                    
  	}
    }

3、学习使用数组
我们发现,在使用循环的时候对控制的端口我们直接使用了端口号,端口的名称用途就不那么清晰了。我们其实也可以使用数组,使端口名称依然可以清晰。代码如下:

int  LED[8];
void setup()
    {
    //设置管及管脚的pinMode
       for(int i=0;i<8;i++)
       {
       LED[i]=i;
        pinMode( LED[i],OUTPUT);
        }
    }
    void loop()
    {
    for(int i=0;i<8;i++)
    {
     digitalWrite( LED[i], HIGH);   
	 delay(1000);                       
  	digitalWrite( LED[i], LOW);  
  	delay(1000);                    
  	}
    }

上面的代码实现的是逐一亮灭,也就是在某个时刻始终只有一盏灯亮。那么我们要实现逐个亮到逐个灭代码如何实现呢?我们继续下面的学习。

4、学习使用取反操作
这个亮后不灭,然后又逐个灭,这里我们可以用到取反操作。

int  LED[8];
bool  SIGN=1;
void setup()
    {
       for(int i=0;i<8;i++)
       {
       LED[i]=i;
        pinMode( LED[i],OUTPUT);
        }
    }
    void loop()
    {
      for(int i=0;i<8;i++)
      {
       digitalWrite( LED[i], SIGN);   
       delay(1000);                                          
      }
      SIGN=!SIGN;//取反操作,意思是高电平经过取反就变成了低电平
    }

那么到这里,我们就学会了arduino及C语言编程的最基本的知识了。
我们下周继续!

发布了116 篇原创文章 · 获赞 79 · 访问量 10万+

猜你喜欢

转载自blog.csdn.net/haigear/article/details/101061911