Звуковые сигналы датчиков с временной шкалой
Я перепробовал много кодов, чтобы это сработало, но ничего не помогает, поэтому мой код должен работать так: если звуковой датчик (3 контакта, A2) посылает 5 сигналов в Arduino в течение 10 секунд (временной промежуток каждого сигнала варьируется, но не имеет значения, пока он посылает 5 сигналов), то светодиод (13) загорается. Это мой недавний код если он может помочь
int led=13;
int sensor=A2;
void setup()
{
pinMode(led, OUTPUT);
pinMode(sensor, INPUT);
Serial.begin(9600);
}
void loop()
{
unsigned long StartMillis = millis();
unsigned long CurrentMillis = millis();
int signal_count=digitalRead(sensor);
int signal_limit=5;
Serial.println(signal_count);
while ((CurrentMillis - StartMillis)==5000)
if (digitalRead(sensor)=0)
{ signal_count ++;
Serial.println(signal_count);
}
if (signal_count>signal_limit) {
digitalWrite(led, HIGH);
}
else {
digitalWrite(led,LOW);
}
}
1 ответ
Вы неправильно обращаетесь с millis ()
. С помощью этих двух строк:
unsigned long StartMillis = millis();
unsigned long CurrentMillis = millis();
StartMillis
всегда будет иметь то же значение, что и currentMillis
. (Хорошо, я предполагаю, что millis()
может вернуть значение, увеличенное на 1 при втором вызове, но это крайне маловероятно. Выполнение 2 строк занимает гораздо меньше миллисекунды.)
Ваш
while ((CurrentMillis - StartMillis)==5000)
никогда не будет выполнено значение true, поэтому код в блоке while никогда не будет выполняться.
Это утверждение if также неверно:
if (digitalRead(sensor)=0)
Вы хотите ==
(сравнение) не =
назначение. Я удивлен, что компилятор даже позволил это скомпилировать, так как вы пытаетесь установить функцию digitalRead(датчик)
в 0, что не имеет смысла.
Измените этот код следующим образом:
if (digitalRead(sensor)==0)
(Предполагая, что вы хотите, чтобы тело оператора if выполнялось, когда значение вашего датчика равно 0.)
- Какова работа pulseIn?
- Сколько датчиков может поддерживать один модуль Arduino?
- Получение BPM из данного кода
- Как подключить более 10 датчиков к Arduino uno r3
- Как использовать два ультразвуковых датчика для управления двигателем 5 Вольт?
- Чтение датчика давления от 4 до 20 мА с использованием uno
- Что выбрать между датчиками температуры и влажности: AM230x или DHT22?
- SRF04 Ультразвуковой датчик - неточные показания
подумайте о первых двух строках программы внутри блока loop ().... что они делают?, @jsotola
Какой звуковой датчик вы используете? Является ли его выход аналоговым или цифровым? А что вы подразумеваете под "сигналом"? Что для вас считается "сигналом"?, @chrisl
Я использую сенсорный модуль цифрового звукового детектора. Я не знаю, но он, вероятно, использует аналоговый (это то, что я получил из ссылок на веб-сайт). Сигнал, о котором я говорил, - это сигнал, посылаемый датчиком звука на arduino (ВЫСОКИЙ или НИЗКИЙ), @Marc Allen Damandaman
И все же вы не объяснили, что такое "сигнал". Значит ли это, что датчик должен идти сначала высоко, а затем низко ( импульс)? Или как вы хотите считать "сигналы"?, @chrisl
Я просто хотел подсчитать ВЫСОКИЕ сигналы, а затем использовать количество сигналов, полученных за короткий промежуток времени, чтобы вызвать загорание светодиода, @Marc Allen Damandaman