Устройство сопряжения замка зажигания и автосигнализации

CarMaster72
CarMaster72 аватар
Offline
Зарегистрирован: 22.12.2017

Ребята всем привет! Занимаюсь иногда автозапуском для хитрых авто, типа немцев, так там они мутят хитрые алгоритмы работы замков, слотов и тд... вот одно из них, на основе предыдущего устройства и скетча(писал не я) поправил под свои нужды и времена  и каналы, у меня появился на этом устройстве вход 2, все вроде работает корректно, но есть один косячек, пока самому мне не удалось поправить, если посмотрите в скетче то понятно что если на входе 1 лог 0 будет висеть на все время работы устройства то при подаче на 2 вход отработает все то что ниже  в коде, то есть все как надо,  но предположим что по каким то причинам не было импульса на входе 2, то программа у меня висит и ожидает импульс входа 2, мне нужно,  если не будет лог 0 на входе 1 то программа продолжит выполнение кода а не будет ждать входа 2

// htpicc@gmail.com -> Юра Евров <mtx245@mail.ru>  2010-jan-12


#define IN1               2
#define IN2               3
#define OUT1              4
#define OUT2              5
#define OUT3              6
#define OUT4              7
#define OUT5              8
#define OUT6              9
#define OUT7              10


void setup()
{
  digitalWrite(OUT1, LOW); pinMode(OUT1, OUTPUT);
  digitalWrite(OUT2, LOW); pinMode(OUT2, OUTPUT);
  digitalWrite(OUT3, LOW); pinMode(OUT3, OUTPUT);
  digitalWrite(OUT4, LOW); pinMode(OUT4, OUTPUT);
  digitalWrite(OUT5, LOW); pinMode(OUT5, OUTPUT);
  digitalWrite(OUT6, LOW); pinMode(OUT6, OUTPUT);
  digitalWrite(OUT7, LOW); pinMode(OUT7, OUTPUT);
}


void loop()
{
  static uint32_t t;
  static bool out3;
  
  while (digitalRead(IN1));               
  digitalWrite(OUT1, HIGH);              //включили 1
  delay(10);                         
  digitalWrite(OUT2, HIGH);              //включили 2
  
  t = millis();
  while (millis() - t < 1500)            //ждём 3
    if (digitalRead(IN1))               //и проверяем вход 1
      break;
      
  out3 = false;
  if (!digitalRead(IN1)) {
    out3 = true;
    digitalWrite(OUT1, LOW);            //выключили 1
    digitalWrite(OUT3, HIGH);           //включили 3
    delay(1000);
    digitalWrite(OUT1, HIGH);           //включили 1
    digitalWrite(OUT3, LOW);            //выключили 3
     }
   if(digitalRead(IN1)==true);        //вот тут где то засада, надо что бы вход читался и контролировался, если на нем 
                                                    //пропал 0, нужно что бы программа не ожидала импульса  входа 2 а продолжила выпол кода ниже
 
  
   
   while (digitalRead(IN2));            //проверяем вход 2
    

   { 
    delay(200); 
    digitalWrite(OUT7, HIGH);           //включили 7 (педаль тормоза)
    delay(500);       
    digitalWrite(OUT1, LOW);           //выключили 1
    digitalWrite(OUT2, LOW);           //выключили 2
    digitalWrite(OUT5, HIGH);          //включили 5
    digitalWrite(OUT3, HIGH);          //включили 3
    digitalWrite(OUT6, HIGH);          //включили 6
    delay(1500);
    digitalWrite(OUT5, LOW);           //выключили 5
    digitalWrite(OUT3, LOW);           //выключили 3
    digitalWrite(OUT6, LOW);           //выключили 6
    digitalWrite(OUT1, HIGH);          //включили 1
    digitalWrite(OUT2, HIGH);          //включили 2
    delay(5000);
    digitalWrite(OUT7, LOW);
    } 
   
  while (!digitalRead(IN1));            //ждём окончания входного
                             
              
  delay(1000);
  digitalWrite(OUT1, LOW);             //выключили 1         
  digitalWrite(OUT4, HIGH);            //включили 4
  digitalWrite(OUT5, HIGH);            //включили 5       
  delay(1000);
  digitalWrite(OUT4, LOW);             //выключили 4
  digitalWrite(OUT5, LOW);             //выключили 5
  digitalWrite(OUT1, HIGH);            //включили 1
  delay(2000);
  digitalWrite(OUT1, LOW);             //выключили 1
  digitalWrite(OUT2, LOW);             //выключили 2
} 

 

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

Круто, чё!

