以下内容源自Mixly官方技术文档:

https://mixly.readthedocs.io/zh_CN/latest/Arduino/AVR/02Control.html

控制

控制类别中包括了时间延迟、条件执行、循环执行、获取运行时间、初始化、Switch执行等 控制模块中主要执行的内容是对程序结构进行的相应控制。

1.初始化

1

2

pinMode(3, OUTPUT);

digitalWrite(3,HIGH);

1.1 描述

在Arduino中程序运行时将首先调用 setup()函数。 用于初始化变量、设置针脚的输出输入类型、配置串口、引入类库文件等等。

1.2 范例1

初始化时声明变量。

1

2

3

4

5

6

volatile int item;

void setup(){

item = 0;

}

void loop(){

}

1.3 范例2

在初始化时定义中断函数。

1

2

3

4

5

6

7

8

9

10

void attachInterrupt_fun_2() {

digitalWrite(13,HIGH);

}

void setup(){

pinMode(2, INPUT);

pinMode(13, OUTPUT);

attachInterrupt(digitalPinToInterrupt(2),attachInterrupt_fun_2,RISING);

}

void loop(){

}

注意

每次 Arduino 上电或重启后,setup 函数只运行一次。

2.while 循环

2.1 描述

while循环会无限的循环,直到括号内的判断语句变为假。 必须要有能改变判断语句的东西,要不然while循环将永远不会结束。你可以使用一个传感器的值,或者一个变量来控制什么时候停止该循环。

2.2 参数

  • 满足条件:为真或为假的一个条件。

2.3 范例

当温度高于30度时,亮灯,否则灭灯。

1

2

3

4

5

6

7

8

9

void setup(){

pinMode(13, OUTPUT);

}

void loop(){

while (analogRead(A0)*0.488 > 30) {

digitalWrite(13,HIGH);

}

digitalWrite(13,LOW);

}

3.延时

1

delay(1000);

3.1 描述

使程序暂定设定的时间(单位毫秒)。(一秒等于1000毫秒)。

3.2 参数

  • 毫秒:暂停的毫秒数。

3.3 范例

13号引脚灯亮1秒,灭1秒,往复循环。

1

2

3

4

5

6

7

8

9

void setup(){

pinMode(13, OUTPUT);

}

void loop(){

digitalWrite(13,HIGH);

delay(1000);

digitalWrite(13,LOW);

delay(1000);

}

注意

虽然创建一个使用delay()的闪烁LED很简单,并且许多例子将很短的delay用于消除开关抖动。

但delay()确实拥有很多显著的缺点。在delay函数使用的过程中,读取传感器值、计算、引脚操作均无法执行,因此,它所带来的后果就是使其他大多数活动暂停。大多数熟练的程序员通常避免超过10毫秒的delay(),除非arduino程序非常简单。

利用定时器,就可以解决这个问题,可以避免由于delay()带来的CPU暂停,也能很好地实现每隔一定时间执行动作。

4.如果(if)

1

2

if (false) {

}

4.1 描述

if 语句与比较运算符一起用于检测某个条件是否达成,如某个传感器的值是否等于某个值。

4.2 参数

  • 条件:比较表达式

4.3 用法

增加条件:如果需要增加条件,可以点开齿轮,然后将左侧的“否则如果”或者“否则”模块拖到右侧的“如果”之中。

4.4 范例1

当连接在2号引脚的按键按下时,点亮13号引脚的灯。

1

2

3

4

5

6

7

8

9

void setup(){

pinMode(2, INPUT);

pinMode(13, OUTPUT);

}

void loop(){

if (digitalRead(2) == 1) {

digitalWrite(13,HIGH);

}

}

如果判断的条件大于等于1时,可以省略等于判断,因为只要 该表达式的结果不为0,则为真。

所以,上面的写法与下面的写法等效。

1

2

3

4

5

6

7

8

9

void setup(){

pinMode(2, INPUT);

pinMode(13, OUTPUT);

}

void loop(){

if (digitalRead(2)) {

digitalWrite(13,HIGH);

}

}

4.5 范例2

当连接在2号引脚的按键按下时,点亮13号引脚的灯;当按键松开时,灯灭。

注意

另外一种进行多种条件分支判断的语句是switch case语句。

5.如果(switch)

5.1 描述

和if语句相同,switch…case通过设定的在不同条件下执行的代码控制程序的流程。

特别地,switch语句将变量值和case语句中设定的值进行比较。当一个case语句中的设定值与变量值相同时,这条case语句将被执行。

