Просьба помочь отредактировать имеющийся скетчю
- Войдите на сайт для отправки комментариев
Добрый день! Сразу скажу, от программирования далек, поэтому и обращаюсь за помощью. Имеется готовый проект реализации дневных ходовых огней (ДХО) с функцией поворотника на адресой светодиодной ленте под управлением ардуно. Все это дело с горем попалам собрано и спаяно, но столкнулся со следуйщим моментом: ДХО необходимо отключать при движении в темное время суток т.е. в моем случае при включении света или габаритов в авто. Хотелось бы добавить данный алгоритм в скетч. Как вариант вижу это так : имеется режим при активации 4 цифрового пина страбоскоп, его удаляем и добавляем сюда при активации пина отключение ДХО, но что бы при этом при получении сигналов на пины 5 и 6 поворотники работали. Скетч предоставляю ниже, взят из свободного доступа. Возможно ли реализовать здесь данный режим или стоит искать другой вариант. Спасибо!
001 | #include <Adafruit_NeoPixel.h> // подключаем библиотеку |
002 | int count=7; // количество диодов на одной фаре |
003 | Adafruit_NeoPixel strip = Adafruit_NeoPixel(count, 7, NEO_GRB + NEO_KHZ800); //Инициализируем первый поворотник на 7 цифровом выходе |
004 | Adafruit_NeoPixel strip2 = Adafruit_NeoPixel(count, 8, NEO_GRB + NEO_KHZ800); //Инициализируем второй поворотник на 8 цифровом выходе |
005 | void 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 | } |
016 | void 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 | } |
исправить этот код очень просто - достаточно добавить в условие строки 209 чтение пина 4 и выкинуть режим стробоскоп - все будет работать именно так, как вы хотите.
Я не стал править этот код потому, что в коде есть ошибки - например в той же строке 209 использован неведомый оператор "and". которого нет в языке С - а значит редактировать этот код бессмысленно,
Я не стал править этот код потому, что в коде есть ошибки - например в той же строке 209 использован неведомый оператор "and". которого нет в языке С - а значит редактировать этот код бессмысленно,
Я тоже долго не верил, но зацени:
1
void
setup
() {
2
Serial
.begin(115200);
3
Serial
.print(
true
and
false
);
4
}
5
6
void
loop
() {}
Я тоже долго не верил, но зацени:
1
void
setup
() {
2
Serial
.begin(115200);
3
Serial
.print(
true
and
false
);
4
}
5
6
void
loop
() {}
заценить сейчас не могу, ардуины нет.
И чо, работает?? вероятно, где-то в глубинах вайринга задефайнили "and" на "&&" ?
И чо, работает?? вероятно, где-то в глубинах вайринга задефайнили "and" на "&&" ?
Nope. No any Wiring magic here: https://en.wikipedia.org/wiki/Operators_in_C_and_C%2B%2B#cite_note-synonyms-2
https://en.wikipedia.org/wiki/Operators_in_C_and_C%2B%2B#cite_note-synonyms-2
опа...
"век живи - век учись"
Zaconnik - с учетом поправки sadman41 - претензии к скетчу снимаются.
Что исправлять - смотрите первый абзац моего ответа в сообщении #1 - все должно заработать.
От хоспода, я конечно наливочки, под ужин, выкушал, возможно память отшибло, но не помню, где я в "Песочнице" про мать Терезу постил и пять добрых дел, которые каждый, уважающий себя, жентельмен должен совершить в течении суток?))))