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

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

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

001#include <Adafruit_NeoPixel.h>             // подключаем библиотеку
002int count=7; // количество диодов на одной фаре
003Adafruit_NeoPixel strip = Adafruit_NeoPixel(count, 7, NEO_GRB + NEO_KHZ800); //Инициализируем первый поворотник на 7 цифровом выходе
004Adafruit_NeoPixel strip2 = Adafruit_NeoPixel(count, 8, NEO_GRB + NEO_KHZ800);//Инициализируем второй поворотник на 8 цифровом выходе
005void setup()
006{
007  pinMode(3, INPUT);
008  pinMode(4, INPUT);
009  pinMode(5, INPUT);
010  pinMode(6, INPUT);
011  strip.begin();
012  strip.show();
013  strip2.begin();
014  strip2.show();
015}
016void loop()
017{
018   {
019    if ((digitalRead(5) == HIGH) and (digitalRead(6) == HIGH))
020    {
021      //Режим аварийной сигнализации, если на 5 и 6 пин приходит плюс
022      for(int k = 0; k < 3; k++)
023      
024        // цикл до трех - сигнал "перестроения" , при кратковременном включении мигает 3 раза,
025        for(int i = 0; i < count+1; i++)
026        {
027          for(int j = 0; j < i; j++)
028          {
029            if ((digitalRead(5) == HIGH) and (digitalRead(6) == HIGH))
030            {
031              k = 0; // если во время мигания поворотника получаем еще плюcовой сигнал, то обнуяем счетчик, чтобы поворотник мигал еще как минимум 3 раза
032            }
033            strip.setPixelColor(j, strip.Color(255, 69, 0)); // R=255, G=0, B=0 — цвет светодиода
034            strip2.setPixelColor(j, strip2.Color(255, 69, 0)); // R=255, G=0, B=0 — цвет светодиода
035          }
036          delay(60);
037          strip.show();
038          strip2.show();
039        }
040        for(int i = 0; i < count+3; i++)
041        {
042          for(int j = 0; j < i; j++)
043          {
044            // в этом цикле плавно тушим предыдущий светодиод, делаем его наполовину тусклее, чтобы движение было плавнее
045            strip.setPixelColor(j-2, strip.Color(0, 0, 0)); // R=255, G=0, B=0 — цвет светодиода
046            strip.setPixelColor(j-1, strip.Color(63, 17, 0)); // R=255, G=0, B=0 — цвет светодиода
047            strip.setPixelColor(j, strip.Color(127, 34, 0)); // R=255, G=0, B=0 — цвет светодиода
048            strip2.setPixelColor(j-2, strip2.Color(0, 0, 0)); // R=255, G=0, B=0 — цвет светодиода
049            strip2.setPixelColor(j-1, strip2.Color(63, 17, 0)); // R=255, G=0, B=0 — цвет светодиода
050            strip2.setPixelColor(j, strip2.Color(127, 34, 0)); // R=255, G=0, B=0 — цвет светодиода
051          }
052          delay(60);
053          strip.show();
054          strip2.show();
055        }
056      }
057    }
058               
059    if (digitalRead(5) == LOW and digitalRead(6) == HIGH)
060    {
061      // включается один поворотник
062      for(int k = 0; k < 3; k++)
063      
064        // цикл до трех - сигнал "перестроения" , при кратковременном включении мигает 3 раза,
065        for(int i = 0; i < count+1; i++)
066        {
067          for(int j = 0; j < i; j++) 
068          {
069            if ((digitalRead(5) == LOW) and (digitalRead(6) == HIGH))
070              {
071                k = 0;
072              }
073              strip.setPixelColor(j, strip.Color(255, 69, 0)); // R=255, G=0, B=0 — цвет светодиода
074          }
075          delay(60);
076          strip.show();
077        }
078        for(int i = 0; i < count+3; i++)
079        {
080          for(int j = 0; j < i; j++)
081          {
082            // в этом цикле плавно тушим предыдущий светодиод, делаем его наполовину тусклее, чтобы движение было плавнее
083            strip.setPixelColor(j-2, strip.Color(0, 0, 0)); // R=255, G=0, B=0 — цвет светодиода
084            strip.setPixelColor(j-1, strip.Color(63, 17, 0)); // R=255, G=0, B=0 — цвет светодиода
085            strip.setPixelColor(j, strip.Color(127, 34, 0)); // R=255, G=0, B=0 — цвет светодиода
086          }
087          delay(60);
088          strip.show();
089        }
090           
091      }
092    }
093    if (digitalRead(5) == HIGH and digitalRead(6) == LOW)
094    { // включаем второй поворотник
095      for(int k = 0; k < 3; k++)
096      
097        // цикл до трех - сигнал "перестроения" , при кратковременном включении мигает 3 раза, 
098        for(int i = 0; i < count+1; i++)
099        {
100          for(int j = 0; j < i; j++)
101          {
102            if ((digitalRead(5) == HIGH) and (digitalRead(6) == LOW))
103            {
104              k = 0;
105            }
106            strip2.setPixelColor(j, strip2.Color(255, 69, 0)); // R=255, G=0, B=0 — цвет светодиода
107          }
108          delay(60);
109          strip2.show();
110        }
111        for(int i = 0; i < count+3; i++)
112        {
113          for(int j = 0; j < i; j++)
114          {
115            // в этом цикле плавно тушим предыдущий светодиод, делаем его наполовину тусклее, чтобы движение было плавнее
116            strip2.setPixelColor(j-2, strip2.Color(0, 0, 0)); // R=255, G=0, B=0 — цвет светодиода
117            strip2.setPixelColor(j-1, strip2.Color(63, 17, 0)); // R=255, G=0, B=0 — цвет светодиода
118            strip2.setPixelColor(j, strip2.Color(127, 34, 0)); // R=255, G=0, B=0 — цвет светодиода
119          }
120          delay(60);
121          strip2.show();
122        }
123      }
124    }
125    if (digitalRead(3) == HIGH)
126    {
127      // режим спецсигналов, если на 3 пин подаем плюс
128      for(int j = 0; j < 16; j++)
129      {
130        for(int i = 0; i < count; i++)
131        {
132          strip.setPixelColor(i, strip.Color(255, 0, 0)); // R=255, G=0, B=0 — цвет светодиода
133          strip2.setPixelColor(i, strip2.Color(0, 0, 255)); // R=255, G=0, B=0 — цвет светодиода
134        }
135        strip.show();
136        strip2.show();
137        delay(20);
138        for(int i = 0; i < count; i++)
139        {
140          strip.setPixelColor(i, strip.Color(0, 0, 0)); // R=255, G=0, B=0 — цвет светодиода
141          strip2.setPixelColor(i, strip2.Color(0, 0, 0)); // R=255, G=0, B=0 — цвет светодиода
142        }
143        strip.show();
144        strip2.show();
145        delay(20);
146      }
147      for(int j = 0; j < 16; j++)
148      {
149        for(int i = 0; i < count; i++)
150        {
151        strip.setPixelColor(i, strip.Color(0, 0, 255)); // R=255, G=0, B=0 — цвет светодиода
152        strip2.setPixelColor(i, strip2.Color(255, 0, 0)); // R=255, G=0, B=0 — цвет светодиода
153        }
154        strip.show();
155        strip2.show();
156        delay(20);
157        for(int i = 0; i < count; i++)
158        {
159          strip.setPixelColor(i, strip.Color(0, 0, 0)); // R=255, G=0, B=0 — цвет светодиода
160          strip2.setPixelColor(i, strip2.Color(0, 0, 0)); // R=255, G=0, B=0 — цвет светодиода
161        }
162        strip.show();
163        strip2.show();
164        delay(20);
165      }
166    }
167    if (digitalRead(4) == HIGH)
168    {
169      // Режим стробоскова, если на 4 пин подаем питание
170      for(int j = 0; j < 24; j++)
171      {
172        for(int i = 0; i < count; i++)
173        {
174        strip.setPixelColor(i, strip.Color(255, 255, 255)); // R=255, G=0, B=0 — цвет светодиода
175        strip2.setPixelColor(i, strip2.Color(0, 0, 0)); // R=255, G=0, B=0 — цвет светодиода
176        }
177        strip.show();
178        strip2.show();
179        delay(15);
180        for(int i = 0; i < count; i++)
181        {
182          strip.setPixelColor(i, strip.Color(0, 0, 0)); // R=255, G=0, B=0 — цвет светодиода
183          strip2.setPixelColor(i, strip2.Color(0, 0, 0)); // R=255, G=0, B=0 — цвет светодиода
184        }
185        strip.show();
186        strip2.show();
187        delay(15);
188      }
189      for(int j = 0; j < 24; j++)
190      {
191        for(int i = 0; i < count; i++)
192        {
193          strip.setPixelColor(i, strip.Color(0, 0, 0)); // R=255, G=0, B=0 — цвет светодиода
194          strip2.setPixelColor(i, strip2.Color(255, 255, 255)); // R=255, G=0, B=0 — цвет светодиода
195        }
196        strip.show();
197        strip2.show();
198        delay(15);
199        for(int i = 0; i < count; i++)
200        {
201          strip.setPixelColor(i, strip.Color(0, 0, 0)); // R=255, G=0, B=0 — цвет светодиода
202          strip2.setPixelColor(i, strip2.Color(0, 0, 0)); // R=255, G=0, B=0 — цвет светодиода
203        }
204        strip.show();
205        strip2.show();
206        delay(15);
207      }
208    }
209    if( digitalRead(3) == LOW and digitalRead(5) == LOW and digitalRead(6) == LOW and digitalRead(9) == LOW)
210    {
211      for(int i = 0; i < count+1; i++)
212      {
213        // Зажигаем ходовые огни, если нетниодного сигнала
214        strip.setPixelColor(i, strip.Color(255, 255, 255));
215        strip2.setPixelColor(i, strip2.Color(255, 255, 255));
216      }
217      strip.show();
218      strip2.show();
219    }
220  }
221}

 

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

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

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

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

b707 пишет:

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

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

1void setup() {
2  Serial.begin(115200);
3  Serial.print(true and false);
4}
5 
6void loop() {}

 

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

sadman41 пишет:

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

1void setup() {
2  Serial.begin(115200);
3  Serial.print(true and false);
4}
5 
6void 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
Offline
Зарегистрирован: 26.05.2017

опа...

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

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

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

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

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

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