Как реализовать обратный вызов тикера на 100 микросекунд для ESP8266? - PullRequest
0 голосов
/ 09 февраля 2019

У меня есть плата разработки ESP8266 NodeMCU 12E, и я использую Arduino IDE.Я пытаюсь использовать Ticker.h для последовательной выборки аналогового входа на частоте 10 кГц, что составляет одну выборку каждые 100 мкс.Я заметил, что 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. Загрузите последний пакет тикеров в виде zip-файла
  2. Распакуйте пакет из пункта 1
  3. Сделанорезервное копирование C:\Users\john\Documents\ArduinoData\packages\esp8266\hardware\esp8266\2.5.0-beta2\libraries\Ticker
  4. Заменил папку, упомянутую в пункте 3, на папку Ticker в пункте 2.
  5. Перезапустил мою Arduino IDE
  6. Скомпилировал и запустил код
  7. Открыт последовательный монитор

Однако, когда я проверяю последовательный монитор, все, что он печатает, это "True".Я ожидал, что значение s будет переключаться между истиной и ложью с частотой 10 кГц.

Что я сделал не так?

1 Ответ

0 голосов
/ 09 февраля 2019

Из документации этой библиотеки:

Библиотека не использует аппаратные таймеры и работает с функцией micros () / millis ().

Эта библиотека реализует таймеры в программном обеспечении, опрашивая функции micros() и millis().Для этого требуется update() метод, который должен быть вызван в loop().

Таким образом, начало loop() должно быть:

void loop()
{
    tickerObject.update();

    if(s == true)

Я пытаюсь использоватьTicker.h для последовательной выборки аналогового входа на частоте 10 кГц

Это стоит того, но это программное решение, которое подвержено дрожанию в зависимости от того, как часто можно вызывать цикл обработки событий..

...