Показать сообщение отдельно
Старый 28.03.2016, 13:28   #23
RyuuKiiroi
Старший Пользователь
 
Регистрация: 15.08.2015
Возраст: 34
Город: Жуковский
Регион: 50, 90, 150
Машина: Emgrand X7
Сообщений: 105
RyuuKiiroi is on a distinguished road
По умолчанию

Не заработал у меня в общем код, который везде на этом форуме используется, по крайней мере в том варианте, в котором мне нужен. Получилось что то такое. Не знаю, нужен ли еще какой то функционал.

upd
Хотя добавлю наверное еще контроль напряжения, по питающей линии, чтобы если аккумулятор садится, то сразу вырубало, прикрутить бы еще отправку сообщения на телефон при этом, вдруг фары там не выключил))

Код:
int ACC = A0; //сигнал АСС
int Per1 = 2; //периферия1
int Per2 = 10; //периферия2
int Hub = 3; //хаб
int Nex = 5; //несус
float Vout = 0.00;
float Vbat = 0.00;
float R1 = 24000.0; // сопротивление R8 (24кОм)
float R2 = 680.0; // сопротивление R7 (680Ом)
int ACCState = 0;
int State = 0;
unsigned long previousMillis1=0;
unsigned long previousMillis2=0;
unsigned long previousMillis3=0;
unsigned long previousMillis4=0;
unsigned long previousMillis5=0;


void setup() {               
  
  pinMode(ACC,INPUT);
  pinMode(Per1,OUTPUT);
  pinMode(Per2,OUTPUT);  
  pinMode(Nex,OUTPUT); 
  pinMode(Hub,OUTPUT);
  
}
 
void loop() {
  

  unsigned long currentMillis = millis();
  unsigned long currentMillis2 = millis();
  
  //Serial.print("analogRead(ACC): ");
  //Serial.println(analogRead(ACC));
  Serial.print("Time: ");
  Serial.println(currentMillis);
  Serial.print("Vbat: ");
  Serial.println(Vbat);
  
  // считывание аналогового значения
   ACCState = analogRead(ACC);
   Vout = (ACCState * 5.0) / 1024.0;
   Vbat = Vout / (R2/(R1+R2));
   if (Vbat<0.09)
     {
       Vbat=0.00;// обнуляем нежелательное значение
     }


  //включение реле, вклюление планшета
if ((Vbat >= 12.00) && ((unsigned long)(currentMillis - previousMillis1) >= 3000))//если напряжение больше "Х"
   {
   previousMillis1 = currentMillis;
   digitalWrite(Nex,HIGH);//подаем питание на управляющий пин
   State = 1;
   }

   //периферия1
if ((State == 1) && ((unsigned long)(currentMillis - previousMillis2) >= 5000))
   {
   previousMillis2 = currentMillis;
   digitalWrite(Per1, HIGH);
   State = 2;
   }

   //вклюление хаба
if ((State == 2) && ((unsigned long)(currentMillis - previousMillis3) >= 10000))
   {
   previousMillis3 = currentMillis;
   digitalWrite(Hub, HIGH);
   State = 3;
   }

   //периферия2
if ((State == 3) && ((unsigned long)(currentMillis - previousMillis4) >= 5000))
   {
   previousMillis4 = currentMillis;
   digitalWrite(Per2, HIGH);
   State = 4;
   }

//отсчет при потере напряжения
if ((State == 4) && Vbat <= 12.00)//если напряжение меньше "Х"
   {
    previousMillis5 = currentMillis2;
    State = 5;
   }

  //отключаем периферию 2
if ((State == 5) && (unsigned long)(currentMillis2 - previousMillis5) >= 2000)
   {
    digitalWrite(Per2,LOW);
   }

   //отключаем периферию
if ((State == 5) && (unsigned long)(currentMillis2 - previousMillis5) >= 4000)
   {
    digitalWrite(Per1,LOW);
   }

  //отключаем хаб
if ((State == 5) && (unsigned long)(currentMillis2 - previousMillis5) >= 6000)
   {
    digitalWrite(Hub,LOW);
   }

  //обестачиваем схему
if ((State == 5) && (unsigned long)(currentMillis2 - previousMillis5) >= 8000)
   {
    digitalWrite(Nex,LOW);
   }
}
__________________
Nexus 7 2013 Geely Emgrand X7
RyuuKiiroi вне форума   Ответить с цитированием