趣文网,分享全网好句子、好文章!

Arduino疑惑┃传感器条件语句程序效率探究

时间:2023-10-21 07:26:01

相关推荐

Arduino疑惑┃传感器条件语句程序效率探究

一、前言

近日,笔者在和同事探讨传感器的使用时,发现两个条件语句的问题,虽然看上去不影响程序执行结果,可是感觉和程序效率有所关系,特抛出来和大家交流,希望能得到专家的指点。

二、例程1

以声音传感器的使用为例,做一个声控灯。在A1号管脚上接了一个模块声音传感器,在2号数字管脚上接了一个LED灯(高电平触发),当从A1号管脚的返回值大于50时,则点亮2号数字管脚上的LED灯(写入一个高电平)5秒,否则就关灯。程序如图1所示:

Arduino代码如下:

void setup(){

pinMode(2, OUTPUT);

}

void loop(){

if (analogRead(A1) > 50) {

digitalWrite(2,HIGH);

delay(5000);

} else {

digitalWrite(2,LOW);

}

}

笔者在几乎所有传感器入门的第一课写的程序都是如此,看上去没有什么问题,可是细想一下感觉还是有点不对,因为在loop()函数中,所有代码是重复循环的,每次都要判断A1的返回值是否大于50从而决定是否开关灯。假定某个时间段内A1的返回值都小于等于50,那程序会不断重复“digitalWrite(2,LOW);”这个命令;反之亦然,如果在某个时间段内A1的返回值都大于50,那么程序会不断重复“ digitalWrite(2,HIGH);delay(5000);”这两个命令。而LED灯的亮和灭的状态只需要给出一次命令(写入高电平/低电平)即可,那么这些不断重复的指令是不是没有必要呢?这正是我这写这篇文章的原因。

如果程序改成这样呢(图2)?

修改后的Arduino程序代码如下:

void setup(){

pinMode(2, OUTPUT);

}

void loop(){

if (analogRead(A1) > 50) {

digitalWrite(2,HIGH);

delay(5000);

digitalWrite(2,LOW);

}

}

从程序来看,主要是把关灯代码:digitalWrite(2,LOW); 放入了符合条件时执行的模块里,这样当不符合条件时,就不需要执行任何代码了。

三、例程2

以光线传感器的使用为例,做一个光控灯。光线传感器接A1号模拟管脚,LED灯接数字2号管脚。如果检测到室内光线小于某个值时,我希望把灯常亮,直到室内光线恢复到正常值时才关灯,通常情况下会代码会这样(图3):

和例程1类似,也存在某个时间段内光线值恒定小于指定值时,程序会不断重复发出向2号数字管脚写入高电平的指令,反之就会不断重复发出向2号数字管脚写入低电平的指令。那这个程序不能像例程1那样修改,因为这里要求是常亮,不是亮一个固定的时间就关。

因此程序的修改思路是增加一个标志变量flag,该变量默认值为0,当光线值小于指定值并且flag为0时才开灯,并设置flag变量值为1,这样当某个时间段内,光线值都很暗的时候,就只需要发出一次向2号数字管脚写入高电平的指令;反之亦然,当光线值大于等于指定值并且flag为1时才灭灯(也就是只有原来灯是开着的并且室内光线正常了)才灭灯,并设置flag变量值为0,这样当某个时间段内,光线值都很亮的时候,就只需要发出一次向2号数字管脚写入低电平的指令。修改后的程序如下图所示(图4):

修改后的Arduino程序代码如下:

volatile int flag;

void setup(){

flag = 0;

pinMode(2, OUTPUT);

}

void loop(){

if (analogRead(A1) < 50 && flag == 0) {

digitalWrite(2,HIGH);

flag = 1;

}

if (analogRead(A1) >= 50 && flag == 1) {

digitalWrite(2,LOW);

flag = 0;

}

}

以上关于程序效率的问题抛出来和大家探讨,不知道修改后的程序是画蛇添足还是怎样?是否有必要修改?希望能得到大家的指点,有不当的地方还请大家明言,谢谢大家。

初始化工作室专注于Arduino、乐高的学习与创意,以及STEAM教育的探讨。需要更多相关课程请点击“关注”按钮关注我,谢谢。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。
显示评论内容(3)
  1. 快乐小牛2024-02-01 16:31快乐小牛[湖南省网友]203.62.234.165
    3.通过探究传感器条件语句程序效率我发现了很多以前并不知道小窍门感觉自己编程技能又进步了。
    顶0踩0
  2. 田园一村姑2023-12-29 05:29田园一村姑[重庆市网友]119.160.200.139
    2.感谢作者分享这篇文章对于像我这样Arduino爱好者这是篇非常有用学习资料。
    顶6踩0
  3. 雨纤2023-11-24 18:27雨纤[广东省网友]43.224.224.32
    1.很有意思话题对Arduino编程不是很熟练我也很想了解更多关于传感器条件语句程序效率探究。
    顶6踩0
相关阅读
动口不动手 打字翻译更轻松 咪鼠智能语音鼠标S7B初体验

动口不动手 打字翻译更轻松 咪鼠智能语音鼠标S7B初体验

不过随着智能语音鼠标的问世,人们多了一个更好的选择

2023-05-28

帮助丧失语言能力的人“开口说话” 定制化数字声音如此神奇

帮助丧失语言能力的人“开口说话” 定制化数字声音如此神奇

要知道,全球因伤病和先天疾病而丧失语言能力的人有数百万之多,如失语症、神经元疾病、脑瘫、中风、自闭症等,都能够对参与语言表达的肌肉控制能力造成影响

2024-01-05

基于plc自动售货机设计论文

基于plc自动售货机设计论文

毕业设计题 目: 基于PLC的自动售货机的设计院 系: 自动化学院、自动化系姓 名:班 级:学

2013-07-29

36 句话看完锤子科技 2018 夏季新品发布会

36 句话看完锤子科技 2018 夏季新品发布会

锤子科技于 2018 年 8 月 20 日在北京凯迪拉克中心原五棵松体育馆举行了新品发布会,发布了搭载颠覆性的无限屏功能与TNT大屏幕操作系统的坚果 Pro

2023-05-10