автоматическое включение ДХО (ПТФ) на старых семействах лада (без встроенного ДХО в фары) после завода двигателя

Akinak

✩✩✩✩✩✩✩
19 Ноя 2019
14
0
У меня в авто ваз 2110 нет встроенных дневных ходовых огней. на установку ДХО дополнительных нужно тратить время и деньги. Идея в том, чтобы использовать бесполезные противотуманки как ДХО, так как они установлены согласно ГОСТ и полиция на них никак не реагирует, кроме того ПТФ считается ближним светом, соответственно сама судьба дает право использовать их как ДХО.
Раньше я использовал светодиодные огни из поднебесной через реле на два положения (НЗ и НР) подключенное от генератора (+) и габаритов (-). Логика работы была следующая:
1. когда заводился двигатель, на генераторе появлялся плюс и ДХО сразу загорались, при этом на реле не было минуса и использовались НЗ контакты
2. когда габаритные огни включаешь, ( управление габаритами в моем авто почему то реализовано через минус) появляется минус на реле (и так как плюс то же есть на заведенном авто) реле переключает свое состояние на контакты с НР, при этом ДХО гасло.
Но, когда я снял светодиоды и поставил в штатные места ПТФ с галогенными лампочками схема перестала работать как надо.
Идея сделать дофига "умные" ДХО на arduino pro mini на три пина управления:
1 пин- управление нагрузкой
2 пин- вход напряжения от генератора (+), либо появления минуса на датчике давления блока двигателя( при этом ДХО должны загореться через 4 сек после раскрутки двс)
3 пин- вход от габаритов, при это ДХО должны гаснуть по понятным причинам, что ночью они не нужны
вот часть когда, которую я наваял, и она от части работает, но не совсем так как нужно
cкриншот почти показывает то как оно будет на выходе (разве что думаю добавить чтобы плавно зажигались галогенки в фарах через полевик)
в реале при моделировании на плате прототипирования выходит что светодиоды зажигаются и гаснут как надо, но вот в конце логического цикла если двс выключен но при этом был сигнал от габаритов, то при выключении габаритов ДХО снова зажгутся.
вопрос- как победить это подскажите пожалуйста? делаю приблуду себе в машину
C++:
#include "GyverButton.h"
GButton DVS(7, LOW_PULL, NORM_OPEN);
GButton gabarit(8, LOW_PULL, NORM_OPEN);
int PTF = 9;
///////////////////////////////////////////////////   
void setup() {
 Serial.begin(9600);
//butt.setDebounce(1000);
pinMode(PTF, OUTPUT);
//butt.setTimeout(10000);
}
///////////////////////////////////////////////////   
void loop ()
{
    DVS.tick();
    if (DVS.isHolded())
    {
    Serial.println("DVS on");
    digitalWrite(PTF,HIGH);
    }   
///////////////////////////////////////////////////   
    gabarit.tick();
    if (gabarit.isHolded())
    {
    Serial.println("PTF off");
    digitalWrite(PTF,LOW);
    }
///////////////////////////////////////////////////   
    DVS.tick();
    if (DVS.isRelease())
    {
    Serial.println("PTF off");
    digitalWrite(PTF, LOW);
    }
///////////////////////////////////////////////////   
    gabarit.tick();
    if (gabarit.isHolded())
    {
    Serial.println("PTF off");
    digitalWrite(PTF,LOW);
    }   
///////////////////////////////////////////////////   
    DVS.tick();
    if (DVS.isHolded())
    {
    Serial.println("DVS on");
    digitalWrite(PTF,HIGH);
    }   
///////////////////////////////////////////////////   
    gabarit.tick();
    if (gabarit.isRelease())
    {
    Serial.println("PTF on");
    digitalWrite(PTF,HIGH);
    }
}
 

Вложения

Akinak

✩✩✩✩✩✩✩
19 Ноя 2019
14
0
C++:
пробовал такой код, но он работает хуже, не так как нужно


#include "GyverButton.h"
GButton DVS(7, LOW_PULL, NORM_OPEN);
GButton gabarit(8, LOW_PULL, NORM_OPEN);
int PTF = 9;

