Просьба помочь отредактировать имеющийся скетчю

Zaconnik
Offline
Зарегистрирован: 19.03.2019

Добрый день! Сразу скажу, от программирования далек, поэтому и обращаюсь за помощью. Имеется готовый проект реализации дневных ходовых огней (ДХО) с функцией поворотника на адресой светодиодной ленте под управлением ардуно. Все это дело с горем попалам собрано и спаяно, но столкнулся со следуйщим моментом: ДХО необходимо отключать при движении в темное время суток т.е. в моем случае при включении света или габаритов в авто. Хотелось бы добавить данный алгоритм в скетч. Как вариант вижу это так : имеется режим при активации 4 цифрового пина страбоскоп, его удаляем и добавляем сюда при активации пина отключение ДХО, но что бы при этом при получении сигналов на пины 5 и 6 поворотники работали. Скетч предоставляю ниже, взят из свободного доступа. Возможно ли реализовать здесь данный режим или стоит искать другой вариант. Спасибо!

#include <Adafruit_NeoPixel.h>             // подключаем библиотеку
int count=7; // количество диодов на одной фаре 
Adafruit_NeoPixel strip = Adafruit_NeoPixel(count, 7, NEO_GRB + NEO_KHZ800); //Инициализируем первый поворотник на 7 цифровом выходе
Adafruit_NeoPixel strip2 = Adafruit_NeoPixel(count, 8, NEO_GRB + NEO_KHZ800);//Инициализируем второй поворотник на 8 цифровом выходе
void setup() 
{
  pinMode(3, INPUT); 
  pinMode(4, INPUT);
  pinMode(5, INPUT); 
  pinMode(6, INPUT);
  strip.begin();
  strip.show(); 
  strip2.begin();
  strip2.show();
}
void loop() 
{
   {
    if ((digitalRead(5) == HIGH) and (digitalRead(6) == HIGH)) 
    { 
      //Режим аварийной сигнализации, если на 5 и 6 пин приходит плюс
      for(int k = 0; k < 3; k++)
      {  
        // цикл до трех - сигнал "перестроения" , при кратковременном включении мигает 3 раза,
        for(int i = 0; i < count+1; i++)
        {
          for(int j = 0; j < i; j++)
          {
            if ((digitalRead(5) == HIGH) and (digitalRead(6) == HIGH)) 
            {
              k = 0; // если во время мигания поворотника получаем еще плюcовой сигнал, то обнуяем счетчик, чтобы поворотник мигал еще как минимум 3 раза
            } 
            strip.setPixelColor(j, strip.Color(255, 69, 0)); // R=255, G=0, B=0 — цвет светодиода
            strip2.setPixelColor(j, strip2.Color(255, 69, 0)); // R=255, G=0, B=0 — цвет светодиода
          }
          delay(60);
          strip.show();
          strip2.show();
        }
        for(int i = 0; i < count+3; i++)
        {
          for(int j = 0; j < i; j++)
          {
            // в этом цикле плавно тушим предыдущий светодиод, делаем его наполовину тусклее, чтобы движение было плавнее
            strip.setPixelColor(j-2, strip.Color(0, 0, 0)); // R=255, G=0, B=0 — цвет светодиода
            strip.setPixelColor(j-1, strip.Color(63, 17, 0)); // R=255, G=0, B=0 — цвет светодиода
            strip.setPixelColor(j, strip.Color(127, 34, 0)); // R=255, G=0, B=0 — цвет светодиода
            strip2.setPixelColor(j-2, strip2.Color(0, 0, 0)); // R=255, G=0, B=0 — цвет светодиода
            strip2.setPixelColor(j-1, strip2.Color(63, 17, 0)); // R=255, G=0, B=0 — цвет светодиода
            strip2.setPixelColor(j, strip2.Color(127, 34, 0)); // R=255, G=0, B=0 — цвет светодиода
          }
          delay(60);
          strip.show();
          strip2.show();
        }
      }
    }
              
    if (digitalRead(5) == LOW and digitalRead(6) == HIGH) 
    { 
      // включается один поворотник 
      for(int k = 0; k < 3; k++)
      {  
        // цикл до трех - сигнал "перестроения" , при кратковременном включении мигает 3 раза,
        for(int i = 0; i < count+1; i++)
        {
          for(int j = 0; j < i; j++)  
          {
            if ((digitalRead(5) == LOW) and (digitalRead(6) == HIGH)) 
              {
                k = 0;
              }
              strip.setPixelColor(j, strip.Color(255, 69, 0)); // R=255, G=0, B=0 — цвет светодиода
          }
          delay(60);
          strip.show();
        }
        for(int i = 0; i < count+3; i++)
        {
          for(int j = 0; j < i; j++)
          { 
            // в этом цикле плавно тушим предыдущий светодиод, делаем его наполовину тусклее, чтобы движение было плавнее
            strip.setPixelColor(j-2, strip.Color(0, 0, 0)); // R=255, G=0, B=0 — цвет светодиода
            strip.setPixelColor(j-1, strip.Color(63, 17, 0)); // R=255, G=0, B=0 — цвет светодиода
            strip.setPixelColor(j, strip.Color(127, 34, 0)); // R=255, G=0, B=0 — цвет светодиода
          }
          delay(60);
          strip.show();
        }
          
      }
    }
    if (digitalRead(5) == HIGH and digitalRead(6) == LOW) 
    { // включаем второй поворотник
      for(int k = 0; k < 3; k++)
      {  
        // цикл до трех - сигнал "перестроения" , при кратковременном включении мигает 3 раза,  
        for(int i = 0; i < count+1; i++)
        {
          for(int j = 0; j < i; j++)
          {
            if ((digitalRead(5) == HIGH) and (digitalRead(6) == LOW)) 
            {
              k = 0;
            }
            strip2.setPixelColor(j, strip2.Color(255, 69, 0)); // R=255, G=0, B=0 — цвет светодиода
          }
          delay(60);
          strip2.show();
        }
        for(int i = 0; i < count+3; i++)
        {
          for(int j = 0; j < i; j++)
          { 
            // в этом цикле плавно тушим предыдущий светодиод, делаем его наполовину тусклее, чтобы движение было плавнее
            strip2.setPixelColor(j-2, strip2.Color(0, 0, 0)); // R=255, G=0, B=0 — цвет светодиода
            strip2.setPixelColor(j-1, strip2.Color(63, 17, 0)); // R=255, G=0, B=0 — цвет светодиода
            strip2.setPixelColor(j, strip2.Color(127, 34, 0)); // R=255, G=0, B=0 — цвет светодиода
          }
          delay(60);
          strip2.show();
        }
      }
    }
    if (digitalRead(3) == HIGH) 
    { 
      // режим спецсигналов, если на 3 пин подаем плюс
      for(int j = 0; j < 16; j++) 
      {
        for(int i = 0; i < count; i++) 
        {
          strip.setPixelColor(i, strip.Color(255, 0, 0)); // R=255, G=0, B=0 — цвет светодиода
          strip2.setPixelColor(i, strip2.Color(0, 0, 255)); // R=255, G=0, B=0 — цвет светодиода
        }
        strip.show();
        strip2.show();
        delay(20);
        for(int i = 0; i < count; i++)
        {
          strip.setPixelColor(i, strip.Color(0, 0, 0)); // R=255, G=0, B=0 — цвет светодиода
          strip2.setPixelColor(i, strip2.Color(0, 0, 0)); // R=255, G=0, B=0 — цвет светодиода
        }
        strip.show();
        strip2.show();
        delay(20);
      }
      for(int j = 0; j < 16; j++) 
      {
        for(int i = 0; i < count; i++) 
        {
        strip.setPixelColor(i, strip.Color(0, 0, 255)); // R=255, G=0, B=0 — цвет светодиода
        strip2.setPixelColor(i, strip2.Color(255, 0, 0)); // R=255, G=0, B=0 — цвет светодиода
        }
        strip.show();
        strip2.show();
        delay(20);
        for(int i = 0; i < count; i++)
        {
          strip.setPixelColor(i, strip.Color(0, 0, 0)); // R=255, G=0, B=0 — цвет светодиода
          strip2.setPixelColor(i, strip2.Color(0, 0, 0)); // R=255, G=0, B=0 — цвет светодиода
        }
        strip.show();
        strip2.show();
        delay(20);
      }
    }
    if (digitalRead(4) == HIGH) 
    { 
      // Режим стробоскова, если на 4 пин подаем питание
      for(int j = 0; j < 24; j++) 
      {
        for(int i = 0; i < count; i++) 
        {
        strip.setPixelColor(i, strip.Color(255, 255, 255)); // R=255, G=0, B=0 — цвет светодиода
        strip2.setPixelColor(i, strip2.Color(0, 0, 0)); // R=255, G=0, B=0 — цвет светодиода
        }
        strip.show();
        strip2.show();
        delay(15);
        for(int i = 0; i < count; i++)
        {
          strip.setPixelColor(i, strip.Color(0, 0, 0)); // R=255, G=0, B=0 — цвет светодиода
          strip2.setPixelColor(i, strip2.Color(0, 0, 0)); // R=255, G=0, B=0 — цвет светодиода
        }
        strip.show();
        strip2.show();
        delay(15);
      }
      for(int j = 0; j < 24; j++) 
      {
        for(int i = 0; i < count; i++) 
        {
          strip.setPixelColor(i, strip.Color(0, 0, 0)); // R=255, G=0, B=0 — цвет светодиода
          strip2.setPixelColor(i, strip2.Color(255, 255, 255)); // R=255, G=0, B=0 — цвет светодиода
        }
        strip.show();
        strip2.show();
        delay(15);
        for(int i = 0; i < count; i++)
        {
          strip.setPixelColor(i, strip.Color(0, 0, 0)); // R=255, G=0, B=0 — цвет светодиода
          strip2.setPixelColor(i, strip2.Color(0, 0, 0)); // R=255, G=0, B=0 — цвет светодиода
        }
        strip.show();
        strip2.show();
        delay(15);
      }
    }
    if( digitalRead(3) == LOW and digitalRead(5) == LOW and digitalRead(6) == LOW and digitalRead(9) == LOW) 
    { 
      for(int i = 0; i < count+1; i++)
      { 
        // Зажигаем ходовые огни, если нетниодного сигнала
        strip.setPixelColor(i, strip.Color(255, 255, 255));
        strip2.setPixelColor(i, strip2.Color(255, 255, 255));
      }
      strip.show();
      strip2.show();
    }
  }
}

 

