极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 14712|回复: 3

咪头控制呼吸灯程序,跳不出for 循环

[复制链接]
发表于 2017-11-12 07:07:22 | 显示全部楼层 |阅读模式
做了一个咪头控制呼吸灯的小东西,实现拍一下手呼吸灯逐渐变化,再拍一下手呼吸灯灭,代码正常执行,
如果直接控制灯的亮灭,可以实现,但是加上呼吸灯的代码后,可以亮并且呼吸,但再拍一下手就不灭了,用打印看了一下,我自己判断为跳不出for循环,想请教大神看下,我哪里出问题了,在这里先谢谢了!
代码如下



  1. int Pin1=A5;//(模拟引脚都可以)
  2. /*Arduino A5接咪头负极(从外形上看引脚短的一边或与外壳有连接的一边)
  3. 另外一边接5v.注意:咪头负极要接一个10K的下拉电阻*/
  4. int Pin2=10;//Arduino 10脚接LED正极(数字脚都可以)
  5. int n=0;//存储读取的模拟值
  6. boolean toggle=false;
  7. unsigned long fristClap=0;//第一次拍手
  8. unsigned long nextlap=0;  //下一次拍手
  9. unsigned int claps=0;//拍手的次数
  10. unsigned long timeDiff=0;//时间间隔

  11. void setup()
  12. {
  13. pinMode(Pin2,OUTPUT);//定义10脚为输出模式
  14. Serial.begin(9600);
  15. }

  16. void loop()
  17.     {
  18.           n=analogRead(Pin1);//模拟读取A5的值
  19.           if (n>515)
  20.           {
  21.             fristClap=millis();
  22.             claps++;
  23.            if(claps==2)
  24.              {
  25.                timeDiff=fristClap-nextlap;
  26.                if (timeDiff>300&&timeDiff<2500)
  27.                {
  28.                  toggle=!toggle;
  29.                  claps=0;
  30.                }
  31.             else
  32.              claps=1;
  33.            }
  34.        nextlap=fristClap;
  35.       }
  36.     if (toggle)
  37.        {
  38.         Serial.println ("111");
  39.          for (int value = 0 ; value < 255; value++)//value=value-1
  40.          {  
  41.           analogWrite(Pin2, value);
  42.          delay(8);
  43.          }
  44.        for (int value = 255; value >0; value--)//value=value-1
  45.          {  
  46.          analogWrite(Pin2, value);  
  47.          delay(8);  
  48.          }
  49.        delay(1000);
  50.       }
  51.     else
  52.        {
  53.          Serial.println ("222");
  54.          analogWrite(Pin2, 0);  
  55.          delay(200);  
  56.          
  57.        }
  58. }
复制代码

回复

使用道具 举报

发表于 2017-11-14 21:07:41 | 显示全部楼层
本帖最后由 Stormer 于 2017-11-14 21:11 编辑


因为FOR循环的时候是不检测 toggle的值的,所以会一直运行。 加个判断,跳出来就好了。


if (toggle)
       {
     
         for (int value = 0 ; value < 255; value++)//value=value-1
         {  
if (toggle==false)
{
     value =300;
}
  else
{        analogWrite(Pin2, value);
         delay(8);
}
         }

.....
if (toggle==false)
{
     value =0;
}
.........

analogWrite(Pin2, 0);
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-11-15 17:48:14 | 显示全部楼层
Stormer 发表于 2017-11-14 21:07
因为FOR循环的时候是不检测 toggle的值的,所以会一直运行。 加个判断,跳出来就好了。

原来是这样,我只知道跳不出来,却不知道怎么解决,谢谢啦!又学到新东西了
回复 支持 反对

使用道具 举报

发表于 2017-11-29 22:45:40 | 显示全部楼层
我也是新手,就算在for 里加了if 判断,我想硬件是不会时时更新toggle的值吧
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 需要先绑定手机号

Archiver|联系我们|极客工坊

GMT+8, 2024-4-17 04:59 , Processed in 0.039756 second(s), 19 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表