< >
Home » Arduino库教程 » Arduino库教程-Bridge-Time Check

Arduino库教程-Bridge-Time Check

Time Check(检查时间)

  • 这个yun设备例子通过Bridge从Linux processor里获得时间,然后arduino分析时分秒。yun设备必须连接到一个网络来获得准确的时间。如果你用网络型WiFi接口来配置yun设备的网络,确保你选中合适的时间区域。

硬件要求

  • yun开发板或者 shield
  • 连接到互联网的WiFi 网络

电路

请输入图片描述
这个例子无额外的连线
图由 Fritzing 软件绘制

样例代码

  • 你需要包含Process 头文件:
#include <Process.h>
  • 创建一个用来获得日期的Process例子,并创建一个保存当前时分秒数据的变量。也要创建一个保存先前时间的变量。为了开始,放进一个不可能是有效时间的值(如一个负数)。
Process date;        
int hours, minutes, seconds;  
int lastSecond = -1;

[Get Code]

  • 在setup()里初始化Bridge和Serial。等到有串口连接(在继续连接到程序和打印状态到串口监视器之前)。
void setup() {
  Bridge.begin();     
  Serial.begin(9600); 

  while(!Serial);      
  Serial.println("Time Check");

[Get Code]

  • 运行一个初始化process,通过在date里增加一个参数“T”来获得时间。
if (!date.running())  {
    date.begin("date");
    date.addParameter("+%T");
    date.run();
  }
}

[Get Code]

  • 在loop()里检查是否有秒经过先前的时间。如果有,打印当前时间到串口监视器,并且如果它停止了,重启date
    process。
void loop() {
  if(lastSecond != seconds) {  // if a second has passed
    if (hours <= 9) Serial.print("0");    // adjust for 0-9
    Serial.print(hours);    
    Serial.print(":");
    if (minutes <= 9) Serial.print("0");  // adjust for 0-9
    Serial.print(minutes);
    Serial.print(":");
    if (seconds <= 9) Serial.print("0");  // adjust for 0-9
    Serial.println(seconds);

    if (!date.running())  {
      date.begin("date");
      date.addParameter("+%T");
      date.run();
    }
  }

[Get Code]

  • 如果有从date process出来的结果,分析这个数据。首先,保存结果(hh:mm:ss)到一个字符串里,然后用indexOf() 和 lastIndexOf()找到冒号的本地。
while (date.available()>0) {
    String timeString = date.readString();    

    int firstColon = timeString.indexOf(":");
    int secondColon= timeString.lastIndexOf(":");

[Get Code]

  • 知道冒号的索引数字后,你可以作为子字符串分割时分秒:
String hourString = timeString.substring(0, firstColon); 
    String minString = timeString.substring(firstColon+1, secondColon);
    String secString = timeString.substring(secondColon+1);

[Get Code]

  • 最后,转化字符串为整数,并且保存先前的秒作为下一个loop()的时间对比。
hours = hourString.toInt();
    minutes = minString.toInt();
    lastSecond = seconds;  
    seconds = secString.toInt();
  } 
}

[Get Code]

  • 完整代码如下:
/*
  Time Check

 Gets the time from Linux via Bridge then parses out hours,
 minutes and seconds using a Yún101/YunShield/Yún.

 created  27 May 2013
 modified 21 June 2013
 By Tom Igoe

 This example code is in the public domain.

 http://www.arduino.cc/en/Tutorial/TimeCheck

 */


#include <Process.h>

Process date;                 // process used to get the date
int hours, minutes, seconds;  // for the results
int lastSecond = -1;          // need an impossible value for comparison

void setup() {
  Bridge.begin();        // initialize Bridge
  SerialUSB.begin(9600);    // initialize serial

  while (!Serial);              // wait for Serial Monitor to open
  SerialUSB.println("Time Check");  // Title of sketch

  // run an initial date process. Should return:
  // hh:mm:ss :
  if (!date.running()) {
    date.begin("date");
    date.addParameter("+%T");
    date.run();
  }
}

void loop() {

  if (lastSecond != seconds) { // if a second has passed
    // print the time:
    if (hours <= 9) {
      SerialUSB.print("0");  // adjust for 0-9
    }
    SerialUSB.print(hours);
    SerialUSB.print(":");
    if (minutes <= 9) {
      SerialUSB.print("0");  // adjust for 0-9
    }
    SerialUSB.print(minutes);
    SerialUSB.print(":");
    if (seconds <= 9) {
      SerialUSB.print("0");  // adjust for 0-9
    }
    SerialUSB.println(seconds);

    // restart the date process:
    if (!date.running()) {
      date.begin("date");
      date.addParameter("+%T");
      date.run();
    }
  }

  //if there's a result from the date process, parse it:
  while (date.available() > 0) {
    // get the result of the date process (should be hh:mm:ss):
    String timeString = date.readString();

    // find the colons:
    int firstColon = timeString.indexOf(":");
    int secondColon = timeString.lastIndexOf(":");

    // get the substrings for hour, minute second:
    String hourString = timeString.substring(0, firstColon);
    String minString = timeString.substring(firstColon + 1, secondColon);
    String secString = timeString.substring(secondColon + 1);

    // convert to ints,saving the previous second:
    hours = hourString.toInt();
    minutes = minString.toInt();
    lastSecond = seconds;          // save to do a time comparison
    seconds = secString.toInt();
  }

}

[Get Code]
更多

  • Bridge: 从网页浏览器进入开发板的引脚。
  • Console ASCII Table: 示范了怎样打印多种格式到控制台。
  • Console Pixel: 通过控制台控制一个LED灯。
  • Console Read: 从控制台那里分析信息,然后重复发送返回。
  • Datalogger: 在SD卡上保存传感器信息。
  • File Write Script: 示范怎样在Process上写入和执行外壳脚本。
  • HTTP Client: 建造一个简单的客户端,可以下载网页并且打印到串口监视器。
  • HTTP Client Console: 建造一个简单的客户端,可以下载网页并且用控制台通过WIFI打印到串口监视器。
  • Mailbox Read Messages: 用REST API通过一个网页发送文本信息到。
  • Process: 示范怎么用Process运行 Linux 命令。
  • Remote Due Blink: 示范怎么远程上传程序到DUE开发板上。
  • Shell Commands: 用Process 来运行 shell 命令。
  • SpacebrewYun: 在Arduino IDE软件的例子上看更多关于 Spacebrew 文档信息。
  • Temboo: 在Arduino IDE软件的例子上看更多关于 Temboo 文档信息。
  • Temperature Web Panel: 当浏览者要求时,粘贴传感数据到网页上。
  • Time Check: 从网络的时间服务器获得时间,并且打印到串口监视器。
  • WiFi Status: 运行一个预配置的脚本,报告返回当前wifi网络的强度。
  • Yun First Config: 用串口监视器不费力地连接你的云产品到wifi网络,并且在上面回答一些简单的问题。
  • Yun Serial Terminal: 通过串口监视器进入Linux终端。

纠错,疑问,交流: 请进入讨论区点击加入Q群

获取最新文章: 扫一扫右上角的二维码加入“创客智造”公众号


标签: arduino库教程, arduino time check