I have the following code that runs every 30 seconds. I find that it publishes a few items and then stops…The indicator is flashing a fast aqua (connecting to the cloud). Everything indicates a strong wifi connection…What gives?
What does oneMin.interval() do? Most importantly how long will it keep that while() running?
Blocking the code flow for extended periods is not only bad practice but will also cause the cloud connection to break.
You should avoid these kinds of traps.
If you must have it, you should at least put a Particle.process() call into the loop or use SYSTEM_THREAD(ENABLED) to decouple the cloud process from your blocking code.
A better approach would go along the line of this
const uint32_t DELAY = 30000;
void loop() {
static uint32_t msDelay = 0;
if (millis() - msDelay >= DELAY) {
msDelay = millis();
// do your stuff every 30 seconds
}
}
This way loop() can be free running without blocking the cloud process that normally kicks in between iterations of loop().
Good to know…I will look into this. I have never done anything with OS on devices so I am not real familiar with what to use.
The .interval is a function from pollingTimer.h library. According to the library description:
// Returns true exactly once each delay interval.
//
// min_delay:
// If true, wait for full delay before returning true again.
// If false, wait for delay from when previous interval expired.
//
// This is only relevant if you don't call interval() during the millisecond
// in which the previous interval expired.