Показать сообщение отдельно
Старый 06.05.2019, 22:28   #196
oleg707
Гуру
 
Аватар для oleg707
 
Регистрация: 16.04.2014
Возраст: 40
Город: Gdynia
Регион: другой - для добавления сообщить ab
Сообщений: 2,548
oleg707 has a reputation beyond reputeoleg707 has a reputation beyond reputeoleg707 has a reputation beyond reputeoleg707 has a reputation beyond reputeoleg707 has a reputation beyond reputeoleg707 has a reputation beyond reputeoleg707 has a reputation beyond reputeoleg707 has a reputation beyond reputeoleg707 has a reputation beyond reputeoleg707 has a reputation beyond repute
По умолчанию

Цитата:
Сообщение от 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 прошивку на стенде, при включении зажигания коротко замыкает кнопку и дальше просто ожидает, и вЫключении зажигания коротко замыкает кнопку и дальше просто ожидает.
Понаблюдаем.
oleg707 вне форума   Ответить с цитированием