Показать сообщение отдельно
Старый 28.10.2015, 11:28   #990
YAM1966
Гуру
 
Аватар для YAM1966
 
Регистрация: 01.06.2013
Возраст: 58
Регион: Украина
Машина: Toyota Fortuner 4.0 / Chevrolet Bolt EV
Сообщений: 2,006
YAM1966 has much to be proud ofYAM1966 has much to be proud ofYAM1966 has much to be proud ofYAM1966 has much to be proud ofYAM1966 has much to be proud ofYAM1966 has much to be proud ofYAM1966 has much to be proud ofYAM1966 has much to be proud ofYAM1966 has much to be proud ofYAM1966 has much to be proud ofYAM1966 has much to be proud of
По умолчанию

Ну, во первых я не вижу где выставляются значения на ногах при включении питания. Вижу только установку направления ног.
Далее, ACC и BAT надо получать не digitalRead, а analogRead с проверкой на нужный уровень. Для этого можно воспользоваться макросом:
Код:
#define Rinput        47.0 // Последовательное сопротивление
#define Rground       10.0 // Сопротивление на массу
#define VRef           5.0 // Опорное для ADC
#define Kmnog         ((Rground + Rinput) / Rground)
#define V2ADC(v)      ((u16)(((v) * 1024.0) / (VRef * Kmnog)))
и сравнивать со значением, например V2ADC(10.0)

p.s.
Далее, чтобы не запутаться в своих-же if() else.... лучше void loop() написать с использование switch, т.е.
Код:
#define POWER_ST_OFF 0
#define POWER_ST_ACC_ON 1

#define ACC_MIN_TRIP_POINT  V2ADC(10.0)

int POWER_ST;
int POWER_CNT;

в setup()
POWER_ST = POWER_ST_OFF
POWER_CNT = 0;

в loop()
{
   // Вызывать с интервалом например 1 мСек по таймеру
   PowerCheck();
}

void PowerCheck()
{
  switch(POWER_ST)
  {
  case POWER_ST_OFF:
    if(analogRead(ACC) >= ACC_MIN_TRIP_POINT)
    {
      // напряжение на АСС больше минимального
      if(++POWER_CNT >= 1000)
      {
         // АСС больше минимального более 1 сек
         POWER_CNT = 0;
         POWER_ST = POWER_ST_ACC_ON;
      }
    }
    else
    {
      POWER_CNT = 0;
    }
    break;
  case POWER_ST_ACC_ON:
    ..................
    break;
  }
}
Ну и так далее, меньше условий тут запутаться.

Последний раз редактировалось YAM1966; 28.10.2015 в 11:59.
YAM1966 вне форума   Ответить с цитированием