void setup() {
 Serial.begin(9600);
//butt.setDebounce(1000);
pinMode(PTF, OUTPUT);
//butt.setTimeout(10000);
}
void loop ()
{
    DVS.tick();
    gabarit.tick();
    while ( DVS.isHolded() && gabarit.isRelease())
   {
    Serial.println("DVS on PTF on");
    digitalWrite(PTF,HIGH);
   }
   DVS.tick();
   gabarit.tick();
   while ( DVS.isHolded() && gabarit.isHolded())
   {
    Serial.println("DVS on PTF off");
    digitalWrite(PTF,LOW);
   }
   DVS.tick();
   gabarit.tick();
   while ( DVS.isRelease() && gabarit.isHolded())
   {
    Serial.println("DVS on PTF off");
    digitalWrite(PTF,LOW);
   }
   DVS.tick();
   gabarit.tick();
   while ( DVS.isRelease() && gabarit.isRelease())
   {
    Serial.println("DVS on PTF off");
    digitalWrite(PTF,LOW);
   }
}
 

dimonSha

✩✩✩✩✩✩✩
25 Окт 2019
64
9
Украина, Харьков.
Не понятно зачем прикрутили библиотеку для кнопки? В место линейных стабилизаторов можно сделать на простом делителе, с минусовым сигналом можно не городить каких либо схем, подтягиваем ногу через резистор к +5в, и он реагирует на минус. Таким же образом и наличие света. А вообще в идеале зделать розвязку, чтоб если коротнуло или ещё что, то не сгорел контроллер.
 

Akinak

✩✩✩✩✩✩✩
19 Ноя 2019
14
0
Не понятно зачем прикрутили библиотеку для кнопки? В место линейных стабилизаторов можно сделать на простом делителе, с минусовым сигналом можно не городить каких либо схем, подтягиваем ногу через резистор к +5в, и он реагирует на минус. Таким же образом и наличие света. А вообще в идеале зделать розвязку, чтоб если коротнуло или ещё что, то не сгорел контроллер.
библиотеку для кнопки взял из урока Алекса, других способов я не знаю как нормально инвертировать подаваемый сигнал в порт так, чтобы это работало (управлять плюсом по порту, ибо мои познания очень скудны в языке программирования).Проблема выбора управляющего сигнала в том, что входящие сигналы будут +12В и они будут понижены до значения 5в стабилизаторами. В идеале да, сделать бы гальваническую развязку, но тогда проектик вырастет в цене.
 

Akinak

✩✩✩✩✩✩✩
19 Ноя 2019
14
0
посидел еще немного и выдал вот такое


C++:
boolean dvs_flag = 0;
boolean dvs;
boolean gab_flag = 0;
boolean gab;
boolean led_flag = 0;
void setup() {
  pinMode(7, INPUT_PULLUP);
  pinMode(8, INPUT_PULLUP);
  pinMode(9, OUTPUT);
  Serial.begin(9600);
}
void loop() {
  dvs = !digitalRead(7);
  if (dvs == 1 && dvs_flag == 0) {
    dvs_flag = 1;
    Serial.println("on dvs");
    led_flag = !led_flag;
    delay(1000);
    digitalWrite(9, led_flag);
  }
  if (dvs == 0 && dvs_flag == 1) {
    dvs_flag = 0;
    Serial.println("off dvs");
    led_flag = led_flag;
    digitalWrite(9, led_flag);
  }
  ////////////////////////////////////////
  gab = !digitalRead(8);
  if (gab == 1 && gab_flag == 0) {
    gab_flag = 1;
    Serial.println("on gab ");
    led_flag = !led_flag;
    delay(1000);
    digitalWrite(9, led_flag);
  }
  if (gab == 0 && gab_flag == 1) {
    gab_flag = 0;
    Serial.println("off gab");
    led_flag = led_flag;
    digitalWrite(9, led_flag);
  }

}
но в обоих случаях выходит что код работает как переключатель, а не как два отдельных тумблера, которые управляют одной нагрузкой. крутил вертел код на выходы из цикла, думал даже свои циклы и условия прописать, но пока не выходит ничего путного
 

Старик Похабыч

