Постоянное отключение сигнализации

#include <RTClib.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>


LiquidCrystal_I2C lcd(0x27,16,2);  // установите адрес ЖК-дисплея на 0x27 для 16 символов и 2-строчного дисплея
int nowHr, nowMin, nowSec;
RTC_DS3231 rtc;
const int pin_contact= 6; 
const int buzzer = 9; 
//first alarm
int h1=15;
int m1=51;
int s1=0;

void timeScreen() {              // функция отображения даты и времени на LCD

  DateTime now = rtc.now();             // take rtc time and print in display
    lcd.clear();
    lcd.setCursor(0, 0);
    lcd.print("Time:");
    lcd.setCursor(6, 0);
    lcd.print(nowHr = now.hour(), DEC);
    lcd.print(":");
    lcd.print(nowMin = now.minute(), DEC);
    lcd.print(":");
    lcd.print(nowSec = now.second(), DEC);
    lcd.setCursor(0, 1);
    lcd.print("Date: ");
    lcd.print(now.day(), DEC);
    lcd.print("/");
    lcd.print(now.month(), DEC);
    lcd.print("/");
    lcd.print(now.year(), DEC);
    delay(500);

}


void setup()
{
Wire.begin();
   //rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));            // uncomment this to set the current time and then comment in next upload when u set the tim
  rtc.adjust(DateTime(2021, 03, 27, 15, 50, 50));                // manual time set
  lcd.backlight();
  lcd.begin(16, 2);
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("hello");                                      // печать месседжа при запуске
  lcd.setCursor(0, 1);
  lcd.print("world");
  delay(1000);
  timeScreen();
  delay(3000);
  lcd.clear();
 // Установить зуммер - вывод 9 в качестве выхода
    pinMode(pin_contact, INPUT);
   
 // Установить зуммер - вывод 9 в качестве выхода
   
    Serial.begin(9600);
}


void loop()
{
   timeScreen();
   lcd.backlight();
   at8am();
   Serial.begin(9600);
}

void at8am() {                      // функция, чтобы начать гудеть в 8 утра

  DateTime t = rtc.now();

  if (int(t.hour()) == h1 && int(t.minute()) == m1    ) {
        /////////////////////////////////////////////////////
        lcd.clear();
        lcd.setCursor(0, 0);
        lcd.print("Time for ");
        lcd.setCursor(0, 1);
        lcd.print("breakfast");
   stopbuzzer();
         delay(5000);


        /////////////////////////////////////////////////////

      }
}


void stopbuzzer ()
{
   int buzzer_state=1;
      
  int stare_contact = digitalRead(pin_contact); 

  if (stare_contact == HIGH && buzzer_state==1) 
   {
buzzer_state=0; 
   }

    digitalWrite(buzzer,buzzer_state);

    }

- Алло ! Мое намерение состоит в том, чтобы остановить сигнал тревоги после нажатия кнопки. В этом коде звонит зуммер, когда если условие выполнено, и он останавливается при нажатии кнопки, но не навсегда, он продолжает звонить до тех пор, пока условия доступны. Как может зуммер перестать звонить после нажатия кнопки?

, 👍0

Обсуждение

Пожалуйста, без кода в качестве изображения. Вы можете скопировать и вставить код в виде текста в вопрос, а затем правильно отформатировать его (выбрав его и нажав кнопку" {}")., @chrisl

И, пожалуйста, предоставьте полный компилируемый код, @chrisl

Я редактировал сейчас @chrisl, @Biancaaa

Я предполагаю, что под "при наличии условий" вы подразумеваете, что будильник будет перезапускаться в течение 1 минуты каждые 5 секунд. Вы проверяете только время и минуты, равные времени будильника. Как насчет того, чтобы также проверить секунды? Также: Почему вы начинаете последовательно на каждой итерации цикла? Это не имеет смысла., @chrisl

Если вы хотите остановить его “навсегда”, вы можете вызвать "выход(0)" или "прервать ()" сразу после его остановки., @Edgar Bonet

@EdgarBonet спасибо тебе!, @Biancaaa

Это ответ на ваш вопрос? Зуммер+кнопка+arduino, @Juraj

@Juraj не совсем, это все еще не работает, @Biancaaa

и почему вы создали новый вопрос?, @Juraj

@Juraj, потому что это связано с новой проблемой, которая у меня есть, @Biancaaa