Как сказал DigitalNinja, delay
блокирует все. Если вы хотите, чтобы все работало, вы должны использовать прерывание.
Прерывание останавливает выполнение кода для перехода к определенной функции вне цикла. Это не блокирует часы как delay
. Все работает, но вы просто в основном вставляете свою функцию, когда она необходима, основываясь на внешнем событии (подъем на выводе, время истекло ...)
Вы можете использовать библиотеку Timer1 для выполнения действия каждые X секунд. Или создайте свою собственную систему, используя attachInterrupt .
Я взял этот пример на справочных страницах TimerOne и прокомментировал его
void setup()
{
// Your variables here
// ...
Timer1.initialize(500000); // initialize timer1, and set a 1/2 second period
Timer1.attachInterrupt(callback); // attaches callback() as the function to call when Timer is done
}
void callback()
{
// Do your thing when Timer is elapsed
// The timer goes automatically to zero. You don't need to reset it.
}
void loop()
{
// your program here...
// You never need to call callback() function, it is called WHEN Timer is done
}