查看: 28166|回复: 21
打印 上一主题 下一主题

Arduino 101/Genuino 101 时间控制函数

[复制链接]
  • TA的每日心情
    郁闷
    2018-12-6 22:21
  • 签到天数: 48 天

    [LV.5]常住居民I

    跳转到指定楼层
    楼主
    发表于 2016-3-9 21:15 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    时间控制函数
    运行时间函数
    使用运行时间函数millis(),能获取Arduino通电后(或复位后)到现在的时间。

    返回系统运行时间,单位毫秒。
    返回值是uint64_t类型。

    返回系统运行时间,单位微秒。
    返回值是uint64_t类型。
    在不同型号的Arduino上,运行时间函数的精度也不同,在Genuino 101上,精度为2微秒。

    使用以下程序会将系统运行时间输出到串口,你可以通过串口监视器观察到程序运行时间。

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

    /*
    获取系统运行时间
    */
    unsigned long time1;
    unsigned long time2;
    
    void setup(){
      Serial.begin(9600);
    }
    
    void loop(){
      time1 = millis();
      time2 = micros();
      // 输出系统运行时间
      Serial.print(time1);
      Serial.println("ms");
      Serial.print(time2);
      Serial.println("us");
      // 等待1秒开始下一次loop循环
      delay(1000);
    }




    延时函数
    在之前的Blink程序中,我们通过使用延时函数,使LED按一定频率闪烁。
    Arduino提供了毫秒级和微秒级两种延时函数。运行延时函数时,会等待指定的时间,再运行此后的程序。你可以通过参数设定延时时间。

    毫秒级延时。
    参数数据类型为uint32_t。


    微秒级延时。
    参数数据类型为uint32_t。
    Genuino 101上的延时操作精度为+-0.5微秒。

    RTC函数
    我们已经知道使用Arduino的运行时间函数millis()、micros() 可以获取到Arduino的运行时间,但很多场合我们需要记录年月日时分秒等日期信息,使用arduino原有的时间函数会非常不便。解决该问题的普遍方法,就是外接一个RTC(Real-Time Clock,即实时时钟)芯片,Intel Curie内置有RTC,它能准确的记录日期信息。
    要使用RTC功能,我们需要先引用CurieTime.h头文件:


    CurieTime中设置时间就一个函数:


    设置好时间后,可以通过以下6个函数获取时间信息:

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

    year();
    month();
    day();
    hour();
    minute();
    second();


    例程程序如下:

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

    /*
    Curie RTC例程
    http://www.arduino.cn/
    */
    
    #include <CurieTime.h>
    
    void setup() {
      while (!Serial);
      Serial.begin(9600);
    
      // 将时间设为2016年6月25日18点27分
      setTime(18, 27, 00, 24, 6, 2016);
    }
    
    void loop() {
      Serial.print("Time now is: ");
    
      print2digits(hour());
      Serial.print(":");
      print2digits(minute());
      Serial.print(":");
      print2digits(second());
    
      Serial.print(" ");
    
      Serial.print(day());
      Serial.print("/");
      Serial.print(month());
      Serial.print("/");
      Serial.print(year());
    
      Serial.println();
    
      delay(1000);
    }
    // 生成占位用的字符“0”
    void print2digits(int number) {
      if (number >= 0 && number < 10) {
        Serial.print('0');
      }
      Serial.print(number);
    }
    

    如果以上内容对你有帮助,你可以通过打赏支持作者

    该用户从未签到

    推荐
    发表于 2016-3-20 10:29 | 只看该作者
    请问CurieTime库文件在哪里下?
  • TA的每日心情
    奋斗
    2016-7-29 10:58
  • 签到天数: 1 天

    [LV.1]初来乍到

    板凳
    发表于 2016-7-28 17:44 | 只看该作者
    用这个方法读到的时间,为何前几秒是settime之前的默认时间?
  • TA的每日心情
    郁闷
    2018-12-6 22:21
  • 签到天数: 48 天

    [LV.5]常住居民I

    地板
     楼主| 发表于 2016-7-28 18:51 | 只看该作者
    wangzway 发表于 2016-7-28 17:44
    用这个方法读到的时间,为何前几秒是settime之前的默认时间?

    哪个方法?
    如果以上内容对你有帮助,你可以通过打赏支持作者
  • TA的每日心情
    奋斗
    2016-7-29 10:58
  • 签到天数: 1 天

    [LV.1]初来乍到

    5#
    发表于 2016-7-29 10:51 | 只看该作者

    #include "CurieIMU.h"
    #include <CurieTime.h>
    #include <SPI.h>
    #include <SD.h>

    void setup() {
      Serial.begin(9600); // initialize Serial communication
    // while (!Serial);    // wait for the serial port to open

      delay(7000);  
      // initialize device
      Serial.println("Setting Time...");
       
      setTime(10, 00, 00, 11, 7, 2016);
      
    }

    void loop() {

      Serial.println(getTime());

    }


    String getTime() {
      String timeString = "";
      timeString += String(year());
      timeString += "/";
      timeString += String(month());
      timeString += "/";
      timeString += String(day());
      timeString += " ";

      timeString += print2digits(hour());
      timeString += ":";
      timeString += print2digits(minute());
      timeString += ":";
      timeString += print2digits(second());
      timeString += " ";
      
      return timeString;
    }

    // 生成占位用的字符“0”
    String print2digits(int number) {
      if (number >= 0 && number < 10) {
        String twodigitsString = "";
        twodigitsString += '0';
        twodigitsString += String (number);
        return twodigitsString;
      }
      return String(number);
    }
  • TA的每日心情
    奋斗
    2016-7-29 10:58
  • 签到天数: 1 天

    [LV.1]初来乍到

    6#
    发表于 2016-7-29 10:55 | 只看该作者
    wangzway 发表于 2016-7-29 10:51
    #include "CurieIMU.h"
    #include
    #include

    用  delay(7000);  代替了  while (!Serial);    // wait for the serial port to open 的作用,把settime放到delay(7000)的前面的话读到的时间就没有初始时间了,这是为何?
  • TA的每日心情
    奋斗
    2016-7-29 10:58
  • 签到天数: 1 天

    [LV.1]初来乍到

    7#
    发表于 2016-7-29 10:56 | 只看该作者

    本人新手,求赐教
  • TA的每日心情
    郁闷
    2018-12-6 22:21
  • 签到天数: 48 天

    [LV.5]常住居民I

    8#
     楼主| 发表于 2016-7-29 19:14 | 只看该作者
    wangzway 发表于 2016-7-29 10:55
    用  delay(7000);  代替了  while (!Serial);    // wait for the serial port to open 的作用,把settim ...

    初始时间指的是什么?
    如果以上内容对你有帮助,你可以通过打赏支持作者
  • TA的每日心情
    擦汗
    2017-2-26 14:29
  • 签到天数: 23 天

    [LV.4]偶尔看看III

    9#
    发表于 2016-12-18 19:34 | 只看该作者
    uint64_t类型是什么?  还有什么 uint8? 在奈何的书中,数据类型那块也没找到
  • TA的每日心情
    郁闷
    2018-12-6 22:21
  • 签到天数: 48 天

    [LV.5]常住居民I

    10#
     楼主| 发表于 2016-12-18 21:43 | 只看该作者
    zjy 发表于 2016-12-18 19:34
    uint64_t类型是什么?  还有什么 uint8? 在奈何的书中,数据类型那块也没找到 ...

    前面写个U就是说类型无符号,64就是64位
    所以这个是无符号64位整形
    如果以上内容对你有帮助,你可以通过打赏支持作者
    您需要登录后才可以回帖 登录 | 立即注册  

    本版积分规则

    热门推荐

    博哥零基础教你玩转ESP8266(四) 认识一下ESP8266WiFi库
    博哥零基础教你玩转ESP826
    帖子导航: 博哥零基础教你玩转ESP8266(一) 重识ESP8266 博哥零基础教你玩转ESP8266
    博哥零基础教你玩转ESP8266(一) 重识ESP8266
    博哥零基础教你玩转ESP826
    https://blog.csdn.net/wubo_fly 帖子导航: 博哥零基础教你玩转ESP8266(一) 重识
    无线遥控四个灯泡
    无线遥控四个灯泡
    我有一个遥控器,一个接收板,还有四个灯泡,不知道如何连接在一起,然后控制灯亮
    AS608指纹模块在MEGA2560上的发出滋滋滋的声音
    AS608指纹模块在MEGA2560
    各位大佬求助!近日萌新在做一个门禁系统的毕设,老师要求买个指纹模块,我就去淘宝买
    求助~~!完全不懂的小白只想做一个简单的东西,大神请进。
    求助~~!完全不懂的小白只
    事情是这样,我想做一个通过人体红外感应模块控制电机的装置,这个电机只有一个,
    Copyright   ©2015-2016  Arduino中文社区  Powered by©Discuz!   ( 蜀ICP备14017632号-3 )
    快速回复 返回顶部 返回列表