Проверьте, происходит ли набор событий в течение ограниченного периода времени
Я делаю проект, в котором использую 4 инфракрасных датчика для ввода данных. Я хочу, чтобы это работало так, что когда один из датчиков срабатывает, код прослушивает входные данные от других датчиков в течение фиксированного периода времени (скажем, 2 секунды). На основе этих данных выполняются дальнейшие функции.
Я присваиваю номер каждому из датчиков, а последовательность их срабатывания сохраняется в массиве, например:
// Все соответствующие выводы ИК-датчиков устанавливаются на вход с именами ir1,ir2,ir3,ir4
int sequence[] = {0,0,0,0}
int s1 = digitalRead(ir1); //и аналогично для всех остальных пинов
int counter = 0;
if(s1==1){
sequence[counter] = 1; //аналогично 2 для s2 и так далее
counter ++;
}
Я пытаюсь сделать что-то вроде этого:
if(s1 == 1 || s2==1 || s3 == 1 || s4 == 1){
if(s1 == 1){
sequence[counter] = 1;
counter ++;
// Начинаем слушать другие датчики
} // аналогично проверяем, какой датчик сработает первым
// Разрешить 2 секунды для ввода со всех датчиков (также не допускается ввод данных ни от одного из них)
// Через 2 секунды выполнить некоторый код на основе массива последовательностей, который был обновлен на основе входных данных с разных датчиков
}
Как мне это сделать?
@RishiC, 👍1
Обсуждение1 ответ
Лучший ответ:
Вот некоторый псевдокод, который может помочь:
if millis() - start time >= 2000
время вышло, делайте что хотите с последовательностью до сих пор
может быть, логический флаг здесь, так что вы делаете это только один раз
if any button is pressed
if counter == 0
set start time = millis() // запускаем таймер
установить первым по порядку
else
добавить кнопку в последовательность
Спасибо, это сработало. Я поместил код для проверки входных данных от датчиков в цикл while и использовал функцию millis() в качестве условия пока
. Что-то вроде int a = millis(); int b= миллис(); while(ab <=200){... a=millis() // обновляет a в конце каждого цикла}
, @RishiC
- Как сделать очень долгую функцию delay(), несколько часов
- Разница между «time_t» и «DateTime»
- Получение BPM из данного кода
- Создание таймера с использованием часов реального времени с указанием времени начала и остановки
- Arduino непрерывно считывает значение АЦП с помощью прерывания
- Генерация стабильной частоты
- Как исправить ошибку компиляции для tone (), используя тот же таймер, что и другая функция
- Использовать timer0, не влияя на millis() и micros().
Обязательно посмотрите на принцип синхронизации, показанный в примере «BlinkWithoutDelay», который поставляется с Arduino IDE., @chrisl