Основные различия между функциями delay и millis в Arduino:
  - delay() останавливает выполнение программы на заданное временное значение перед следующим действием или циклом.                                                                          amperkot.ru                       В отличие от millis(), это блокирующая функция, то есть во время задержки нельзя выполнять другие задачи.                                                                          www.industrialshields.com                      
- millis() возвращает число миллисекунд, прошедших с момента запуска программы.                                                                          www.industrialshields.com                                                                                               dzone.com                       Эта функция неблокирующая, то есть во время ожидания можно выполнять другие коды.                                                                          dzone.com                      
Таким образом, millis() рекомендуется использовать для циклов, содержащих несколько переменных и условий, а delay() — в более простых программах и циклах, содержащих действия с одной переменной, где не требуется возвращаться к начальному значению времени.                                                                          amperkot.ru