★★★★★★★
14 Авг 2019
4,159
1,267
Москва
Время позднее , голова у меня мутная, поэтому поправляй меня там, где я тебя не правильно понял. у тебя ПТФ зависит от состояния двигателя и включенных габаритов ? т.е. от 2-х других состояний. Так ? рисуем таблицу, что бы МНЕ было понятно

ДВС выключен, Габариты выключены = состояние ПТФ (тут ты сам впиши в ответе на все виды)
ДВС выключен, габариты вкючены = состояние ПТФ (тут ты сам впиши в ответе на все виды)
ДВС включен, габариты выключены = состояние ПТФ (тут ты сам впиши в ответе на все виды)
ДВС включен, габариты влюкчены = = состояние ПТФ (тут ты сам впиши в ответе на все виды)

такая строчка
byte a=digitalRead((7)<<1)+digitalRead(8);
даст нам число от 0 до 3 в зависимотсти от состояния пинов.
далее пишем switch (a){
case 0:
..
break;
case 1:
...
break;
case 2:
...
break;
case 3:
...
break;
};
вместо многоточий нужно будет поставить код управления ПТФ

что означает 1 и 0 на 7-ом пине и что означает 1 и 0 на 8 пине.
 

Akinak

✩✩✩✩✩✩✩
19 Ноя 2019
14
0
Время позднее , голова у меня мутная, поэтому поправляй меня там, где я тебя не правильно понял. у тебя ПТФ зависит от состояния двигателя и включенных габаритов ? т.е. от 2-х других состояний. Так ? рисуем таблицу, что бы МНЕ было понятно

ДВС выключен, Габариты выключены = состояние ПТФ (тут ты сам впиши в ответе на все виды)
ДВС выключен, габариты вкючены = состояние ПТФ (тут ты сам впиши в ответе на все виды)
ДВС включен, габариты выключены = состояние ПТФ (тут ты сам впиши в ответе на все виды)
ДВС включен, габариты влюкчены = = состояние ПТФ (тут ты сам впиши в ответе на все виды)

такая строчка
byte a=digitalRead((7)<<1)+digitalRead(8);
даст нам число от 0 до 3 в зависимотсти от состояния пинов.
далее пишем switch (a){
case 0:
..
break;
case 1:
...
break;
case 2:
...
break;
case 3:
...
break;
};
вместо многоточий нужно будет поставить код управления ПТФ

что означает 1 и 0 на 7-ом пине и что означает 1 и 0 на 8 пине.
ДВС выключен, Габариты выключены = выключено ПТФ
ДВС выключен, габариты включены = выключен ПТФ
ДВС включен, габариты выключены = включено ПТФ
ДВС включен, габариты включены = = выключен ПТФ
 

Вложения

Изменено:

dimonSha

✩✩✩✩✩✩✩
25 Окт 2019
64
9
Украина, Харьков.
посидел еще немного и выдал вот такое


C++:
boolean dvs_flag = 0;
boolean dvs;
boolean gab_flag = 0;
boolean gab;
boolean led_flag = 0;
void setup() {
  pinMode(7, INPUT_PULLUP);
  pinMode(8, INPUT_PULLUP);
  pinMode(9, OUTPUT);
  Serial.begin(9600);
}
void loop() {
  dvs = !digitalRead(7);
  if (dvs == 1 && dvs_flag == 0) {
    dvs_flag = 1;
    Serial.println("on dvs");
    led_flag = !led_flag;
    delay(1000);
    digitalWrite(9, led_flag);
  }
  if (dvs == 0 && dvs_flag == 1) {
    dvs_flag = 0;
    Serial.println("off dvs");
    led_flag = led_flag;
    digitalWrite(9, led_flag);
  }
  ////////////////////////////////////////
  gab = !digitalRead(8);
  if (gab == 1 && gab_flag == 0) {
    gab_flag = 1;
    Serial.println("on gab ");
    led_flag = !led_flag;
    delay(1000);
    digitalWrite(9, led_flag);
  }
  if (gab == 0 && gab_flag == 1) {
    gab_flag = 0;
    Serial.println("off gab");
    led_flag = led_flag;
    digitalWrite(9, led_flag);
  }

}
но в обоих случаях выходит что код работает как переключатель, а не как два отдельных тумблера, которые управляют одной нагрузкой. крутил вертел код на выходы из цикла, думал даже свои циклы и условия прописать, но пока не выходит ничего путного
Я думаю не на много, пару оптронов, резисторная обвязка и понижающий импульсный преобразователь (т.к. на прямую 12в бортсети не подключил бы, мало ли) не такой уж он и дорогой. Попробуйте разобраться с вкл. выкл. ноги в зависимости от приходящего сигнала, потом прикручивайте вторую ногу с сигналом и поработайте уже с двумя. Потому как если сразу и все то возможно появления не очевидных ошибок.
 

