Одновременное использование двух датчиков с задержкой

Я хочу использовать ультразвуковой датчик и светодиод одновременно. Я хочу, чтобы светодиод мигал каждые 0,2 секунды, а ультразвук измерял расстояние независимо от мигания.

Проблема в том, что у меня есть следующий код для мигания:

digitalWrite(13, HIGH);
delay(1000);
digitalWrite(13, LOW);
delay(200);

что также приводит к задержке работы ультразвукового датчика, но я хочу, чтобы он продолжал измерять расстояние. Есть какие-нибудь советы?

, 👍2

Обсуждение

посмотрите вверх, моргните без промедления. Который расскажет вам, как делать что-то одновременно., @ratchet freak

Библиотека NewPing не используетpulsIn. С помощью мигания без задержки ( https://www.arduino.cc/en/Tutorial/BlinkWithoutDelay ) для светодиода и NewPing (он находится в менеджере библиотеки) для ультразвукового датчика вы можете делать много других тоже самое, но больше не используйте в эскизе delay., @Jot


2 ответа


0

Вы можете попробовать использовать millis(). Это таймер, который измеряет, как долго работает ваша программа. Посчитав немного математики, вы можете использовать миллис, чтобы светодиод мигал, не задерживая работу ультразвукового датчика.

,

1

Существует неблокирующая библиотека, которая работает аналогично delay() Virtual Delay. Этот эскиз включает встроенный светодиод вашего Uno на 1 секунду, а затем несколько раз выключает его на 200 мс.

#include <Arduino.h>
#include "avdweb_VirtualDelay.h"

VirtualDelay delay1, delay2;

void setup(){

  pinMode(LED_BUILTIN, OUTPUT);
  digitalWrite(LED_BUILTIN, LOW);

}

void loop(){

  // Эта последовательность находится в тупике.
  if(delay1.elapsed()){
    digitalWrite(LED_BUILTIN, LOW);
    delay2.start(200);
  }

  if(delay2.elapsed()){
    digitalWrite(LED_BUILTIN, HIGH);
    delay1.start(1000);
  }

  // Это выводит из тупика. Вы можете начать с любого
  // объект задержки, который вам нужен, например, задержание2.start(0);
  DO_ONCE(delay1.start(0));

  // Здесь ваш код.

}

На веб-сайте автора библиотеки есть отличное руководство: таймер виртуальной задержки avdweb для Arduino.

>
,