Нужна помощь с серво

можно расшифровать жаргонное выражение? не все знаю далеко…

Бан в гугле? Хм, второй на этой неделе случай точечных санкций

Снимок экрана 2025-03-22 150723
Снимок экрана 2025-03-22 150756
А может быть зависимость по этой причине?

Этого мало. см #41

96 и 95 строчки если закоментить, то баг пропадает, но тогда и энкодер не работает…

это понятно.
также понятно почему серва дергается, столько напихать в обработчик.
зачем вам вообще прерывания?
в loop нельзя опрашивать энкодер?

2 лайка

без них энкодер оочень плохо работает. цикл длинный слишком. придется пихать опрос энкододера чуть не после каждой функции

Если энкодер не крутить, обработчик не вызывается вообще-то

не имею ни малейшего желания кого то запутать или что то соврать… говорю как есть. поочередно закоментировал все в лупе, эфекта небыло. стал вырезать по чуть чуть сетап - вспомнил что говорили что то про прерывания. а дальше - уже говорил.

Как по мне, где-то путаница, накладка. Может одно и тоже прерывание/пин в двух местах используется…
Не может неактивное прерывание тормозить ИМХО.

case 1: 
          lcd.clear();
          lcd.setCursor(1, 0); lcd.print("t"); lcd.write(1); lcd.setCursor(3, 0); lcd.print(val_temperature); lcd.write(4); lcd.write(1); lcd.setCursor(8, 0); lcd.print(Time.gettime("H:i:s"));
          lcd.setCursor(1, 1); lcd.write(2); lcd.setCursor(3, 1); lcd.print(val_humidity);lcd.print("%");lcd.setCursor(12, 1); lcd.write(5); lcd.setCursor(13, 1); lcd.print(counter);w = false;
         break;

Попробуйте вернуть 96 и 95стр, а в этом куске закомментируйте
lcd.print(Time.gettime(“H:i:s”));
Если компилятор будет ругаться, в сетапе один раз сделайте
Time.gettime(“H:i:s”);

не сработало… даже когда в 602й строке закоментировал вместе с 232й

Эти строки: стр. 232, 526, 602, 607 (не слабо)))

Если не поможет , плюс к этому
стр.86 Time.begin(); и стр125

не проще взять другую библиотеку для сервы?
servo2 помнится была такая…

Кстати, почему у вас на два прерывания один обработчик?

 attachInterrupt(0, encoder, CHANGE);
 attachInterrupt(1, encoder, CHANGE);

Может я чего-то не понимаю?

а тут незя delay убрать совсем ? пальцем в небо но мало ли поможет)))

тогда серва порвется…

это же не переменная, а функция…

Именно!

Это об этом ответ?

P.S. Я может и не прав, но int0 int1 - разные прерывания.
если бы PCINT, то да, одна функция на все пины

P.P.S. Сейчас надо будет отойти на несколько часов, поэтому скажу на эту тему что думаю:

  • Опрос RTC по-любому будет блокировать, может быть и не сильно заметно.
  • DHT если не принять специально меры - будет блокировать
  • iarduino библиотеки лучше заменить
  • если не включены все сообщения компилятора включить, и посмотреть, есть ли warning -и

При attachInterrupt() назначенная функция просто вызывается из ISR. Так что обработчики INT0/INT1 передадут на время управление назначенной функции. Поочередно.

1 лайк