查看: 482|回复: 5

[已解答] 有没有懂blinker的老哥,萌新求助

[复制链接]

该用户从未签到

发表于 2019-5-28 19:12 | 显示全部楼层 |阅读模式
最近用blinker做了一个手机端的遥控,内容是这样的开关型按钮,打开就会播放一段固定旋律(自己用PWM编写的)。按程序设计,按下按钮会print on的状态,使得手机端呈现开的状态,然后再播放音乐。使用过程中发现,按下按钮后,按钮没反应,但会播放旋律,等到旋律播放完了,按钮才呈现开的状态,怎么解决?

kittenblock中小学创客名师推荐的图形化编程软件

void button4_callback(const String & state) {
  BLINKER_LOG("get button state: ", state);  
 if (state=="on") 
   {
        Button4.print("on");
       for(int x=0;x<length;x++)
       {
           if(state=="off")
            {
              noTone(tonepin);
              Button4.print("off");
              return;
             }
       tone(tonepin,scale[x]);
       delay(1000*durt[x]);   //这里用来根据节拍调节延时,500这个指数可以自己调整
       noTone(tonepin);
       }
    delay(2000);
    
    } 
    else if(state=="off")
    {
      noTone(tonepin);
      Button4.print("off");
     }
}
  • TA的每日心情
    郁闷
    2018-12-6 22:21
  • 签到天数: 48 天

    [LV.5]常住居民I

    发表于 2019-5-28 21:13 | 显示全部楼层
    1.回调中最好不要有耗时操作,通常是在回调中改变flag,loop再做处理
    2.所有delay用Blinker.delay()
    如果以上内容对你有帮助,你可以通过打赏支持作者

    该用户从未签到

     楼主| 发表于 2019-5-28 22:19 来自手机 | 显示全部楼层
    奈何col 发表于 2019-5-28 21:13
    1.回调中最好不要有耗时操作,通常是在回调中改变flag,loop再做处理
    2.所有delay用Blinker.delay() ...

    谢谢,大佬我按你的方便,确实解决了问题。但出现了新的问题,on的时候是播放乐曲,在播放乐曲中,我在手机端转换成off,乐曲只是停顿一下,接着继续原来位置的for循环?似乎这里是中断了,而不是停止了?

    点评

    程序逻辑问题,在每次for中都检测下按键状态  详情 回复 发表于 2019-5-28 23:22
  • TA的每日心情
    郁闷
    2018-12-6 22:21
  • 签到天数: 48 天

    [LV.5]常住居民I

    发表于 2019-5-28 23:22 | 显示全部楼层
    fwl190612 发表于 2019-5-28 22:19
    谢谢,大佬我按你的方便,确实解决了问题。但出现了新的问题,on的时候是播放乐曲,在播放乐曲中,我在手 ...

    程序逻辑问题,在每次for中都检测下按键状态
    如果以上内容对你有帮助,你可以通过打赏支持作者

    该用户从未签到

     楼主| 发表于 2019-5-29 12:47 | 显示全部楼层
    奈何col 发表于 2019-5-28 23:22
    程序逻辑问题,在每次for中都检测下按键状态

    我在for中加入了按键检测,问题还是没解决,依旧是停顿一下,接着继续乐曲。

    kittenblock中小学创客名师推荐的图形化编程软件

    void button4_callback(const String & state) {
      BLINKER_LOG("get button state: ", state);  
     if (state=="on") 
       {
            Button4.print("on");
            Blinker.delay (1000);
             for(int x=0;x<length;x++)
             {
             void button4_callback(const String & state);
              if(state=="off")
               {
                digitalWrite(tonepin,LOW);
                Button4.print("off");
                break;
                }
           tone(tonepin,scale[x]);
           Blinker.delay(1000*durt[x]);   //这里用来根据节拍调节延时,500这个指数可以自己调整
           noTone(tonepin);
           }
        } 
        else if(state=="off")
        {
          digitalWrite(tonepin,LOW);
          Button4.print("off");
          return;
         }
    }

    点评

    还是那句话 1.回调中最好不要有耗时操作,通常是在回调中改变flag,loop再做处理  详情 回复 发表于 2019-5-29 15:47
  • TA的每日心情
    郁闷
    2018-12-6 22:21
  • 签到天数: 48 天

    [LV.5]常住居民I

    发表于 2019-5-29 15:47 | 显示全部楼层
    fwl190612 发表于 2019-5-29 12:47
    我在for中加入了按键检测,问题还是没解决,依旧是停顿一下,接着继续乐曲。
    [mw_shl_code=arduino,true] ...

    还是那句话


    1.回调中最好不要有耗时操作,通常是在回调中改变flag,loop再做处理
    如果以上内容对你有帮助,你可以通过打赏支持作者
    您需要登录后才可以回帖 登录 | 立即注册  

    本版积分规则

    热门推荐

    同时读取两个传感器的数据,并上传至云端存储
    同时读取两个传感器的数据
    一个示例,仅供参考,可以自己更换传感器,或者连接更多传感器。 开发板: Wifiduin
    求助帖 新手
    求助帖 新手
    如图,第一个LED灯驱动失败,求原因… 板子是UNO R3,LED灯接在13与GND上面。
    【Arduino】108种传感器系列实验(93)---CSR8350蓝牙音乐模块
    【Arduino】108种传感器系
    37款传感器与模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是
    光线跟踪钛合金猫眼
    光线跟踪钛合金猫眼
    +视频 https://www.bilibili.com/video/av67732712/ +原理 ---光线跟踪 建立极
    "高精度"米家电子温湿度计Pro拆解
    "高精度"米家电子温湿度计
    为了了解哪种温湿度传感器更好,我搞了一个米家电子温湿度计Pro(阿蒙同志赠送) 价格
    Copyright   ©2015-2016  Arduino中文社区  Powered by©Discuz!   ( 蜀ICP备14017632号-3 )
    快速回复 返回顶部 返回列表