Akinak

✩✩✩✩✩✩✩
19 Ноя 2019
14
0
Я думаю не на много, пару оптронов, резисторная обвязка и понижающий импульсный преобразователь (т.к. на прямую 12в бортсети не подключил бы, мало ли) не такой уж он и дорогой. Попробуйте разобраться с вкл. выкл. ноги в зависимости от приходящего сигнала, потом прикручивайте вторую ногу с сигналом и поработайте уже с двумя. Потому как если сразу и все то возможно появления не очевидных ошибок.
я так и делал, управлять одним пином выходит легко, состояние или вкл или выкл получается, а когда прикручиваешь второй вход, выходит переключатель состояния. и как от этого избавиться не знаю. пытаюсь понять как использовать функции case. для моего захолустного города дороговато выйдет оптронная обвязка, к тому же на входе просто поставлю стабилизаторы на 5в. С каждой деталюхой идет увеличение габаритов устройства, корпус у меня от старой релюхи http://firma-parametr.com.ua/ru/prod/relay_turns/12v-233747 , поэтому место ограничено
 
Изменено:

dimonSha

✩✩✩✩✩✩✩
25 Окт 2019
64
9
Украина, Харьков.
я так и делал, управлять одним пином выходит легко, состояние или вкл или выкл получается, а когда прикручиваешь второй вход, выходит переключатель состояния. и как от этого избавиться не знаю. пытаюсь понять как использовать функции case. для моего захолустного города дороговато выйдет оптронная обвязка, к тому же на входе просто поставлю стабилизаторы на 5в. С каждой деталюхой идет увеличение габаритов устройства, корпус у меня от старой релюхи http://firma-parametr.com.ua/ru/prod/relay_turns/12v-233747 , поэтому место ограничено
Думаю проще на if, else и флагах сделать данный проект, а в процессе эксплуатации точно понадобится что то доработать или исправить. Если посмотреть на схемку что вы прикрепили, то у вас только в одном случае включены ПТФ, это проверять и вкл., а все что не подходит выкл.)
 
Изменено:

Akinak

✩✩✩✩✩✩✩
19 Ноя 2019
14
0
Думаю проще на if, else и флагах сделать данный проект, а в процессе эксплуатации точно понадобится что то доработать или исправить. Если посмотреть на схемку что вы прикрепили, то у вас только в одном случае включены ПТФ, это проверять и вкл., а все что не подходит выкл.)
вот я подобным образом и сделал, правда по всей видимости очень коряво, потому что оно не работает:) будем мучить дальше
C++:
int dvs = 7;
int gab = 8;
void setup() {
  pinMode(dvs, INPUT);
  pinMode(gab, INPUT);
  pinMode(9, OUTPUT);
  Serial.begin(9600);
}
void loop()
{
  switch (dvs, HIGH && gab, LOW)
  {
    case (dvs, HIGH && gab, HIGH):
      digitalWrite(9, LOW);
      break;
    case (dvs, LOW && gab, LOW):
      digitalWrite(9, LOW);
      break;
    case (dvs, LOW && gab, HIGH):
      digitalWrite(9, LOW);
      break;
    case (dvs, HIGH && gab, LOW):
      digitalWrite(9, HIGH);
      break;
  }

}
 

Старик Похабыч

★★★★★★★
14 Авг 2019
4,159
1,267
Москва
ну то
ДВС выключен, Габариты выключены = выключено ПТФ
ДВС выключен, габариты включены = выключен ПТФ
ДВС включен, габариты выключены = включено ПТФ
ДВС включен, габариты включены = = выключен ПТФ
Тогда можно и с if сделать


