Одновременное использование двух датчиков с задержкой
Я хочу использовать ультразвуковой датчик и светодиод одновременно. Я хочу, чтобы светодиод мигал каждые 0,2 секунды, а ультразвук измерял расстояние независимо от мигания.
Проблема в том, что у меня есть следующий код для мигания:
digitalWrite(13, HIGH); delay(1000); digitalWrite(13, LOW); delay(200);
что также приводит к задержке работы ультразвукового датчика, но я хочу, чтобы он продолжал измерять расстояние. Есть какие-нибудь советы?
@O B., 👍2
Обсуждение2 ответа
Вы можете попробовать использовать millis(). Это таймер, который измеряет, как долго работает ваша программа. Посчитав немного математики, вы можете использовать миллис, чтобы светодиод мигал, не задерживая работу ультразвукового датчика.
Существует неблокирующая библиотека, которая работает аналогично 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.
>- Количество мигающих светодиодов с датчиком LDR
- KY-022 ИК-приемник, светодиод всегда горит, нет выхода
- Как установить таймеры, используя миллисекунды на 3 датчиках PIR?
- Затухание светодиода с помощью петли геркона
- Как я могу объединить эти два кода в одной программе? И используйте его в приложении javafx
- Почему светодиодное состояние ведет себя по-другому?
- Несколько условий оператора if
- Какова работа pulseIn?
посмотрите вверх, моргните без промедления. Который расскажет вам, как делать что-то одновременно., @ratchet freak
Библиотека NewPing не используетpulsIn. С помощью мигания без задержки ( https://www.arduino.cc/en/Tutorial/BlinkWithoutDelay ) для светодиода и NewPing (он находится в менеджере библиотеки) для ультразвукового датчика вы можете делать много других тоже самое, но больше не используйте в эскизе
delay
., @Jot