Добрых суток всем! Нуждаюсь в помощи понимающих людей. Проблема вот в чем, делаю часы на SD3231, добавил будильник, но он срабатывае даже если я оключаю его в коде. инициализации и прочее не прописываю чтоб не захламлять Код (C++): boolean alarmState; // состояние будильникаб значение сохраняется и бнрется из EEPROM при старте МК void setup (){ clock.begin(); alarmState = EEPROM.read(8); clock.armAlarm1(alarmState); clock.armAlarm2(false); clock.clearAlarm1(); clock.clearAlarm2(); // используется только первый будильник } void loop(){ if (clock.isAlarm1()) { isAlarm = true; //переменная для активации сигнала clock.clearAlarm1(); clock.clearAlarm2(); } if (clock.isArmed1()) { // индикация состояния будильника digitalWrite(RED, HIGH); digitalWrite(GREEN, LOW); else { digitalWrite(RED, LOW); digitalWrite(GREEN, HIGH); } } void click_Alarm() { // функция кнопки переключателя состояния alarmState = !alarmState; EEPROM.write (8, alarmState); clock.armAlarm1(alarmState); clock.armAlarm2(false); clock.clearAlarm1(); clock.clearAlarm2(); } То есть, даже когда горит зеленая лампочка и вернувшееся значение состояния будильника false он все равно срабатывает. Думал, может это из за вторго, поэтому везде прописал установку второго в неактивное состояние. Библиотека DS3231.h с Github Пробовал на прерывании, но то же самое, срабатывет всегда. Хотелось бы решить проблему без костылей. Зарание спасибо!
Вот не понимаю, зачем в такой простой операции еще и библиотеку использовать? Просто сравниваем текущее время с временем будильника и разрешение работы пищалки будильника - все!
А мне вот непонятно, зачем отвечать если сказать по теме нечего. Просто поумничать? Не если уж вам ничего не понятно, я объясню... Библиотека там уже используется для массы других вещей и в том числе для проверки будильника, и эта операция выполняется в две строчки. Я надеюсь, Вы сочтете мои доводы убедительными и сочтете возможным ответить на мой вопрос.
А это не ответ? Что подобные библиотеки делают я в курсе, а вот что делает используемая вами библиотека - это вопрос, который вы задали. Лично мое мнение по поводу этой библиотеки, так она должна делать только работу с железкой, а вся остальная логика должна быть реализована программистом. Допустим, я использую эту библиотеку, но не пользуюсь будильником - у меня его вообще нет. Зачем мне лишний код, бесполезно тратящий ресурсы, которых и так мало?
Она с железкой и работает сставит, снимает и проверяет биты отвечающие за те или иные функции, тем более что вся логика уже реализованна в самой железке, в оригинале я собирался использовать прерывание, что вообще исключат обработку в коде. А то что предложили вы и есть костыли.
Жесть! Срочно выучите, что такое "прерывания"! Хорошо, тогда почему, например, в библиотеке для работы с датчиком температуры нет функций для терморегулятора и приходится писать "костыли" для управлением нагревателем?
Жесть, это когда человек умничает по теме в которой не разбирается. Ds3231 посылает прерывание на мк при срабатывании будильника, так что это не мне нужно уроки делать. Я вобще не вижу смысла в этой дискуссии, я не мнение о своих методах спрашивал, а о работе с модулем rtc.
Так выражайтесь точнее: я понял, что библиотечные функции будут вызываться в прерывании, а теперь оказывается, что просто обработка флага прерывания!
Что значит что вы его отключаете? Если Вы его просто уберёте из скетча, но задействован в жизни то он будет работать Я не очень понял в чём вопрос
Вот эта строчка, судя из описания активирует\деактивирует будильник clock.armAlarm1(alarmState); а эта: clock.isArmed1(); проверяет состояние будильника. В железе реализованно просто, если вернулся false- горит зеленый светодиод, если true- красный, кнопка перключает эти два состояния. Бит устанавливается, все отображается корректно но при совпадении времени будильник упрямо срабатывет. Конечно первая мысль была просто не проверять флаг будильника если alarmState==false, либо в обработке прерывания при alarmState==false сразу сбрасывать будильник. Но это те самые костыли, а хотелось бы чтоб модуль сам делал свою работу, плюс можно будет усыплять контроллер (но это так, на будущие).
А что их делать? Их и так валом И с будильником, и с радивом, и с фонарями - любая фантазия уже в продаже. Я бы ещё понял, если есть интерес потренироваться в написании изысканного кода без каких-либо библиотек (в обнимку с даташитами). Но писать то, что уже написано 1000 и 1 раз, спотыкаться на неведомые костыли, огрызаться на опытных кодеров...К чему это всё? Залез на любую кодерскую файлопомойку, скачал любую реализацию - сиди да и изучай.