byte a=digitalRead((7)<<1)+digitalRead(8);


если 7 пин это ДВС и 1 это включен, то число 2 будет как раз тот случая, когда кабариты выключены, а двигатель включен
т.е. пишем

if (a==a) {птф включить} else {птф выключить};

и в принципе , т.к. птф это суть светодод на макетке, то можно было бы так и сотавить.
 

dimonSha

✩✩✩✩✩✩✩
25 Окт 2019
64
9
Украина, Харьков.
вот я подобным образом и сделал, правда по всей видимости очень коряво, потому что оно не работает:) будем мучить дальше
C++:
int dvs = 7;
int gab = 8;
void setup() {
  pinMode(dvs, INPUT);
  pinMode(gab, INPUT);
  pinMode(9, OUTPUT);
  Serial.begin(9600);
}
void loop()
{
  switch (dvs, HIGH && gab, LOW)
  {
    case (dvs, HIGH && gab, HIGH):
      digitalWrite(9, LOW);
      break;
    case (dvs, LOW && gab, LOW):
      digitalWrite(9, LOW);
      break;
    case (dvs, LOW && gab, HIGH):
      digitalWrite(9, LOW);
      break;
    case (dvs, HIGH && gab, LOW):
      digitalWrite(9, HIGH);
      break;
  }

}
Как минимум посмотрите как оформляется switch case потому как у вас после case нет значения при каком он срабатывает и двоеточия. А вообще странно как не ругалась ардуино иде? Хорошая прога для эмуляции есть Proteus называется, так же в сети гуляют библиотеки для Proteusa с возможностью эмулировать ардуинку mega uno точно есть этого и хватит для начала.
 

Александр Симонов

★★★★✩✩✩
2 Авг 2018
727
207
Как минимум посмотрите как оформляется switch case потому как у вас после case нет значения при каком он срабатывает и двоеточия. А вообще странно как не ругалась ардуино иде? Хорошая прога для эмуляции есть Proteus называется, так же в сети гуляют библиотеки для Proteusa с возможностью эмулировать ардуинку mega uno точно есть этого и хватит для начала.
Значение после case есть, и двоеточия тоже. Конструкция вида (x, y, z) имеет значение z. Так что код автора эквивалентен такому:
C++:
  switch LOW
  {
    case HIGH:
      digitalWrite(9, LOW);
      break;
    case LOW:
      digitalWrite(9, LOW);
      break;
    case HIGH:
      digitalWrite(9, LOW);
      break;
    case LOW:
      digitalWrite(9, HIGH);
      break;
  }
 
  • Лойс +1
Реакции: dimonSha

Akinak

✩✩✩✩✩✩✩
19 Ноя 2019
14
0
ну то


Тогда можно и с if сделать


byte a=digitalRead((7)<<1)+digitalRead(8);


если 7 пин это ДВС и 1 это включен, то число 2 будет как раз тот случая, когда кабариты выключены, а двигатель включен
т.е. пишем

if (a==a) {птф включить} else {птф выключить};

и в принципе , т.к. птф это суть светодод на макетке, то можно было бы так и сотавить.
правда работает как переключатель как в шапке

C++:
#include "GyverButton.h"
GButton DVS(7, LOW_PULL, NORM_OPEN);
GButton gabarit(8, LOW_PULL, NORM_OPEN);
int PTF = 9;
///////////////////////////////////////////////////   
void setup() {
 Serial.begin(9600);
//butt.setDebounce(1000);
pinMode(PTF, OUTPUT);
//butt.setTimeout(10000);
}
///////////////////////////////////////////////////   
void loop ()
{
    DVS.tick();
    if (DVS.isHolded())
    {
    Serial.println("DVS on");
    delay(1000);
    digitalWrite(PTF,HIGH);
    }   
///////////////////////////////////////////////////   
    gabarit.tick();
    if (gabarit.isHolded())
    {
    Serial.println("gabarit on");
    digitalWrite(PTF,LOW);
    }
///////////////////////////////////////////////////   
    DVS.tick();
    if (DVS.isRelease())
    {
    Serial.println("DVS off");
    digitalWrite(PTF, LOW);
    }
///////////////////////////////////////////////////   
    gabarit.tick();
    if (gabarit.isRelease())
    {
    Serial.println("gabarit off");   
    digitalWrite(PTF,HIGH);
    }
  
}
 