Только я не увидел в тексте ни одного знака вопроса и ни одного термина, семантически эквивалентного слову "просьба" или, хотя бы, "вопрос".

 

b707
Offline
Зарегистрирован: 26.05.2017

человек занимается "хитрыми" системами на "хитрых" машинах... видимо поднабрался хитрости от железок...

CarMaster72
CarMaster72 аватар
Offline
Зарегистрирован: 22.12.2017

Гуру своего дела, прошу прощения, будьте добры, подсобите по возможности, я не силен еще в написании кода, есть большое желание научиться. 

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Керниган и Ритчи помогут обрести базовые знания.  Тогда будет о чем здесь поговорить.

CarMaster72
CarMaster72 аватар
Offline
Зарегистрирован: 22.12.2017

Ясно, спасибо за помощь, "гуру"..  фото бы сменили на аве... сам разберусь... 

xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015

из того что я понял надо убрать опрос 2 входа под условие

// <a href="mailto:htpicc@gmail.com">htpicc@gmail.com</a> -> Юра Евров <mtx245@mail.ru>  2010-jan-12
#define IN1               2
#define IN2               3
#define OUT1              4
#define OUT2              5
#define OUT3              6
#define OUT4              7
#define OUT5              8
#define OUT6              9
#define OUT7              10

void setup()
{
  digitalWrite(OUT1, LOW); pinMode(OUT1, OUTPUT);
  digitalWrite(OUT2, LOW); pinMode(OUT2, OUTPUT);
  digitalWrite(OUT3, LOW); pinMode(OUT3, OUTPUT);
  digitalWrite(OUT4, LOW); pinMode(OUT4, OUTPUT);
  digitalWrite(OUT5, LOW); pinMode(OUT5, OUTPUT);
  digitalWrite(OUT6, LOW); pinMode(OUT6, OUTPUT);
  digitalWrite(OUT7, LOW); pinMode(OUT7, OUTPUT);
}

void loop()
{
  static uint32_t t;
  static bool out3;

  while (digitalRead(IN1));
  digitalWrite(OUT1, HIGH);              //включили 1
  delay(10);
  digitalWrite(OUT2, HIGH);              //включили 2

  t = millis();
  while (millis() - t < 1500)            //ждём 3
    if (digitalRead(IN1))               //и проверяем вход 1
      break;

  out3 = false;
  if (!digitalRead(IN1)) {
    out3 = true;
    digitalWrite(OUT1, LOW);            //выключили 1
    digitalWrite(OUT3, HIGH);           //включили 3
    delay(1000);
    digitalWrite(OUT1, HIGH);           //включили 1
    digitalWrite(OUT3, LOW);            //выключили 3
  }
  if (digitalRead(IN1)) {
    //вот тут где то засада, надо что бы вход читался и контролировался, если на нем
    //пропал 0, нужно что бы программа не ожидала импульса  входа 2 а продолжила выпол кода ниже
    while (digitalRead(IN2));            //проверяем вход 2
    {
      delay(200);
      digitalWrite(OUT7, HIGH);           //включили 7 (педаль тормоза)
      delay(500);
      digitalWrite(OUT1, LOW);           //выключили 1
      digitalWrite(OUT2, LOW);           //выключили 2
      digitalWrite(OUT5, HIGH);          //включили 5
      digitalWrite(OUT3, HIGH);          //включили 3
      digitalWrite(OUT6, HIGH);          //включили 6
      delay(1500);
      digitalWrite(OUT5, LOW);           //выключили 5
      digitalWrite(OUT3, LOW);           //выключили 3
      digitalWrite(OUT6, LOW);           //выключили 6
      digitalWrite(OUT1, HIGH);          //включили 1
      digitalWrite(OUT2, HIGH);          //включили 2
      delay(5000);
      digitalWrite(OUT7, LOW);
    }
  }

  while (!digitalRead(IN1));            //ждём окончания входного

  delay(1000);
  digitalWrite(OUT1, LOW);             //выключили 1
  digitalWrite(OUT4, HIGH);            //включили 4
  digitalWrite(OUT5, HIGH);            //включили 5
  delay(1000);
  digitalWrite(OUT4, LOW);             //выключили 4
  digitalWrite(OUT5, LOW);             //выключили 5
  digitalWrite(OUT1, HIGH);            //включили 1
  delay(2000);
  digitalWrite(OUT1, LOW);             //выключили 1
  digitalWrite(OUT2, LOW);             //выключили 2
}

 

CarMaster72
CarMaster72 аватар
Offline
Зарегистрирован: 22.12.2017

Да нужно опрос входа 2 сделать под условие