ESP8266如何实现100微秒的ticker回调?
How to implement ticker callback at 100 micro seconds for ESP8266?
我有一个 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()
方法不存在。所以我接下来做的是:
- 下载最新的代码包as a zip file
- 从第 1 点解压压缩包
- 备份了
C:\Users\john\Documents\ArduinoData\packages\esp8266\hardware\esp8266.5.0-beta2\libraries\Ticker
- 将第 3 点中提到的文件夹替换为第 2 点中的 Ticker 文件夹。
- 重新启动我的 Arduino IDE
- 编译并运行代码
- 打开串行监视器
然而,当我检查串口监视器时,它打印的只是"True"。我期望值 s
以 10khz 的频率在 true 和 false 之间切换。
我做错了什么?
来自该库的文档:
The library use no interupts of the hardware timers and works with the micros() / millis() function.
该库通过轮询 micros()
和 millis()
函数在软件中实现定时器。它需要在 loop()
.
中调用 update()
方法
所以 loop()
的开头应该是:
void loop()
{
tickerObject.update();
if(s == true)
I'm trying to use a Ticker.h to sample an analog input consistently at a frequency of 10khz
值得一试,但这是一个基于软件的解决方案,容易出现抖动,具体取决于调用事件循环的频率。
我有一个 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()
方法不存在。所以我接下来做的是:
- 下载最新的代码包as a zip file
- 从第 1 点解压压缩包
- 备份了
C:\Users\john\Documents\ArduinoData\packages\esp8266\hardware\esp8266.5.0-beta2\libraries\Ticker
- 将第 3 点中提到的文件夹替换为第 2 点中的 Ticker 文件夹。
- 重新启动我的 Arduino IDE
- 编译并运行代码
- 打开串行监视器
然而,当我检查串口监视器时,它打印的只是"True"。我期望值 s
以 10khz 的频率在 true 和 false 之间切换。
我做错了什么?
来自该库的文档:
The library use no interupts of the hardware timers and works with the micros() / millis() function.
该库通过轮询 micros()
和 millis()
函数在软件中实现定时器。它需要在 loop()
.
update()
方法
所以 loop()
的开头应该是:
void loop()
{
tickerObject.update();
if(s == true)
I'm trying to use a Ticker.h to sample an analog input consistently at a frequency of 10khz
值得一试,但这是一个基于软件的解决方案,容易出现抖动,具体取决于调用事件循环的频率。