查看: 165|回复: 10

[未解决] 关于循环计数延时

[复制链接]
  • TA的每日心情
    慵懒
    2018-11-8 13:06
  • 签到天数: 10 天

    [LV.3]偶尔看看II

    发表于 2018-11-7 17:38 | 显示全部楼层 |阅读模式
    30金币
    void setup() {
    Serial.begin(9600);
    int i=0;
    }
    //--------------------------------------------------------------------
    void loop() {
    do
    {
       i++;
    Serial.println(i);          //输出i
      }
    while(i<900);
    Serial.println("T");
      }
    //--------------------------------------------------------------------  
    我想写一个循环计数延时程序,作用是i从0自加到900然后退出循环输出T。(其中i从0自加到900这个时间段是我希望延时,可以自由改变)
    现在遇到的问题是必须串口打印输出i,然后串口就会从0-900的数字在输出T.(也就是说延时效果是有的,但我并不希望输出0-900的数字)
    如果不输出i,就会飞快的输出T。i++到900感觉并没有运算。(我不想输出0-900的数字,所以去掉了Serial.println(i)输出。 结果延时效果完全没有了???)
    啥情况!  难道程序也偷懒!//谁能帮忙解释下怎么回事,或告诉我该怎么解决。



    该用户从未签到

    发表于 2018-11-7 18:25 | 显示全部楼层
    直接delay不好吗
  • TA的每日心情
    慵懒
    2018-11-8 13:06
  • 签到天数: 10 天

    [LV.3]偶尔看看II

     楼主| 发表于 2018-11-7 18:51 | 显示全部楼层

    直接delay芯片cpu会被占用,实际条件不允许这样

    该用户从未签到

    发表于 2018-11-7 20:37 | 显示全部楼层
    serial.print 比你想象耗时多了,所以为什么不用delay?

    你的代码也没有需要同时运行的内容啊
    打赏作者鼓励一下!
  • TA的每日心情
    开心
    2018-11-12 00:21
  • 签到天数: 237 天

    [LV.7]常住居民III

    发表于 2018-11-7 22:43 | 显示全部楼层
    int i = 0;
    改为:
    long i = 0;

    while(i<900);
    改为:
    while(i<90000);

    试试看行不行吧。
  • TA的每日心情
    慵懒
    2018-11-8 13:06
  • 签到天数: 10 天

    [LV.3]偶尔看看II

     楼主| 发表于 2018-11-8 09:18 | 显示全部楼层
    Zoologist 发表于 2018-11-7 20:37
    serial.print 比你想象耗时多了,所以为什么不用delay?

    你的代码也没有需要同时运行的内容啊 ...

    情况是这样,如果A引脚发生一个电平变化则在3S内在C引脚输出高电平,但如果3S内检测到B引脚有电平变化则不输出C。(3s可以任意调整)
  • TA的每日心情
    慵懒
    2018-11-8 13:06
  • 签到天数: 10 天

    [LV.3]偶尔看看II

     楼主| 发表于 2018-11-8 09:19 | 显示全部楼层
    skypup 发表于 2018-11-7 22:43
    int i = 0;
    改为:
    long i = 0;

    试过,不行

    该用户从未签到

    发表于 2018-11-8 10:54 | 显示全部楼层
    YUMU2018 发表于 2018-11-8 09:18
    情况是这样,如果A引脚发生一个电平变化则在3S内在C引脚输出高电平,但如果3S内检测到B引脚有电平变化则 ...

    你看一下 millis() 的用法,可以用这个来做延时
    打赏作者鼓励一下!
  • TA的每日心情
    慵懒
    2018-11-8 13:06
  • 签到天数: 10 天

    [LV.3]偶尔看看II

     楼主| 发表于 2018-11-8 13:05 | 显示全部楼层
    Zoologist 发表于 2018-11-8 10:54
    你看一下 millis() 的用法,可以用这个来做延时

    嗯  现在就是这样做的,不过millis50多天就会溢出。实在不明白为什么循环计数不行呢,按理说加大i++次数或者进行循环嵌套肯定是要占用cpu时间的,而且delay实际上就是让cpu进行无意义运算产生延时的啊
  • TA的每日心情
    慵懒
    2018-11-8 13:06
  • 签到天数: 10 天

    [LV.3]偶尔看看II

     楼主| 发表于 2018-11-8 21:09 | 显示全部楼层
    skypup 发表于 2018-11-7 22:43
    int i = 0;
    改为:
    long i = 0;

    数值多大不行。不知道咋回事
    您需要登录后才可以回帖 登录 | 立即注册  

    本版积分规则

    热门推荐

    关于switch的问题
    关于switch的问题
    为什么switch 只能实现第一个case 1:的显示,case 2:的显示不出来,我用蓝牙发一个
    原创 drawbot平面关节机械臂 教程直播贴
    原创 drawbot平面关节机械
    这个项目上个月就在做了,结构和代码反反复复改了多次,加上自己又太忙,一直没来得及
    esp8266完美对接机智云与安卓APP开发和远程控制
    esp8266完美对接机智云与
    在极客工坊和咱们社区混了很久了,也没有发过帖子,第一次哦,不好意思也没有太多的时
    Arduino显示所选端口号找不到主板
    Arduino显示所选端口号找
    请问一下我这个问题是板子坏了,还是什么其他问题
    visual studio 2017 下载程序导致串口数据出错
    visual studio 2017 下载
    想做一个蓝牙通信的功能,程序如下,发现用官方的IDE没有任何问题,但是用visual stud
    Copyright   ©2015-2016  Arduino中文社区  Powered by©Discuz!   ( 蜀ICP备14017632号-3 )
    快速回复 返回顶部 返回列表