Я использую такой код на электроне частицы, чтобы сообщать счет импульсов от расходомера моего кегератора к облаку частиц:
void meterInterrupt(void) {
detachInterrupt(pin);
ticks++;
cloudPending = 1;
attachInterrupt(pin, meterInterrupt, FALLING);
}
void publishStatus() {
if (!cloudPending) {
return;
}
cloudPending = 0;
getStatus(&statusMessage);
// status message contains number of ticks since last publish
bool published = Particle.publish("Ticks", statusMessage, PRIVATE);
if (published) {
resetMeters();
lastPublish = millis();
}
}
void loop() {
if ((millis() - lastPublish) >= 1000) {
publishStatus();
}
}
Когда я скручиваю журнал событий в свой терминал, я вижу два события для первой публикации следующим образом:
event: Ticks
data: {"data":"ticks:1","ttl":60,"published_at":"2018-07-03T22:35:01.008Z","coreid":"420052000351353337353037"}
event: hook-sent/Ticks
data: {"data":"","ttl":60,"published_at":"2018-07-03T22:35:01.130Z","coreid":"particle-internal"}
event: Ticks
data: {"data":"ticks:46","ttl":60,"published_at":"2018-07-03T22:35:01.193Z","coreid":"420052000351353337353037"}
event: hook-sent/Ticks
data: {"data":"","ttl":60,"published_at":"2018-07-03T22:35:01.303Z","coreid":"particle-internal"}
Я не понимаю, как это могло произойти. Почему он просто не сообщил «тики: 47»? Чего мне не хватает?
UPDATE:
Я провел дополнительное тестирование и заметил, что Particle.publish возвращает false в первый раз, когда он фактически завершается успешно. Это проблема тайм-аута? Разница во времени между этими публикациями составляет всего около 200 мс.