查看: 1199|回复: 12

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

[复制链接]
  • TA的每日心情
    开心
    2019-4-1 19:35
  • 签到天数: 26 天

    [LV.4]偶尔看看III

    发表于 2018-11-7 17:38 | 显示全部楼层 |阅读模式
    30金币
    本帖最后由 YUMU2018 于 2018-12-18 22:14 编辑

    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 | 显示全部楼层
    提示: 作者被禁止或删除 内容自动屏蔽
  • TA的每日心情
    开心
    2019-4-1 19:35
  • 签到天数: 26 天

    [LV.4]偶尔看看III

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

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

    该用户从未签到

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

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

    [LV.7]常住居民III

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

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

    试试看行不行吧。
  • TA的每日心情
    开心
    2019-4-1 19:35
  • 签到天数: 26 天

    [LV.4]偶尔看看III

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

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

    情况是这样,如果A引脚发生一个电平变化则在3S内在C引脚输出高电平,但如果3S内检测到B引脚有电平变化则不输出C。(3s可以任意调整)
  • TA的每日心情
    开心
    2019-4-1 19:35
  • 签到天数: 26 天

    [LV.4]偶尔看看III

     楼主| 发表于 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的每日心情
    开心
    2019-4-1 19:35
  • 签到天数: 26 天

    [LV.4]偶尔看看III

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

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

    [LV.4]偶尔看看III

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

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

    本版积分规则

    热门推荐

    学习记录2,Blinker读取温湿度
    学习记录2,Blinker读取温
    开关现在是使用得很6了,准备进行下一步,读取数据。 找了下官方的例程,发现用的是w
    学生智能打卡系统(接入blinker)
    学生智能打卡系统(接入bl
    【项目名称】学生智能打卡系统(接入blinker) 一.感谢各位大佬 首先感谢社区的管理员
    关于红外控制空调的模块选型
    关于红外控制空调的模块选
    想问问这中模块能支持arduino吗
    LCD1602只亮 不显示
    LCD1602只亮 不显示
    #include // initialize the library by associating any needed LCD interface pin
    18脚的8x8LED点阵如何使用??
    18脚的8x8LED点阵如何使用
    本帖最后由 Creeper666 于 2018-8-14 12:24 编辑 这个点阵模块上面一排有12个脚,
    Copyright   ©2015-2016  Arduino中文社区  Powered by©Discuz!   ( 蜀ICP备14017632号-3 )
    快速回复 返回顶部 返回列表