Цитата:
Сообщение от murano
Подозреваю проблема кроется в циклическом выполнении процедур
Код:
void obrabotka_ACC_OFF() и void obrabotka_ACC_ON()
После того, как добавил переменную
Код:
bool screen_on = false
, в которой хранится состояние экрана (on - off), и сделал изменения в указанных выше процедурах, обозначенная ранее ситуация исчезла:
void obrabotka_ACC_ON()
Код:
...
if (HALL_as_power_Switch == 1 && screen_on == false) {
if (millis() - pauseTimeACC >= SLEEP_timer_pri_vkl_ACC ) {SLEEP = 1;}//digitalWrite(SLEEPpin, 0); /*включаем экран*/
if (millis() - pauseTimeACC >= (SLEEP_timer_pri_vkl_ACC+vremia_uderjanija_najatoj_knopki_POWER) ) {
SLEEP = 0;
screen_on = true;
}
}
...
void obrabotka_ACC_OFF()
Код:
...
if (HALL_as_power_Switch == 1 && screen_on == true) {
if (millis() - pauseTimeACC >= SLEEP_timer_pri_vykl_ACC ) {SLEEP = 1;}//digitalWrite(SLEEPpin, 0); /*включаем экран*/
if (millis() - pauseTimeACC >= (SLEEP_timer_pri_vykl_ACC+vremia_uderjanija_najatoj_knopki_POWER) ) {
SLEEP = 0;
screen_on = false;
}
}
...
Откатал сегодня день, проблем пока не было.
|
вообще странно, поскольку оно то крутится в цикле, но
if (millis() - pauseTimeACC >= SLEEP_timer_pri_vykl_ACC ) {SLEEP = 1;}//digitalWrite(SLEEPpin, 0); /*включаем экран*/
if (millis() - pauseTimeACC >= (SLEEP_timer_pri_vykl_ACC+vremia_uderjanija_najato j_knopki_POWER) ) { SLEEP = 0;}
по циклу мы сначала даем команду на включение лог. нуля, "нажимая" кнопку, а потом через время (vremia_uderjanija_najatoj_knopki_POWER) начинаем подавать 1, "размыкая" кнопку.
В цикле мы продолжаем давать 1 на порт процессора, это держит твердотельное реле открытым всё время.
Я прогнал m40 прошивку на стенде, при включении зажигания коротко замыкает кнопку и дальше просто ожидает, и вЫключении зажигания коротко замыкает кнопку и дальше просто ожидает.
Понаблюдаем.