关键字break可用于退出switch语句,通常每条case语句都以break结尾。如果没有break语句,switch语句将会一直执行接下来的语句(一直向下)直到遇见一个break,或者直到switch语句结尾。

5.2 参数

  • var: 用于与下面的case中的标签进行比较的变量值

  • label: 与变量进行比较的值

5.3 用法

增加case:如果需要增加条件,可以点开齿轮,然后将左侧的“case”或者“default”模块拖到右侧的“switch”之中。

5.4 范例

当连接在2号引脚的按键按下时,点亮13号引脚的灯,否则13号引脚的灯灭

注意

每个switch可以有多个case,但是最多不超过一个default,当不满足任何一个case时,执行default中的程序。

6.for循环

6.1 描述

for循环用于重复执行一段的程序。通常使用一个增量计数器计数并终止循环。

for循环用于重复性的操作非常有效,通常与数组结合起来使用来操作数据、引脚。

6.2 参数

  • 变量名:用于记录for循环次数的变量名。

  • 起始值:循环的计数起始值,一般从0开头,也可以从其他数值开始。

  • 终点值:循环的计数终点值。

  • 步长:每次循环的步长,一般为1,也可以是其他整数。

6.3 用法

可自行设置循环的变量名称,并确定循环的开始和终止以及循环方向,最后一个数字可以为负数。

6.4 范例

将连接在3号引脚的灯制作成呼吸灯,每一次亮度变化之间间隔50毫秒

注意

for循环中定义的变量有名字,可以用字母i,j,k或单词red,state等有意义的词语表示。

7.跳出循环

7.1 描述

跳出循环用于终止一段重复的程序,一般使用时作为条件语句的执行部分,当循环中的变量满足某个条件时,执行跳出循环语句。

跳出循环在处理循环中的特殊情况时十分有用。

7.2 参数

  • 操作:可以选择跳出循环和跳到下一个循环两种操作,结果不同。

7.3 范例

引脚3上的数字从0到255逐一增加,每一次增加之间间隔50毫秒,当数字增加到150时停止增加

注意

注意跳到下一个循环的使用,可以方便的将循环中不需要的步骤跳过。

8.系统运行时间

8.1 描述

返回自硬件启动或重启以来的时间值。

8.2 返回

自硬件启动或重启以来的时间,毫秒数或者微秒数。

8.3 范例

自动换行打印系统运行时间

9.MsTimer2 定时器

9.1 描述

每隔设置的毫秒数执行相应的程序

9.2 范例

利用定时器控制13号引脚LED每隔1秒亮灭一次。

注意

利用定时器可以提高硬件的工作效率。

但在一个程序中只能使用一个MsTimer2定时器,如果要实现多个时间的定时,可以配合变量计数来完成。

10.MsTimer2 定时器启动

10.1 描述

MsTimer2定时器开始计时

11.MsTimer2 定时器停止

11.1 描述

MsTimer2定时器停止计时

12.简单定时器

12.1 描述

设置不同的简单定时器,每隔指定秒数执行相应的程序常用于多任务处理。

12.2 范例

D12,D13分别连接LED灯,每隔200ms,D12引脚LED灯切换亮灭; 每隔300ms,D13引脚LED灯切换亮灭;

13.允许中断

13.1 描述

允许输入/输出模块中管脚中断的运行

13.2 范例

使用按钮模拟开关,每次按下,LED灯切换亮灭

14.禁止中断

14.1 描述

禁止输入/输出模块中管脚中断的运行

14.2 范例

在允许中断范例的基础上,尝试禁止中断

15.SCoop Task

15.1 描述

SCoop模块用于执行多线程任务,最多支持8个任务。

15.2 范例

利用SCoop,控制13号引脚LED灯以2秒的频率闪烁,同时控制12号引脚的LED灯以200毫秒的频率闪烁。

微信关注图中张十三的博客公众号,与张十三一起探讨更多mixly开发问题:

玩转Mixly – 3、Arduino AVR编程 之 控制相关推荐

  1. 玩转Mixly – 10、Arduino AVR编程 之 传感器,执行器,通信,存储,factory

    以下内容源自Mixly官方技术文档: https://mixly.readthedocs.io/zh_CN/latest/Arduino/AVR/10Sensor.html https://mixly ...

  2. 玩转Mixly – 9、Arduino AVR编程 之 函数

    以下内容源自Mixly官方技术文档: https://mixly.readthedocs.io/zh_CN/latest/Arduino/AVR/08Functions.html 函数 在函数部分,主 ...

  3. 玩转Mixly – 8、Arduino AVR编程 之 变量

    以下内容源自Mixly官方技术文档: https://mixly.readthedocs.io/zh_CN/latest/Arduino/AVR/07Variables.html 变量 依据变量类型可 ...

  4. 玩转Mixly – 7、Arduino AVR编程 之 数组

    以下内容源自Mixly官方技术文档: https://mixly.readthedocs.io/zh_CN/latest/Arduino/AVR/06Lists.html 数组 数组是为了便于代码编写 ...

  5. 玩转Mixly – 6、Arduino AVR编程 之 文本

    以下内容源自Mixly官方技术文档: https://mixly.readthedocs.io/zh_CN/latest/Arduino/AVR/05Text.html 文本 文本的具体内容为代码的文 ...

  6. 玩转Mixly – 5、Arduino AVR编程 之 逻辑

    以下内容源自Mixly官方技术文档: https://mixly.readthedocs.io/zh_CN/latest/Arduino/AVR/04Logic.html 逻辑 逻辑模块中的指令大多是 ...

  7. 玩转Mixly – 2、Arduino AVR编程 之 输入输出

    以下内容源自Mixly官方技术文档: https://mixly.readthedocs.io/zh_CN/latest/Arduino/AVR/01Input-Output.html 输入/输出 输 ...

  8. 使用Arduino ISP编程AVR微控制器和Arduino开发板

    所有微控制器都需要某种机制来对它们进行编程,即使它们只编程一次.通常,程序代码写在主机上,然后编译或翻译,并使用电缆(通常是USB或RS232)将对象(机器可读)代码从PC("主机" ...

  9. 探测距离机器人模型:通过超声波测距控制舵机转向,LED灯,语音播放,蜂鸣器(米思齐mixly,arduino)

    ** ------------探测距离机器人模型:通过超声波测距控制舵机转向,LED灯,语音播放,蜂鸣器(米思齐mixly,arduino) 一. 初始化设置 在初始化这里要先设置波特率.并且把初始超 ...

最新文章

  1. 语义分割--Deep Dual Learning for Semantic Image Segmentation
  2. 使用Forms Authentication 身份验证 之 Basic Knowledge
  3. JAVA GUI关闭按钮不起作用(用SwingWorker解决)
  4. mysql 视图慢_第03问:磁盘 IO 报警,MySQL 读写哪个文件慢了?
  5. 怎样设置左右两个区域_消防水炮设置区域高于22米效果怎样
  6. 开发者新春回血大礼包助你2021畅行无压力!
  7. Redis的内存淘汰策略问题
  8. 理解Session实现原理及安全运用
  9. 深圳php就业,传智播客深圳校区PHP04期毕业15个工作日就业率67.74%
  10. java 发邮件_java实现邮件的发送
  11. 如何查找历史线程阻塞原因_吊打面试官!Java多线程并发 108 道题,你能答对多少?...
  12. PAT (Basic Level) Practice (中文)答案合集
  13. Linux-sys文件系统
  14. 使用php glob函数查找文件,遍历文件目录(转)
  15. 奥特曼系列服务器,奥特曼系列ol无限光元
  16. 算法导论 9.3-7 设计一个O(n)时间的算法,对于一个给定的包含n个互异元素的集合S和一个正整数k≤n,该算法能够确定S中最接近中位数的k个元素。
  17. 基于.Net Core3.1 与signalR实现一个即时通讯工具(一)
  18. 万里汇WorldFirst提现人民币实现当天到账!
  19. windows service and target‏
  20. 误提交了target目下的文件怎么删除?

热门文章

  1. [Java并发编程(二)] 线程池 FixedThreadPool、CachedThreadPool、ForkJoinPool?为后台任务选择合适的 Java executors...
  2. UA OPTI570 量子力学30 Degenerate Stationary Perturbation Theory简介
  3. UA OPTI512R 傅立叶光学导论12 傅立叶级数基础
  4. UA MATH567 高维统计专题3 含L1-norm的凸优化6 Stochastic Gradient Descent简介
  5. UA PHYS515A 电磁理论III 静磁学问题1 Maxwell方程与静磁学问题
  6. 数组名与数组指针的关系
  7. powerdesigner建立UML活动图
  8. jquery标签选择器应用示例
  9. 超图桌面版加载obj 3D模型
  10. Win32使用Windows公共控件库创建工具条