所有关于电路
项目

语言控制结构:控制你的Arduino

2015年6月8日经过蒂姆杨ood

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

通过学习如何使用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);}}

language_contol1.zip.

实验2:有条件的陈述

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

  • 切换语句
  • if - else如果-其他
  • While循环

如果需要检查大量条件,则交换机语句更紧凑。编译器还可以优化切换语句,从而导致更快的代码执行。

虽然循环与循环不同,但它没有限制循环计数。退出while循环的唯一方法是对括号内的情况不满意。

硬件要求

  • 1 x Arduino Mega2560
  • 1 x面包板
  • 2 x发光二极管
  • 2 x 220欧姆电阻
  • 3 ×跳线


接线图


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

  1. 如果串行数据== 1,只有绿色的LED会亮。
  2. 如果串行数据==2,只有黄色指示灯会亮。
  3. 如果串行数据==3,两个led都会亮。
  4. 如果串行数据等于任何其他值,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; } }

language_control2.zip.

代码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) ; } }

language_control3.zip

代码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) ; } }

language_control4.zip

视频

自己尝试一下这个项目吧!得到bom。

2评论
  • 杰克布兰顿 2018年1月17日

    只需购买K&R书并阅读它,特别注意他们使用的编码风格。这是关于'C'编程的圣经。上面的代码不符合K&R型号。

    喜欢的。 回复
    • 蒂姆YB. 2018年1月17日
      感谢你的阅读。我听说过很多关于K & R的书,但是我从来没有读过,因为我在大学里不是学计算机专业的。不过,我希望看到本文中K & R风格的代码片段。如果你不介意的话,你愿意把代码以K & R风格发布在一个注释中,这样其他读者就可以看到它了吗?
      喜欢的。 回复