dimonSha

✩✩✩✩✩✩✩
25 Окт 2019
64
9
Украина, Харьков.
Значение после case есть, и двоеточия тоже. Конструкция вида (x, y, z) имеет значение z. Так что код автора эквивалентен такому:
C++:
  switch LOW
  {
    case HIGH:
      digitalWrite(9, LOW);
      break;
    case LOW:
      digitalWrite(9, LOW);
      break;
    case HIGH:
      digitalWrite(9, LOW);
      break;
    case LOW:
      digitalWrite(9, HIGH);
      break;
  }
Да вы правы, не внимательно посмотрел(
 

Старик Похабыч

★★★★★★★
14 Авг 2019
4,159
1,267
Москва
казалось бы да, но по реально нет

у тебя проверяется состояние 2 пинов ОТДЕЛЬНО друг от друга, нет СОВМЕСТНОЙ проверки состояний. В этом и вышла ошибка кривой работы

и еще непонятно использование нескольких DVS.tick(); по логике вещей это нужно использовать 1 раз за цикл loop
я поэтому и не стал разбираться с 1-ым кодом, там много нагорожено и усложнено.
 

Akinak

✩✩✩✩✩✩✩
19 Ноя 2019
14
0
казалось бы да, но по реально нет

у тебя проверяется состояние 2 пинов ОТДЕЛЬНО друг от друга, нет СОВМЕСТНОЙ проверки состояний. В этом и вышла ошибка кривой работы

и еще непонятно использование нескольких DVS.tick(); по логике вещей это нужно использовать 1 раз за цикл loop
я поэтому и не стал разбираться с 1-ым кодом, там много нагорожено и усложнено.
да я сам уже ничего не понимаю, уже несколько дней сижу ковыряю, еще было бы знаний побольше.. сижу и думаю уже сделать на двух релюхах и не парить мозг... byte a=digitalRead((7)<<1)+digitalRead(8); эта запись сравнивает значения на выходах 7 и 8, при этом если на 7 выходе единица то он прибавляет значение 8 пина?
 

Александр Симонов

★★★★✩✩✩
2 Авг 2018
727
207
да я сам уже ничего не понимаю, уже несколько дней сижу ковыряю, еще было бы знаний побольше.. сижу и думаю уже сделать на двух релюхах и не парить мозг... byte a=digitalRead((7)<<1)+digitalRead(8); эта запись сравнивает значения на выходах 7 и 8, при этом если на 7 выходе единица то он прибавляет значение 8 пина?
Может я чего упустил в беседе, но весь скетч одна строчка, не считая сетапа:


C++:
void setup() {
  pinMode(пин_двс, INPUT);
  pinMode(пин_габаритов, INPUT_PULLUP);
  pinMode(пин_подсветки, OUTPUT);
}

void loop() {
// если на пин_двс высокий сигнал И на пин_габаритов низкий (земля), подать высокий на пин_подсветки
digitalWrite(пин_подсветки, digitalRead(пин_двс) && !digitalRead(пин_габаритов));
}
По вкусу добавить delay(500) для антидребезга.
 
Изменено:

Старик Похабыч

★★★★★★★
14 Авг 2019
4,159
1,267
Москва
Вот наконец начал задавать вопросы с непонятками)
От я ее еще криво с устатку и написал
надо так:
a=(digitalRead(7)<<1)+digitalRead(8)
не хотел писать ночью, но не удержался (

Нет, эта строка не сравнивает ничего! она преобразует значения 2-х пинов в число. делает это так
пин 7 пин 8 число
0 0 0
1 0 2
0 1 1
1 1 1

<< Это оператор для работы с битами данных , называется сдвиг влево, оно же умножение на 2
digitalRead(7)<<1 берем значение сигнала с 7 пина digitalRead(7) иe умнодаем на 2 (<<) один (1) раз. сделано для того, что бы вместо 1 получить 2, а значене второго пина мы не изменяем умножениями и берем как есть 1 или 0. и поэтому результатом операции в одном числе (а) получаем все все возможные комбинации от 0 (все выключено) до 3 (все включено)


если написать
digitalRead(7)<<3
то значение пина 7 будет умножена на 2 целых ТРИ раза, т.е. вместо 1 мы получим 4, а вместо 0 все равно 0.
 

Старик Похабыч

★★★★★★★
14 Авг 2019
4,159
1,267
Москва

dimonSha

✩✩✩✩✩✩✩
25 Окт 2019
64
9
Украина, Харьков.
Может я чего упустил в беседе, но весь скетч одна строчка, не считая сетапа:


C++:
void setup() {
  pinMode(пин_двс, INPUT);
  pinMode(пин_габаритов, INPUT_PULLUP);
  pinMode(пин_подсветки, OUTPUT);
}

void loop() {
// если на пин_двс высокий сигнал И на пин_габаритов низкий (земля), подать высокий на пин_подсветки
digitalWrite(пин_подсветки, digitalRead(пин_двс) && !digitalRead(пин_габаритов));
}
По вкусу добавить delay(500) для антидребезга.
Может я чего упустил в беседе, но весь скетч одна строчка, не считая сетапа:


C++:
void setup() {
  pinMode(пин_двс, INPUT);
  pinMode(пин_габаритов, INPUT_PULLUP);
  pinMode(пин_подсветки, OUTPUT);
}

void loop() {
// если на пин_двс высокий сигнал И на пин_габаритов низкий (земля), подать высокий на пин_подсветки
digitalWrite(пин_подсветки, digitalRead(пин_двс) && !digitalRead(пин_габаритов));
}
По вкусу добавить delay(500) для антидребезга.
Компактненько получилось)
 

