通过学习如何使用Arduino语言控制结构来使您的Arduino程序更灵活。
编程语言的控制结构允许您根据特定的条件采取行动。Arduino的控制结构与C语言的控制结构非常相似:
在本教程中,我们将讨论最常用的控制结构:
- for循环
- switch语句
- 如果别的
- 循环时
条件语句
如果语句和而报表被称为条件语句。它们计算一个特定的条件,如果条件为true{},则在括号中执行一系列语句。这里有一个例子:
if(pin_b == low){digitewrite(LEDPIN,高); //这告诉LED打开}
IF语句由“if”之后的单词组成,然后是括号中的条件。如果条件为真,则执行以下括号之间的语句。在这种情况下,如果PIN_B的数字值低,则程序将将LEDPIN的值设置为高。括号之间的语句仅执行一次。
while循环类似于if语句,但在本例中,方括号之间的语句将反复执行,直到条件变为false。这里有一个例子:
while (pin_0 == LOW) {
digitalWrite (ledPin、高);
延迟(100);
DigitalWrite(LEDPIN,低);
延迟(100);
switchValue = digitalRead (pin_0);//将一个新值存储到变量switchValue中
}
在本例中,程序将切换LED的状态(即闪烁),直到用户按下开关,导致pin_0处的数字值变高。
实验1:用于循环
在这个实验中,我们演示了如何使用“循环”来改变LED的亮度。
硬件要求
- 1 x Arduino Mega2560
- 1 x面包板
- 1 x LED
- 1 × 220欧姆电阻
- 2 x跳线电线
接线图
在该简单的电路中,LED连接到Arduino的引脚2。为了改变LED的亮度,我们将脉冲宽度调制(PWM)信号输出的占空比更改为PIN 2。程序使用FOR循环到拳头从昏暗到明亮,一秒从明亮到暗淡。
代码:使用循环更改亮度
//使用循环int int pwm = 8更改亮度;INT I;void setup(){Pinmode(PWM,输出);void循环(){/ *用于循环语法(初始化;条件;递增){code} * / for(i = 0; i <256; i ++){damparwwrite(pwm,i);//用于从低到高延迟(10);for(i = 255; i> 0; i--){damparwwrite(pwm,i);//循环从高到低延延迟(10);}}
实验2:有条件的陈述
在这个实验中,我们将根据串行发送到Arduino的消息内容打开或关闭两个led。该程序使用以下控制结构:
- 切换语句
- if - else如果-其他
- While循环
硬件要求
- 1 x Arduino Mega2560
- 1 x面包板
- 2 x发光二极管
- 2 x 220欧姆电阻
- 3 ×跳线
接线图
两个led连接到两个Arduino输出引脚,Arduino使用条件语句打开或关闭它们。有四个不同的状态:
- 如果串行数据== 1,只有绿色的LED会亮。
- 如果串行数据==2,只有黄色指示灯会亮。
- 如果串行数据==3,两个led都会亮。
- 如果串行数据等于任何其他值,LED将关闭。
代码1:切换语句
// Switch结构的使用const int green = 8;const int黄色= 9;char我;void setup() {pinMode(绿色,输出);//设置引脚输出Serial.begin (9600);} void loop() {i = Serial.read();//串行发送数据到switch语句serialprintln (i);延迟(50);switch(i) //典型的开关结构{case '1': //绿色LED digitalWrite(绿色,高)的条件; 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语句
//使用if - else语句const int green = 8;const int黄色= 9;char我;void setup() {pinMode(绿色,输出);//设置引脚输出Serial.begin (9600);} void loop() {i = Serial.read();//串行发送数据到switch语句serialprintln (i);延迟(50);if(i =='1'){digitalwrite(绿色,高); 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循环const int green = 8;const int黄色= 9;char我;void setup() {pinMode(绿色,输出);//设置引脚输出Serial.begin (9600);} void loop() {i = Serial.read();//串行发送数据到switch语句serialprintln (i);延迟(50);digitalWrite(绿色、低); 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) ; } }
视频
自己尝试一下这个项目吧!得到bom。
只需购买K&R书并阅读它,特别注意他们使用的编码风格。这是关于'C'编程的圣经。上面的代码不符合K&R型号。