Metro库的使用说明(草稿)

2017-02-222万
AI 快速预览详细 收起
Metro库是一个用于Arduino的多线程库,允许用户实现定时任务。主要方法包括实例化Metro对象(默认间隔1000毫秒或自定义间隔),使用check()函数检查间隔时间是否已到,以及改变和重设间隔时间。样例代码展示了如何使用Metro库控制LED的闪烁频率。


众所周知,Arduino是没有办法进行多线程的操作的。但是我们可以用一些技巧来实现,其中metro库就是其中的一个。
简单来说Metro库是一个用于进行多线程的库。
相关使用方法如下:
方法Metro()
Instantiates a Metro object with a default interval of 1000 milliseconds.
实例一个Metro对象,并且默认间隔为1000毫秒。
Metro(unsigned long interval)
Instantiates a Metro object with a set interval in milliseconds.
实例一个Metro对象,并设定一个无符号长整数以毫秒为单位。
byte check()
Because Metro does not use interrupts, you have to "check" the Metro regularly (as often as possible). check() returns true if the interval has lapsed. Returns false if not.
由于Metro不采用中断,你必须经常检查Metro对象,返回true为失效,false为非失效。
void interval(unsigned long interval)
Changes the interval in milliseconds.
改变间隔时间以毫秒为单位。
void reset()
Restarts/resets the Metro. Often a good idea if you change the interval.
重设Metro对象。

样例代码:
[mw_shl_code=applescript,true]/*
This code will blink an LED attached to pin 13 on and off.
It will stay on for 0.25 seconds.
It will stay off for 1 second.
*/
#include <Metro.h> //Include Metro library
#define LED 13 // Define the led's pin

//Create a variable to hold theled's current state
int state = HIGH;

// Instanciate a metro object and set the interval to 250 milliseconds (0.25 seconds).
Metro ledMetro = Metro(250);

void setup()
{
  pinMode(LED,OUTPUT);
  digitalWrite(LED,state);
}

void loop()
{

  if (ledMetro.check() == 1) { // check if the metro has passed its interval .
    if (state==HIGH)  state=LOW;
    else state=HIGH;
   
    digitalWrite(LED,state);
  }
}[/mw_shl_code]

参考链接:
官方github的wiki
https://github.com/thomasfredericks/Metro-Arduino-Wiring/wiki
Arduino上有关事件驱动库的评估
http://blog.ardublock.com/zh/201 ... braries-on-arduino/

创作许可协议

本项目采用 None(不开放任何权利,保留所有权利) 进行许可。

评论(4)
iooops
iooops
所以它可以用来干啥。。
iooops
iooops回复微笑的rockets
好像很实用啊~
微笑的rockets
微笑的rockets
作者
回复iooops
在需要多线程操作的情况下,可以使用该库进行开发。
iooops
iooops
地板
iooops
iooops
板凳
iooops
iooops
沙发
- 没有更多了 -