Благодарю. По кнопке учту, попробую. Но почему она всегда активна? При объявлении переменной swpr=false. Вроде если происходит нажатие, то возникает высокий уровень между землёй и пином 12. Тогда swpr=true, и обрабатываем нажатие. Или это не так работает?
upd:
Понял о чём вы именно. В clck(), после цикла, перед завершением функции нужно добавить
swpr=false;
тогда после выполнения функции переменная нажатия кнопки будет сбрасываться в false и постоянное срабатывание кнопки уйдёт. Вашу мысль верно понял?
А на счёт пропуска значений, вчера ненадолго заезжал к себе в мастерскую, попробовал просто в лупе задать переключение реле через delay();
void loop()
{
digitalWrite(sst, LOW);
delay(5000);
digitalWrite(sst, HIGH);
}
В итоге реле включается, но через 5 секунд не выключается обратно. Контроллер при этом не зависает, зависает сам модуль реле.
Реле отключается только после выключения питания. И так со всеми реле.
Попробовал так же на старте системы, вместо светодиода pon, подать высокий уровень на светодиод opr. Такая же проблема, при подключенной плате светодиодов, включаются все реле. При отключенной плате светодиодов, происходит то, что описал выше.
По ходу проблема кроется в аппаратной части, но что может быть не так? Пины не соединены друг с другом. Поставить на пины управления реле подтягивающие или стягивающие резисторы? Подавать питание на реле через 5В ардуино, а не от преобразователя?
Я уже думаю намудрить, поставить мосфеты на подачу питания реле, и держать их открытыми, а когда нужно сбросить состояние реле, закрывать соответствующий мосфет для отключения питания нужной реле. Но так бы не хотелось делать, да и пинов свободных на нано не осталось. Сдвиговый регистр конечно можно, но имхо, это всё лишнее, решение наверняка проще, но пока не понимаю какое.