Akinak

✩✩✩✩✩✩✩
19 Ноя 2019
14
0
Может я чего упустил в беседе, но весь скетч одна строчка, не считая сетапа:


C++:
void setup() {
  pinMode(пин_двс, INPUT);
  pinMode(пин_габаритов, INPUT_PULLUP);
  pinMode(пин_подсветки, OUTPUT);
}

void loop() {
// если на пин_двс высокий сигнал И на пин_габаритов низкий (земля), подать высокий на пин_подсветки
digitalWrite(пин_подсветки, digitalRead(пин_двс) && !digitalRead(пин_габаритов));
}
По вкусу добавить delay(500) для антидребезга.
спасибо тебе большое добрый человек:) я конечно понимал, что то, что я горожу это черезчур, и все гораздо проще, но не знал как описать языком
 

Akinak

✩✩✩✩✩✩✩
19 Ноя 2019
14
0
Вот наконец начал задавать вопросы с непонятками)
От я ее еще криво с устатку и написал
надо так:
a=(digitalRead(7)<<1)+digitalRead(8)
не хотел писать ночью, но не удержался (

Нет, эта строка не сравнивает ничего! она преобразует значения 2-х пинов в число. делает это так
пин 7 пин 8 число
0 0 0
1 0 2
0 1 1
1 1 1

<< Это оператор для работы с битами данных , называется сдвиг влево, оно же умножение на 2
digitalRead(7)<<1 берем значение сигнала с 7 пина digitalRead(7) иe умнодаем на 2 (<<) один (1) раз. сделано для того, что бы вместо 1 получить 2, а значене второго пина мы не изменяем умножениями и берем как есть 1 или 0. и поэтому результатом операции в одном числе (а) получаем все все возможные комбинации от 0 (все выключено) до 3 (все включено)


если написать
digitalRead(7)<<3
то значение пина 7 будет умножена на 2 целых ТРИ раза, т.е. вместо 1 мы получим 4, а вместо 0 все равно 0.
я рассматривал матрицу как решение, и по сути мои коды с операторами if было похоже, но не выход. А может еще кто подсказать как правильно конфигурировать порты LOW и HIGH? дело в том, что управляющий сигнал будет плюсовым, а по умолчанию если использовать код как есть, управление будет по минусу. просто не могу найти нормальную статью об этом, друг у друга передирают, но как правильно использовать это неясно