Здравствуйте, я выполняю урок со сигнализацией из набора IArduino и в этом уроке я хотел бы добавить задержку после прерывания условия когда свет на фоторезистор попадает снова. Если свет попадает на фоторезистор, то программа сразу без задержек отключает зуммер и светодиод, а мне бы хотелось добавить задержку в 2 сек. и только после 2 сек. отключать “сигнализацию” Я добавлял переменные и пробовал через if и while но ничего не работает программа всё так же резко выключает сигналку. Есть ли решение?
const int pinRes1 = A4;
const int pinRes2 = A2;
const int pinLed = 9;
const int pinBeep = 12;
long ledTime;
long beepTime;
bool ledState = 0;
bool beepState = 0;
void setup() {
pinMode(pinLed, OUTPUT);
}
void loop() {
if(analogRead(pinRes2) >= analogRead(pinRes1)) { //если на фоторезистор не попадает свет, то...
if(ledTime + 200 < millis()) {
ledState = !ledState;
ledTime = millis();
}
digitalWrite(pinLed, ledState); //светодиод мигает
if(beepTime + 100 < millis()) {
beepState = !beepState;
beepTime = millis();
}
if(beepState==1) {
tone(pinBeep, 2000); //зуммер пищит
}
else noTone(pinBeep); //зуммер не пищит
}
else {
digitalWrite(pinLed, LOW); //выключаем светодиод
noTone(pinBeep); // отключаем зуммер
}
}
Смотрю на код и не вижу где
Или Вы нам какой-то другой код показали?
ua6em
10.Январь.2025 09:44:41
5
исправить 19 и 25 строку для начала, логику не смотрел
if( millis() - ledTime < 200 ) {
это изначальный код без моих правок
хотелось бы в 37 строке кода после else сделать задержку перед тем как выполниться отключение светодиода и зумера. Ещё пробовал писать delay но он не работает и влияет на весь код целиком, а не только после того как условие ложно
А на кой хрен Вы его выложили?
“У меня есть проблема с кодом, но я Вам его не покажу, покажу другой, помогайте ”.
Так что ли?
Делайте!
Не вижу как и что пробовал.
const int pinRes1 = A4;
const int pinRes2 = A2;
const int pinLed = 9;
const int pinBeep = 12;
long ledTime;
long beepTime;
int timer = 2000;
bool ledState = 0;
bool beepState = 0;
void setup() {
pinMode(pinLed, OUTPUT);
}
void loop() {
if (analogRead(pinRes2) >= analogRead(pinRes1)) {
timer == 2000;
if(ledTime + 200 < millis()) {
ledState = !ledState;
ledTime = millis();
}
digitalWrite(pinLed, ledState); //светодиод мигает
if(beepTime + 100 < millis()) {
beepState = !beepState;
beepTime = millis();
}
if(beepState==1) {
tone(pinBeep, 2000); //зуммер пищит
}
else noTone(pinBeep); //зуммер не пищит
} else
if (timer == 2000) {
timer--;
}
if (timer == 0) {
digitalWrite(pinLed, LOW);
noTone(pinBeep);
}
}
Внимательно посмотрите на строку №19
Если не увидите проблемы, почитайте Вашу книгу по языку и посмотрите на пример программ
Поле этого ещё раз внимательно посмотрите на стр. №19
И так до тех пор, пока не увидите очевидный бред и не исправите.
После этого проверьте всё и опубликуйте новый скетч, я ещё подскажу. Там ещё много глупостей, но слона надо по частям кушать.
ua6em
10.Январь.2025 16:38:08
13
думаешь на ТС подействует?