【问题标题】:How to implement ticker callback at 100 micro seconds for ESP8266?如何为 ESP8266 实现 100 微秒的股票回调?
【发布时间】:2019-02-08 22:42:32
【问题描述】:

我有一个 ESP8266 NodeMCU 12E 开发板,我正在使用 Arduino IDE。我正在尝试使用Ticker.h 以 10khz 的频率一致地对模拟输入进行采样,即每 100us 一个样本。我注意到 Ticker sampler; sampler.attach(0.0001,callbackfunc); 不起作用,因为 attach() 不会采用值 0.0001。

然后我根据我看到的一些指南编写了以下代码:

#include <ESP8266WiFi.h>
#include <Ticker.h>

bool s = true;
void getSample()
{
  s = !s;
}
Ticker tickerObject(getSample, 100, 0, MICROS_MICROS);

const char *ssid =  "___";  // Change it
const char *pass =  "___";  // Change it

void setup()
{
  Serial.begin(115200);
  Serial.println(0);      //start
  WiFi.mode(WIFI_STA);
  WiFi.begin(ssid, pass);

  tickerObject.start();

}


void loop()
{
    if(s == true)
    {
      Serial.println("True");
    }
    else
    {
      Serial.println("False");
    }
}

但是,这没有编译,因为tickerObject.start() 方法不存在。所以我接下来要做的是:

  1. 下载最新代码包as a zip file
  2. 从第 1 点解压缩包
  3. 备份了C:\Users\john\Documents\ArduinoData\packages\esp8266\hardware\esp8266\2.5.0-beta2\libraries\Ticker
  4. 将第 3 点中提到的文件夹替换为第 2 点中的 Ticker 文件夹。
  5. 重新启动我的 Arduino IDE
  6. 编译并运行代码
  7. 打开串行监视器

但是,当我检查串行监视器时,它打印的所有内容都是“True”。我期待值 s 以 10khz 的频率在真假之间切换。

我做错了什么?

【问题讨论】:

    标签: esp8266 ticker


    【解决方案1】:

    来自这个库的文档:

    该库不使用硬件计时器的中断,并与 micros() / millis() 函数一起使用。

    该库通过轮询micros()millis() 函数在软件中实现定时器。它需要在loop() 中调用update() 方法。

    所以loop()的开头应该是:

    void loop()
    {
        tickerObject.update();
    
        if(s == true)
    

    我正在尝试使用 Ticker.h 以 10khz 的频率一致地采样模拟输入

    值得一试,但这是一个基于软件的解决方案,根据调用事件循环的频率,它很容易出现抖动。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-17
    相关资源
    最近更新 更多