b707
Онлайн
Зарегистрирован: 26.05.2017

исправить этот код очень просто - достаточно добавить в условие строки 209 чтение пина 4 и выкинуть режим стробоскоп - все будет работать именно так, как вы хотите.

Я не стал править этот код потому, что в коде есть ошибки - например в той же строке 209 использован неведомый оператор "and". которого нет в языке С - а значит редактировать этот код бессмысленно,

sadman41
Offline
Зарегистрирован: 19.10.2016

b707 пишет:

Я не стал править этот код потому, что в коде есть ошибки - например в той же строке 209 использован неведомый оператор "and". которого нет в языке С - а значит редактировать этот код бессмысленно,

Я тоже долго не верил, но зацени:

void setup() {
  Serial.begin(115200);
  Serial.print(true and false);
}

void loop() {}

 

b707
Онлайн
Зарегистрирован: 26.05.2017

sadman41 пишет:

Я тоже долго не верил, но зацени:

void setup() {
  Serial.begin(115200);
  Serial.print(true and false);
}

void loop() {}

 

заценить сейчас не могу, ардуины нет.

И чо, работает?? вероятно, где-то в глубинах вайринга задефайнили "and" на "&&" ?

sadman41
Offline
Зарегистрирован: 19.10.2016

b707 пишет:

И чо, работает?? вероятно, где-то в глубинах вайринга задефайнили "and" на "&&" ?

Nope. No any Wiring magic here: https://en.wikipedia.org/wiki/Operators_in_C_and_C%2B%2B#cite_note-synonyms-2

b707
Онлайн
Зарегистрирован: 26.05.2017

опа...

"век живи - век учись"

b707
Онлайн
Зарегистрирован: 26.05.2017

Zaconnik - с учетом поправки sadman41 - претензии к скетчу снимаются.

Что исправлять - смотрите первый абзац моего ответа в сообщении #1 - все должно заработать.

bwn
Offline
Зарегистрирован: 25.08.2014

От хоспода, я конечно наливочки, под ужин, выкушал, возможно память отшибло, но не помню, где я в "Песочнице" про мать Терезу постил и пять добрых дел, которые каждый, уважающий себя, жентельмен должен совершить в течении суток?))))