Оператор IF для запуска, даже если требование больше не выполняется
Я сделал мигалку для фар своего гоночного автомобиля. Хотя он работает, когда я держу переключатель нажатым, если я отпускаю переключатель и цепь замыкается, мои требования к операторам IF больше не выполняются, и он перестает мигать.
Есть ли способ, чтобы он продолжал выполнять оператор IF (но только один раз) даже после того, как я отпустил переключатель и требование больше не выполняется?
Заранее спасибо.
КОД:
#define trig A3
const int flash = 3; //D3
const float mVc = 4.67; //опорное напряжение
float counts = 0;
float mV = 0;
void setup() {
Serial.begin(115200);
pinMode(flash, OUTPUT);
}
void loop() {
counts = analogRead(trig);
//количество = 255;
Serial.println(String(counts));
mV = (counts*mVc) / 1000;
Serial.println("Input Voltage: " + String(mV) + "v");
// задержка (1000);
// напряжение необходимо изменить на соответствующее выходному напряжению на автомобиле
if (counts > 10) {
analogWrite(flash, 100);
delay(300);
analogWrite(flash, 0);
delay(80);
analogWrite(flash, 100);
delay(300);
analogWrite(flash, 0);
delay(80);
analogWrite(flash, 100);
delay(300);
analogWrite(flash, 0);
delay(80);
analogWrite(flash, 100);
delay(300);
analogWrite(flash, 0);
delay(80);
analogWrite(flash, 100);
delay(300);
analogWrite(flash, 0);
delay(1000);
}
}
ИЗМЕНИТЬ:
TL;DR Не используйте делители напряжения для питания Nano.
При использовании делителя напряжения для питания Nano (знаю, знаю) приведенное ниже решение не решило проблему. Я думал, что это может быть связано с падением напряжения, когда Nano подает 5vo на MOSFET, но я не уверен, почему удерживание переключателя остановит это. Несмотря на это, я переключился на линейный стабилизатор напряжения, а затем он начал мигать, "Ура!" - почти.
При включенном регуляторе код постоянно работал. Я решил распечатать количество запусков и получил число более 35 000, что означает, что флэш-память будет запускаться 5 раз для > 35 000 раз. Хотя мне было любопытно, что произойдет, когда он достигнет нуля, я решил вернуться к своему исходному коду, и... теперь он работает.
Поэтому я думаю, что урок таков: даже если вы можете рассчитать падение напряжения, не подключайте Nano к делителю напряжения.
Я проверил приведенный ниже ответ как решение, хотя он не решил мою проблему, нет никаких причин, по которым он не должен был работать, и он может быть полезен кому-то еще.
@dav0s, 👍1
Обсуждение1 ответ
Лучший ответ:
Вверху можно определить переменную int runcount = 0
. Затем измените логику цикла на что-то вроде
if (counts > 10) {
runcount = 2;
}
if (runcount-- > 0) {
// кричащий
}
Эффект заключается в том, что пока кнопка нажата и подсчитывает > 10
, количество запусков равно двум. Каждый раз, когда мы проверяем количество запусков, оно уменьшается на 1. Пока кнопка нажата, количество запусков сбрасывается до 2. Если вы отпустите кнопку, количество запусков будет равно 1 в начале проверки условия if. Он будет сравнен с 0, условие будет истинным, затем оно будет уменьшено до 0, а секция if будет выполнена в последний раз. Использование числа, отличного от 2, изменит количество дополнительных запусков.
Спасибо, я попробую это завтра, и тогда все, что осталось, это «легко» установить его на машину. :), @dav0s
- Отправка значения с одного Arduino на другой
- Уменьшить яркость светодиода с помощью NPN-транзистора
- установка выходного аналогового/цифрового контакта на землю
- Почему все аналоговые выводы измеряют одно и то же значение?
- Nano: все цифровые контакты ничего не выводят
- Чтение аналогового значения при генерации сигнала ШИМ
- ШИМ-сигнал с рабочим циклом 50 % и рассчитанной частотой
- Почему светодиоды влияют на аналоговый вход?
почему вы используете аналоговый ввод-вывод?, @jsotola