|
通过学习如何使用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)。它们评估特定条件,如果条件为真,则在括号{}中执行一系列语句。以下是示例: - if (pin_b == LOW) { digitalWrite(ledPin, HIGH);// This tells the LED to turn on }
复制代码if语句由单词“if”后跟括号中的条件组成。如果条件为真,则将执行后面括号之间的语句。在示例中,如果pin_b的数值为LOW,则程序将ledPin的值设置为HIGH。括号里的语句只执行一次。
while循环类似于if语句,但在该语句中,括号里的语句会反复执行,直到条件变为false。以下是示例: - while (pin_0 == LOW) {
- digitalWrite(ledPin, HIGH);
- delay(100);
- digitalWrite(ledPin, LOW);
- delay(100);
- switchValue = digitalRead(pin_0); // This stores a new value into the variable switchValue
- }
复制代码在这个例子中,程序将切换LED状态(即闪烁),直到用户按下开关,导致pin_0的数字值变为高电平。
实验1:FOR循环 在本实验中,我们演示了如何使用'for loop'来改变LED的亮度。
需要的硬件 ● Arduino Uno开发板 ● 面包板 ● LED指示灯 ● 220欧姆电阻 ● 连接导线
接线图
在这个简单的电路中,LED连接到Arduino的引脚2。为了改变LED的亮度,我们改变了引脚2处脉冲宽度调制(PWM)信号输出的占空比。程序使用for循环先从暗到亮,接着从亮到暗。
代码:使用For循环改变亮度 - // changing brightness using for loop
- const int pwm = 8 ;
- int i ;
- void setup()
- {
- pinMode(pwm,OUTPUT);
- }
- void loop()
- {
- /*
- FOR LOOP SYNTAX
- for(initialization ; condition ; increment)
- {
- CODE
- }
- */
- for(i=0 ; i < 256 ; i++ )
- {
- analogWrite(pwm,i) ; // for loop from low to High
- delay(10);
- }
- for(i=255 ; i > 0 ; i-- )
- {
- analogWrite(pwm,i) ; // for loop from high to low
- delay(10);
- }
- }
复制代码
实验2:条件语句 在本实验中,我们将根据串口发送到Arduino的消息内容打开或关闭两个LED。该程序使用以下控制结构: ● Switch语句 ● if-else if- else ● While循环
switch语句要紧凑得多,特别是在需要检查很多条件的情况下。编译器还可以优化switch语句,从而加快代码执行速度。 while循环不同于for循环,因为它没有限制循环计数。退出while循环的唯一方法是不满足括号内的条件。
需要的硬件 ● Arduino Mega2560开发板 ● 面包板 ● LED指示灯 ● 220欧姆电阻器 ● 连接导线
接线图
两个LED连接到两个Arduino输出引脚,Arduino使用条件语句打开或关闭它们。有四种不同的状态: 1. 如果串行数据== 1,则只有绿色LED指示灯亮。 2. 如果串行数据== 2,则只有黄色LED指示灯亮。 3. 如果串行数据== 3,则两个LED都将亮起。 4. 如果串行数据等于任何其他值,LED将关闭。
代码1:switch语句 - // Use of Switch Structure
- const int green = 8;
- const int yellow = 9;
-
- char i;
- void setup()
- {
- pinMode(green , OUTPUT); //setting pins output
- pinMode(yellow , OUTPUT);
- Serial.begin(9600);
- }
- void loop()
- {
- i = Serial.read(); // To serially send data to switch statements
- Serial.println(i);
- delay(50) ;
-
- switch(i) //Typical switch structure
- {
- case '1': //Condition for Green LED
- digitalWrite(green,HIGH);
- digitalWrite(yellow,LOW);
- delay(350);
- break;
-
- case '2': //Condition for Yellow LED
- digitalWrite(green,LOW);
- digitalWrite(yellow,HIGH);
- delay(350);
- break;
-
- case '3': //Condition for Both LED
- digitalWrite(green,HIGH);
- digitalWrite(yellow,HIGH);
- delay(350);
- break;
-
- default: //Leds are off
- digitalWrite(green,LOW);
- digitalWrite(yellow,LOW);
- break;
- }
-
- }
复制代码
代码2:使用If-Else语句 - // Use of If - else statements
- const int green = 8;
- const int yellow = 9;
-
- char i ;
- void setup()
- {
- pinMode(green , OUTPUT); //setting pins output
- pinMode(yellow , OUTPUT);
- Serial.begin(9600) ;
- }
- void loop()
- {
- i = Serial.read(); // To serially send data to switch statements
- Serial.println(i);
- delay(50);
-
- if(i=='1')
- {
- digitalWrite(green,HIGH);
- digitalWrite(yellow,LOW);
- delay(350);
- }
-
- else if(i=='2')
- {
- digitalWrite(green,LOW);
- digitalWrite(yellow,HIGH);
- delay(350);
- }
-
- else if(i=='3')
- {
- digitalWrite(green,HIGH);
- digitalWrite(yellow,HIGH);
- delay(350);
- }
-
- else
- {
- digitalWrite(green,LOW) ;
- digitalWrite(yellow,LOW) ;
- }
-
- }
复制代码
代码3:使用while循环 - // Use of while Loop
- const int green = 8 ;
- const int yellow = 9 ;
-
- char i ;
- void setup()
- {
- pinMode(green , OUTPUT) ; //setting pins output
- pinMode(yellow , OUTPUT) ;
- Serial.begin(9600) ;
- }
-
- void loop()
- {
- i = Serial.read() ; // To serially send data to switch statements
- Serial.println(i) ;
- delay(50) ;
-
- digitalWrite(green,LOW) ;
- digitalWrite(yellow,LOW) ;
-
- while(i=='1')
- {
- digitalWrite(green,HIGH) ;
- digitalWrite(yellow,LOW) ;
- i = Serial.read() ;
- Serial.println(i) ;
- delay(350) ;
- }
-
- while(i=='2')
- {
- digitalWrite(green,LOW) ;
- digitalWrite(yellow,HIGH) ;
- i = Serial.read() ;
- Serial.println(i) ;
- delay(350) ;
- }
-
- while(i=='3')
- {
- digitalWrite(green,HIGH) ;
- digitalWrite(yellow,HIGH) ;
- i = Serial.read() ;
- Serial.println(i) ;
- delay(350) ;
- }
-
- }
复制代码
|