风筝
发表于: 2018-8-12 11:40:37 | 显示全部楼层

通过学习如何使用Arduino语言控制结构,可以使您的Arduino程序更加灵活。

编程语言的控制结构允许您在某些条件下采取措施。 Arduino控制结构与C语言的控制结构非常相似,包括:

◾     if

◾     if...else

◾    for

◾    switch case

◾    while

◾    do... while

◾    break

◾    continue

◾    return

◾    goto


在本篇文章中,我们将讨论最常用的控制结构:

◾    for循环

◾    switch语句

◾    if-else

◾    while循环


条件语句

if语句和while语句称为条件语句(conditional statements)。它们评估特定条件,如果条件为真,则在括号{}中执行一系列语句。以下是示例:

  1. if (pin_b == LOW) { digitalWrite(ledPin, HIGH);// This tells the LED to turn on }
复制代码

if语句由单词“if”后跟括号中的条件组成。如果条件为真,则将执行后面括号之间的语句。在示例中,如果pin_b的数值为LOW,则程序将ledPin的值设置为HIGH。括号里的语句只执行一次。


while循环类似于if语句,但在该语句中,括号里的语句会反复执行,直到条件变为false。以下是示例:

  1. while (pin_0 == LOW) {

  2. digitalWrite(ledPin, HIGH);

  3. delay(100);

  4. digitalWrite(ledPin, LOW);

  5. delay(100);

  6. switchValue = digitalRead(pin_0); // This stores a new value into the variable switchValue

  7. }
复制代码

在这个例子中,程序将切换LED状态(即闪烁),直到用户按下开关,导致pin_0的数字值变为高电平。


实验1:FOR循环

在本实验中,我们演示了如何使用'for loop'来改变LED的亮度。


需要的硬件

●    Arduino Uno开发板

●    面包板

●    LED指示灯

●    220欧姆电阻

●    连接导线


接线图

arduino-analog-io-fritzing-1.png


在这个简单的电路中,LED连接到Arduino的引脚2。为了改变LED的亮度,我们改变了引脚2处脉冲宽度调制(PWM)信号输出的占空比。程序使用for循环先从暗到亮,接着从亮到暗。


代码:使用For循环改变亮度

  1. // changing brightness using for loop
  2. const int pwm = 8 ;
  3. int i ;

  4. void setup()
  5. {
  6.       pinMode(pwm,OUTPUT);
  7. }
  8. void loop()
  9. {

  10. /*
  11. FOR LOOP SYNTAX
  12. for(initialization ; condition ; increment)
  13. {
  14. CODE
  15. }   
  16. */

  17.    for(i=0 ; i < 256 ; i++ )
  18.    {
  19.        analogWrite(pwm,i)  ;                  // for loop from low to High
  20.        delay(10);
  21.    }

  22.    for(i=255 ; i > 0 ; i-- )
  23.    {
  24.        analogWrite(pwm,i)  ;                  // for loop from high to low
  25.        delay(10);
  26.    }

  27. }
复制代码

实验2:条件语句

在本实验中,我们将根据串口发送到Arduino的消息内容打开或关闭两个LED。该程序使用以下控制结构:

●    Switch语句

●    if-else if- else

●    While循环


switch语句要紧凑得多,特别是在需要检查很多条件的情况下。编译器还可以优化switch语句,从而加快代码执行速度。

while循环不同于for循环,因为它没有限制循环计数。退出while循环的唯一方法是不满足括号内的条件。


需要的硬件

●    Arduino Mega2560开发板

●    面包板

●    LED指示灯

●    220欧姆电阻器

●    连接导线


接线图

fig1.png

两个LED连接到两个Arduino输出引脚,Arduino使用条件语句打开或关闭它们。有四种不同的状态:

1.    如果串行数据== 1,则只有绿色LED指示灯亮。

2.    如果串行数据== 2,则只有黄色LED指示灯亮。

3.    如果串行数据== 3,则两个LED都将亮起。

4.    如果串行数据等于任何其他值,LED将关闭。


代码1:switch语句

  1. // Use of Switch Structure
  2.    const int green  = 8;
  3.    const int yellow = 9;
  4.    
  5.    char i;
  6.    void setup()
  7.    {
  8.         pinMode(green  , OUTPUT);                   //setting pins output
  9.         pinMode(yellow , OUTPUT);
  10.         Serial.begin(9600);
  11.    }
  12.    void loop()
  13.    {
  14.         i = Serial.read();                          // To serially send data to switch statements
  15.         Serial.println(i);
  16.         delay(50) ;
  17.       
  18.         switch(i)                                   //Typical switch structure
  19.         {
  20.               case '1':                                   //Condition for Green LED
  21.               digitalWrite(green,HIGH);
  22.               digitalWrite(yellow,LOW);
  23.               delay(350);
  24.               break;
  25.    
  26.               case '2':                                  //Condition for Yellow LED
  27.               digitalWrite(green,LOW);
  28.               digitalWrite(yellow,HIGH);
  29.               delay(350);
  30.               break;
  31.      
  32.               case '3':                                  //Condition for Both LED
  33.               digitalWrite(green,HIGH);
  34.               digitalWrite(yellow,HIGH);
  35.               delay(350);
  36.               break;
  37.      
  38.               default:                                           //Leds are off
  39.               digitalWrite(green,LOW);
  40.               digitalWrite(yellow,LOW);
  41.               break;
  42.        }     
  43.       
  44.    }
复制代码

代码2:使用If-Else语句

  1. // Use of If - else statements  
  2.    const int green  = 8;
  3.    const int yellow = 9;
  4.    
  5.    char i ;
  6.    void setup()
  7.    {
  8.         pinMode(green  , OUTPUT);                           //setting pins output
  9.         pinMode(yellow , OUTPUT);
  10.         Serial.begin(9600) ;
  11.    }
  12.    void loop()
  13.    {
  14.         i = Serial.read();                                  // To serially send data to switch statements
  15.         Serial.println(i);
  16.         delay(50);
  17.       
  18.         if(i=='1')
  19.         {
  20.              digitalWrite(green,HIGH);
  21.              digitalWrite(yellow,LOW);
  22.              delay(350);
  23.         }
  24.      
  25.         else if(i=='2')
  26.         {
  27.              digitalWrite(green,LOW);
  28.              digitalWrite(yellow,HIGH);
  29.              delay(350);
  30.         }
  31.      
  32.         else if(i=='3')
  33.         {
  34.              digitalWrite(green,HIGH);
  35.              digitalWrite(yellow,HIGH);
  36.              delay(350);
  37.         }
  38.      
  39.         else
  40.         {
  41.              digitalWrite(green,LOW) ;
  42.              digitalWrite(yellow,LOW) ;
  43.         }     
  44.    
  45.    }
复制代码

代码3:使用while循环

  1. // Use of while Loop  
  2.    const int green  = 8 ;
  3.    const int yellow = 9 ;
  4.    
  5.    char i ;
  6.    void setup()
  7.    {
  8.    pinMode(green  , OUTPUT) ;                   //setting pins output
  9.    pinMode(yellow , OUTPUT) ;
  10.    Serial.begin(9600) ;
  11.    }
  12.    
  13.    void loop()
  14.    {

  15.     i = Serial.read() ;                  // To serially send data to switch statements
  16.     Serial.println(i) ;
  17.     delay(50) ;
  18.       
  19.     digitalWrite(green,LOW) ;
  20.     digitalWrite(yellow,LOW) ;
  21.       
  22.     while(i=='1')
  23.     {
  24.     digitalWrite(green,HIGH) ;
  25.     digitalWrite(yellow,LOW) ;
  26.     i = Serial.read() ;  
  27.     Serial.println(i) ;
  28.     delay(350) ;
  29.     }
  30.      
  31.     while(i=='2')
  32.     {
  33.     digitalWrite(green,LOW) ;
  34.     digitalWrite(yellow,HIGH) ;
  35.     i = Serial.read() ;  
  36.     Serial.println(i) ;
  37.     delay(350) ;
  38.     }
  39.      
  40.     while(i=='3')
  41.    {
  42.     digitalWrite(green,HIGH) ;
  43.     digitalWrite(yellow,HIGH) ;
  44.     i = Serial.read() ;  
  45.     Serial.println(i) ;
  46.     delay(350) ;
  47.    }
  48.          
  49.    }
复制代码

跳转到指定楼层
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题 700 | 回复: 1480



手机版|

GMT+8, 2024-4-24 15:09 , Processed in 0.045752 second(s), 8 queries , Gzip On, MemCache On. Powered by Discuz! X3.5

YiBoard一板网 © 2015-2022 地址:河北省石家庄市长安区高营大街 ( 冀ICP备18020117号 )

快速回复 返回顶部 返回列表