Вообщем задача состояла в ледующем, заставить 4 кольца 2 из них 48 светодиодов 2 36светодиодов, гореть как мне нужно.
001 | #include <DallasTemperature.h> // подключаем библиотек для светодиодов |
002 | #include <Adafruit_NeoPixel.h> // подключаем библиотек для светодиодов |
003 | #include <avr/power.h> |
004 | #include <OneWire.h> // подключаем библиотек для датчиков температуры |
005 | #include <DallasTemperature.h> // подключаем библиотек для датчиков температуры |
007 | #define PIN0 2 // Управление правым, малым кругом |
008 | #define PIN1 3 // Управление правым, большим кругом |
009 | #define PIN2 4 // Управление левым, большим кругом |
010 | #define PIN3 5 // Управление левым, малым кругом |
011 | #define PIN4 6 // Датчик температуры ds18b20, для правой фары |
012 | #define PIN5 7 // Датчик температуры ds18b20, для левой фары |
014 | OneWire oneWireP(PIN4); |
015 | OneWire oneWireL(PIN5); |
016 | DallasTemperature sensorsP(&oneWireP); |
017 | DallasTemperature sensorsL(&oneWireL); |
019 | #define NUMPIXELS0 36 //Число светодиодов правый малый круг |
020 | #define NUMPIXELS1 48 //Число светодиодов правый большим круг |
021 | #define NUMPIXELS2 48 //Число светодиодов левым большим круг |
022 | #define NUMPIXELS3 36 //Число светодиодов левым малый круг |
025 | Adafruit_NeoPixel strip0 = Adafruit_NeoPixel(NUMPIXELS0, PIN0, NEO_RGBW + NEO_KHZ800); |
026 | Adafruit_NeoPixel strip1 = Adafruit_NeoPixel(NUMPIXELS1, PIN1, NEO_RGBW + NEO_KHZ800); |
027 | Adafruit_NeoPixel strip2 = Adafruit_NeoPixel(NUMPIXELS2, PIN2, NEO_RGBW + NEO_KHZ800); |
028 | Adafruit_NeoPixel strip3 = Adafruit_NeoPixel(NUMPIXELS3, PIN3, NEO_RGBW + NEO_KHZ800); |
032 | const int buttonPin0 = A0; |
033 | const int buttonPin1 = A1; |
034 | const int buttonPin2 = A2; |
035 | const int buttonPin3 = A3; |
036 | const int buttonPin4 = A4; |
059 | pinMode(buttonPin0, INPUT); |
060 | pinMode(buttonPin1, INPUT); |
061 | pinMode(buttonPin2, INPUT); |
062 | pinMode(buttonPin3, INPUT); |
063 | pinMode(buttonPin4, INPUT); |
070 | buttonState0 = digitalRead(buttonPin0); |
071 | buttonState1 = digitalRead(buttonPin1); |
072 | buttonState2 = digitalRead(buttonPin2); |
073 | buttonState3 = digitalRead(buttonPin3); |
074 | buttonState4 = digitalRead(buttonPin4); |
078 | Serial .println(CtempP); |
079 | Serial .println(CtempL); |
080 | Serial .println(CtempPL); |
084 | if (CtempPL >= -30 && CtempPL <= 80) |
086 | if (buttonState0 == 0 && buttonState1 == 0 && buttonState2 == 0 && buttonState3 == 0 && buttonState4 == 0 ) {off();} |
087 | if (buttonState0 == 0 && buttonState1 == 0 && buttonState2 == 0 && buttonState3 == 0 && buttonState4 == 1 ) {pravpow();} |
088 | if (buttonState0 == 0 && buttonState1 == 0 && buttonState2 == 0 && buttonState3 == 1 && buttonState4 == 0 ) {levpow();} |
089 | if (buttonState0 == 0 && buttonState1 == 0 && buttonState2 == 0 && buttonState3 == 1 && buttonState4 == 1 ) {avaria();} |
090 | if (buttonState0 == 0 && buttonState1 == 0 && buttonState2 == 1 && buttonState3 == 0 && buttonState4 == 0 ) {vtec();} |
091 | if (buttonState0 == 0 && buttonState1 == 0 && buttonState2 == 1 && buttonState3 == 0 && buttonState4 == 1 ) {pravpow();} |
092 | if (buttonState0 == 0 && buttonState1 == 0 && buttonState2 == 1 && buttonState3 == 1 && buttonState4 == 0 ) {levpow();} |
093 | if (buttonState0 == 0 && buttonState1 == 0 && buttonState2 == 1 && buttonState3 == 1 && buttonState4 == 1 ) {avaria();} |
094 | if (buttonState0 == 0 && buttonState1 == 1 && buttonState2 == 0 && buttonState3 == 0 && buttonState4 == 0 ) {off();} |
095 | if (buttonState0 == 0 && buttonState1 == 1 && buttonState2 == 0 && buttonState3 == 0 && buttonState4 == 1 ) {pravpow();} |
096 | if (buttonState0 == 0 && buttonState1 == 1 && buttonState2 == 0 && buttonState3 == 1 && buttonState4 == 0 ) {levpow();} |
097 | if (buttonState0 == 0 && buttonState1 == 1 && buttonState2 == 0 && buttonState3 == 1 && buttonState4 == 1 ) {avaria();} |
098 | if (buttonState0 == 0 && buttonState1 == 1 && buttonState2 == 1 && buttonState3 == 0 && buttonState4 == 0 ) {vtec();} |
099 | if (buttonState0 == 0 && buttonState1 == 1 && buttonState2 == 1 && buttonState3 == 0 && buttonState4 == 1 ) {pravpow();} |
100 | if (buttonState0 == 0 && buttonState1 == 1 && buttonState2 == 1 && buttonState3 == 1 && buttonState4 == 0 ) {levpow();} |
101 | if (buttonState0 == 0 && buttonState1 == 1 && buttonState2 == 1 && buttonState3 == 1 && buttonState4 == 1 ) {avaria();} |
102 | if (buttonState0 == 1 && buttonState1 == 0 && buttonState2 == 0 && buttonState3 == 0 && buttonState4 == 0 ) {gabarit();} |
103 | if (buttonState0 == 1 && buttonState1 == 0 && buttonState2 == 0 && buttonState3 == 0 && buttonState4 == 1 ) {pravpow();} |
104 | if (buttonState0 == 1 && buttonState1 == 0 && buttonState2 == 0 && buttonState3 == 1 && buttonState4 == 0 ) {levpow();} |
105 | if (buttonState0 == 1 && buttonState1 == 0 && buttonState2 == 0 && buttonState3 == 1 && buttonState4 == 1 ) {avaria();} |
106 | if (buttonState0 == 1 && buttonState1 == 0 && buttonState2 == 1 && buttonState3 == 0 && buttonState4 == 0 ) {vtec();} |
107 | if (buttonState0 == 1 && buttonState1 == 0 && buttonState2 == 1 && buttonState3 == 0 && buttonState4 == 1 ) {pravpow();} |
108 | if (buttonState0 == 1 && buttonState1 == 0 && buttonState2 == 1 && buttonState3 == 1 && buttonState4 == 0 ) {levpow();} |
109 | if (buttonState0 == 1 && buttonState1 == 0 && buttonState2 == 1 && buttonState3 == 1 && buttonState4 == 1 ) {avaria();} |
110 | if (buttonState0 == 1 && buttonState1 == 1 && buttonState2 == 0 && buttonState3 == 0 && buttonState4 == 0 ) {off();} |
111 | if (buttonState0 == 1 && buttonState1 == 1 && buttonState2 == 0 && buttonState3 == 0 && buttonState4 == 1 ) {pravpow();} |
112 | if (buttonState0 == 1 && buttonState1 == 1 && buttonState2 == 0 && buttonState3 == 1 && buttonState4 == 0 ) {levpow();} |
113 | if (buttonState0 == 1 && buttonState1 == 1 && buttonState2 == 0 && buttonState3 == 1 && buttonState4 == 1 ) {avaria();} |
114 | if (buttonState0 == 1 && buttonState1 == 1 && buttonState2 == 1 && buttonState3 == 0 && buttonState4 == 0 ) {vtec();} |
115 | if (buttonState0 == 1 && buttonState1 == 1 && buttonState2 == 1 && buttonState3 == 0 && buttonState4 == 1 ) {pravpow();} |
116 | if (buttonState0 == 1 && buttonState1 == 1 && buttonState2 == 1 && buttonState3 == 1 && buttonState4 == 0 ) {levpow();} |
117 | if (buttonState0 == 1 && buttonState1 == 1 && buttonState2 == 1 && buttonState3 == 1 && buttonState4 == 1 ) {avaria();} |
123 | for ( int i=0; i<NUMPIXELS0; i++) { |
124 | strip0.setPixelColor(i, strip0.Color(0, 0, 0, 0)); |
127 | for ( int i=0; i<NUMPIXELS1; i++) { |
128 | strip1.setPixelColor(i, strip1.Color(0, 0, 0, 0)); |
131 | for ( int i=0; i<NUMPIXELS2; i++) { |
132 | strip2.setPixelColor(i, strip2.Color(0, 0, 0, 0)); |
135 | for ( int i=0; i<NUMPIXELS3; i++) { |
136 | strip3.setPixelColor(i, strip3.Color(0, 0, 0, 0)); |
143 | for ( int i=0; i<NUMPIXELS0; i++) { |
144 | strip0.setPixelColor(i, strip0.Color(0, 0, 0, 255)); |
147 | for ( int i=0; i<NUMPIXELS1; i++) { |
148 | strip1.setPixelColor(i, strip1.Color(0, 0, 0, 255)); |
151 | for ( int i=0; i<NUMPIXELS2; i++) { |
152 | strip2.setPixelColor(i, strip2.Color(0, 0, 0, 255)); |
155 | for ( int i=0; i<NUMPIXELS3; i++) { |
156 | strip3.setPixelColor(i, strip3.Color(0, 0, 0, 255)); |
163 | for ( int i=0; i<NUMPIXELS0; i++) { |
164 | strip0.setPixelColor(i, strip0.Color(255, 0, 0, 0)); |
167 | for ( int i=0; i<NUMPIXELS1; i++) { |
168 | strip1.setPixelColor(i, strip1.Color(255, 0, 0, 0)); |
171 | for ( int i=0; i<NUMPIXELS2; i++) { |
172 | strip2.setPixelColor(i, strip2.Color(255, 0, 0, 0)); |
175 | for ( int i=0; i<NUMPIXELS3; i++) { |
176 | strip3.setPixelColor(i, strip3.Color(255, 0, 0, 0)); |
183 | for ( int i=0; i<NUMPIXELS0; i++) { |
184 | strip0.setPixelColor(i, strip0.Color(255, 40, 0, 0)); |
187 | for ( int i=0; i<NUMPIXELS1; i++) { |
188 | strip1.setPixelColor(i, strip1.Color(255, 40, 0, 0)); |
191 | for ( int i=0; i<NUMPIXELS2; i++) { |
192 | strip2.setPixelColor(i, strip2.Color(0, 0, 0, 255)); |
195 | for ( int i=0; i<NUMPIXELS3; i++) { |
196 | strip3.setPixelColor(i, strip3.Color(0, 0, 0, 255)); |
203 | for ( int i=0; i<NUMPIXELS0; i++) { |
204 | strip0.setPixelColor(i, strip0.Color(0, 0, 0, 255)); |
207 | for ( int i=0; i<NUMPIXELS1; i++) { |
208 | strip1.setPixelColor(i, strip1.Color(0, 0, 0, 255)); |
211 | for ( int i=0; i<NUMPIXELS2; i++) { |
212 | strip2.setPixelColor(i, strip2.Color(255, 40, 0, 0)); |
215 | for ( int i=0; i<NUMPIXELS3; i++) { |
216 | strip3.setPixelColor(i, strip3.Color(255, 40, 0, 0)); |
223 | for ( int i=0; i<NUMPIXELS0; i++) { |
224 | strip0.setPixelColor(i, strip0.Color(255, 40, 0, 0)); |
227 | for ( int i=0; i<NUMPIXELS1; i++) { |
228 | strip1.setPixelColor(i, strip1.Color(255, 40, 0, 0)); |
231 | for ( int i=0; i<NUMPIXELS2; i++) { |
232 | strip2.setPixelColor(i, strip2.Color(255, 40, 0, 0)); |
235 | for ( int i=0; i<NUMPIXELS3; i++) { |
236 | strip3.setPixelColor(i, strip3.Color(255, 40, 0, 0)); |
245 | sensorsP.requestTemperatures(); |
246 | CtempP=sensorsP.getTempCByIndex(0); |
247 | sensorsL.requestTemperatures(); |
248 | CtempL=sensorsL.getTempCByIndex(0); |
249 | CtempPL=(CtempP+CtempL)/2; |
В каждой фаре по датчику температуры, пределы от -30 до 80 градусов.
Заметил какую то задержку включения. Т.е. не все сразу загораются, а поочереди только очень быстро.
Гуру посмотрите код, что в нем дает такую задержку.
проект на ардуине мега.
Насколько я понял, команда strip.show() обновляет все светодиоды, соответственно не нужно выполнять её каждый виток цикла, а нужно вынести её наружу. А лучше бы все stripN.show() поместить в отдельную процедуру и вызывать её после циклов.
Ну и для одинакового количества numpixels можно применить один цикл. Т.е. NUMPIXELS0 и NUMPIXELS3 имеют значение 36, так зачем два цикла выполнять? Аналогично и для NUMPIXELS1 и NUMPIXELS2.
Ну и конвертацию strip.color(0,0,0,0) зачем столько раз делать?
Есть варианты -
setPixelColor(n, R, G, B) т.е. сразу в RGB
или
setPixelColor(n, color), где color - 32битный тип, объединяющий в себе RGB-составляющие.
uint32_t magenta = strip.color(255, 0, 255);
(В коде, что ниже, strip.color стырена в отдельную ф-ю RGB2Color)
01
//Режим "Всё выключено"
02
void
off(){
03
uint32_t black = RGB2Color(0, 0, 0);
04
for
(
int
i=0; i<NUMPIXELS0; i++) {
05
strip0.setPixelColor(i, black);
06
strip3.setPixelColor(i, black);
07
}
08
for
(
int
i=0; i<NUMPIXELS1; i++) {
09
strip1.setPixelColor(i, black);
10
strip2.setPixelColor(i, black);
11
}
12
Show();
13
}
14
15
void
Show() {
16
strip0.show();
17
strip1.show();
18
strip2.show();
19
strip3.show();
20
}
21
22
uint32_t RGB2Color(uint8_t r, uint8_t g, uint8_t b) {
23
return
((uint32_t)r << 16) | ((uint32_t)g << 8) | b;
24
}
1
return
((uint32_t)r << 16) | ((uint32_t)g << 8) | b;
Для WRGB используется перегруженный вариант strip.color(...) (см. исходник библы)
1
uint32_t WRGB2Color(uint8_t r, uint8_t g, uint8_t b, uint8_t w) {
2
return
((uint32_t)w << 24) | ((uint32_t)r << 16) | ((uint32_t)g << 8) | b;
3
}
001
#include <DallasTemperature.h> // подключаем библиотек для светодиодов
002
#include <Adafruit_NeoPixel.h> // подключаем библиотек для светодиодов
003
#include <avr/power.h>
004
#include <OneWire.h> // подключаем библиотек для датчиков температуры
005
#include <DallasTemperature.h> // подключаем библиотек для датчиков температуры
006
007
#define PIN0 2 // Управление правым, малым кругом
008
#define PIN1 3 // Управление правым, большим кругом
009
#define PIN2 4 // Управление левым, малым кругом
010
#define PIN3 5 // Управление левым, большим кругом
011
#define PIN4 6 // Датчик температуры ds18b20, для правой фары
012
#define PIN5 7 // Датчик температуры ds18b20, для левой фары
013
014
OneWire oneWireP(PIN4);
//скажем библиотеке, датчик где у нас температуры ds18b20, для правой фары
015
OneWire oneWireL(PIN5);
//скажем библиотеке, где у нас датчик температуры ds18b20, для левой фары
016
DallasTemperature sensorsP(&oneWireP);
//скажем библиотеке где у нас градусник для правой фары
017
DallasTemperature sensorsL(&oneWireL);
//скажем библиотеке где у нас градусник для левой фары
018
019
#define NUMPIXELS0 36 //Число светодиодов малый круг
020
#define NUMPIXELS1 48 //Число светодиодов большой круг
021
022
Adafruit_NeoPixel strip0 = Adafruit_NeoPixel(NUMPIXELS0, PIN0, NEO_RGBW + NEO_KHZ800);
023
Adafruit_NeoPixel strip1 = Adafruit_NeoPixel(NUMPIXELS1, PIN1, NEO_RGBW + NEO_KHZ800);
024
Adafruit_NeoPixel strip2 = Adafruit_NeoPixel(NUMPIXELS0, PIN2, NEO_RGBW + NEO_KHZ800);
025
Adafruit_NeoPixel strip3 = Adafruit_NeoPixel(NUMPIXELS1, PIN3, NEO_RGBW + NEO_KHZ800);
026
027
// задаем константы
028
029
const
int
buttonPin0 = A0;
// +5В Габариты
030
const
int
buttonPin1 = A1;
// +5В Ближний свет
031
const
int
buttonPin2 = A2;
// +5В Vtec
032
const
int
buttonPin3 = A3;
// +5В Левый поворотник
033
const
int
buttonPin4 = A4;
// +5В Правый поворотник
034
035
// переменные
036
037
int
buttonState0 = 0;
// переменная для хранения состояния Габаритов
038
int
buttonState1 = 0;
// переменная для хранения состояния Ближнего света
039
int
buttonState2 = 0;
// переменная для хранения состояния Vtec
040
int
buttonState3 = 0;
// переменная для хранения состояния Левый поворотник
041
int
buttonState4 = 0;
// переменная для хранения состояния Правый поворотнк
042
int
CtempP;
// Объявляем переменную для датчика температуры правой фары
043
int
CtempL;
// Объявляем переменную для датчика температуры левой фары
044
int
CtempPL;
// Объявляем переменную для средней температуры в фарах
045
046
uint32_t RGBW2Color(uint8_t r, uint8_t g, uint8_t b, uint8_t w) {
047
return
((uint32_t)w << 24) | ((uint32_t)r << 16) | ((uint32_t)g << 8) | b;
048
}
049
050
void
setup
() {
051
begin();
052
Show();
053
pinMode(buttonPin0, INPUT);
// инициализируем пин, подключенный к Габаритам, как вход
054
pinMode(buttonPin1, INPUT);
// инициализируем пин, подключенный к Ближнему свету, как вход
055
pinMode(buttonPin2, INPUT);
// инициализируем пин, подключенный к Vtec, как вход
056
pinMode(buttonPin3, INPUT);
// инициализируем пин, подключенный к Левому поворотнику, как вход
057
pinMode(buttonPin4, INPUT);
// инициализируем пин, подключенный к Правому поворотнику, как вход
058
Serial
.begin(9600);
059
}
060
061
void
loop
(){
062
063
//считываем значения с входа кнопки
064
065
buttonState0 = digitalRead(buttonPin0);
066
buttonState1 = digitalRead(buttonPin1);
067
buttonState2 = digitalRead(buttonPin2);
068
buttonState3 = digitalRead(buttonPin3);
069
buttonState4 = digitalRead(buttonPin4);
070
071
//Вывод температуры в консоль
072
073
Serial
.println(CtempP);
074
Serial
.println(CtempL);
075
Serial
.println(CtempPL);
076
077
// Условия при которых включается соответствующий режим
078
079
if
(CtempPL >= -30 && CtempPL <= 75)
// Если температура находиться в пределах от -30°С до +75°С, (значение по паспорту -40°С~+85°С), то выполняются нижеперечисленные условия
080
{
081
if
(buttonState0 == 0 && buttonState1 == 0 && buttonState2 == 0 && buttonState3 == 0 && buttonState4 == 0 ) {off();}
// всё выключено
082
if
(buttonState0 == 0 && buttonState1 == 0 && buttonState2 == 0 && buttonState3 == 0 && buttonState4 == 1 ) {pravpow();}
// правый поворотник
083
if
(buttonState0 == 0 && buttonState1 == 0 && buttonState2 == 0 && buttonState3 == 1 && buttonState4 == 0 ) {levpow();}
// Левый поворотник
084
if
(buttonState0 == 0 && buttonState1 == 0 && buttonState2 == 0 && buttonState3 == 1 && buttonState4 == 1 ) {avaria();}
// Аварийка поворотник
085
if
(buttonState0 == 0 && buttonState1 == 0 && buttonState2 == 1 && buttonState3 == 0 && buttonState4 == 0 ) {vtec();}
// Vtec поворотник
086
if
(buttonState0 == 0 && buttonState1 == 0 && buttonState2 == 1 && buttonState3 == 0 && buttonState4 == 1 ) {pravpow();}
// правый поворотник
087
if
(buttonState0 == 0 && buttonState1 == 0 && buttonState2 == 1 && buttonState3 == 1 && buttonState4 == 0 ) {levpow();}
// Левый поворотник
088
if
(buttonState0 == 0 && buttonState1 == 0 && buttonState2 == 1 && buttonState3 == 1 && buttonState4 == 1 ) {avaria();}
// Аварийка поворотник
089
if
(buttonState0 == 0 && buttonState1 == 1 && buttonState2 == 0 && buttonState3 == 0 && buttonState4 == 0 ) {off();}
// всё выключено
090
if
(buttonState0 == 0 && buttonState1 == 1 && buttonState2 == 0 && buttonState3 == 0 && buttonState4 == 1 ) {pravpow();}
// правый поворотник
091
if
(buttonState0 == 0 && buttonState1 == 1 && buttonState2 == 0 && buttonState3 == 1 && buttonState4 == 0 ) {levpow();}
// Левый поворотник
092
if
(buttonState0 == 0 && buttonState1 == 1 && buttonState2 == 0 && buttonState3 == 1 && buttonState4 == 1 ) {avaria();}
// Аварийка поворотник
093
if
(buttonState0 == 0 && buttonState1 == 1 && buttonState2 == 1 && buttonState3 == 0 && buttonState4 == 0 ) {vtec();}
// Vtec поворотник
094
if
(buttonState0 == 0 && buttonState1 == 1 && buttonState2 == 1 && buttonState3 == 0 && buttonState4 == 1 ) {pravpow();}
// правый поворотник
095
if
(buttonState0 == 0 && buttonState1 == 1 && buttonState2 == 1 && buttonState3 == 1 && buttonState4 == 0 ) {levpow();}
// Левый поворотник
096
if
(buttonState0 == 0 && buttonState1 == 1 && buttonState2 == 1 && buttonState3 == 1 && buttonState4 == 1 ) {avaria();}
// Аварийка поворотник
097
if
(buttonState0 == 1 && buttonState1 == 0 && buttonState2 == 0 && buttonState3 == 0 && buttonState4 == 0 ) {gabarit();}
//Габариты
098
if
(buttonState0 == 1 && buttonState1 == 0 && buttonState2 == 0 && buttonState3 == 0 && buttonState4 == 1 ) {pravpow();}
// правый поворотник
099
if
(buttonState0 == 1 && buttonState1 == 0 && buttonState2 == 0 && buttonState3 == 1 && buttonState4 == 0 ) {levpow();}
// Левый поворотник
100
if
(buttonState0 == 1 && buttonState1 == 0 && buttonState2 == 0 && buttonState3 == 1 && buttonState4 == 1 ) {avaria();}
// Аварийка поворотник
101
if
(buttonState0 == 1 && buttonState1 == 0 && buttonState2 == 1 && buttonState3 == 0 && buttonState4 == 0 ) {vtec();}
// Vtec поворотник
102
if
(buttonState0 == 1 && buttonState1 == 0 && buttonState2 == 1 && buttonState3 == 0 && buttonState4 == 1 ) {pravpow();}
// правый поворотник
103
if
(buttonState0 == 1 && buttonState1 == 0 && buttonState2 == 1 && buttonState3 == 1 && buttonState4 == 0 ) {levpow();}
// Левый поворотник
104
if
(buttonState0 == 1 && buttonState1 == 0 && buttonState2 == 1 && buttonState3 == 1 && buttonState4 == 1 ) {avaria();}
// Аварийка поворотник
105
if
(buttonState0 == 1 && buttonState1 == 1 && buttonState2 == 0 && buttonState3 == 0 && buttonState4 == 0 ) {off();}
// всё выключено
106
if
(buttonState0 == 1 && buttonState1 == 1 && buttonState2 == 0 && buttonState3 == 0 && buttonState4 == 1 ) {pravpow();}
// правый поворотник
107
if
(buttonState0 == 1 && buttonState1 == 1 && buttonState2 == 0 && buttonState3 == 1 && buttonState4 == 0 ) {levpow();}
// Левый поворотник
108
if
(buttonState0 == 1 && buttonState1 == 1 && buttonState2 == 0 && buttonState3 == 1 && buttonState4 == 1 ) {avaria();}
// Аварийка поворотник
109
if
(buttonState0 == 1 && buttonState1 == 1 && buttonState2 == 1 && buttonState3 == 0 && buttonState4 == 0 ) {vtec();}
// Vtec поворотник
110
if
(buttonState0 == 1 && buttonState1 == 1 && buttonState2 == 1 && buttonState3 == 0 && buttonState4 == 1 ) {pravpow();}
// правый поворотник
111
if
(buttonState0 == 1 && buttonState1 == 1 && buttonState2 == 1 && buttonState3 == 1 && buttonState4 == 0 ) {levpow();}
// Левый поворотник
112
if
(buttonState0 == 1 && buttonState1 == 1 && buttonState2 == 1 && buttonState3 == 1 && buttonState4 == 1 ) {avaria();}
// Аварийка поворотник
113
}
114
else
{off();}
//иначе все светодиоды не выключаются.
115
}
116
//Режим "Всё выключено"
117
void
off(){
118
uint32_t black = RGBW2Color(0, 0, 0, 0);
119
for
(
int
i=0; i<NUMPIXELS0; i++) {
120
strip0.setPixelColor(i, black);
121
strip3.setPixelColor(i, black);
122
}
123
for
(
int
i=0; i<NUMPIXELS1; i++) {
124
strip1.setPixelColor(i, black);
125
strip2.setPixelColor(i, black);
126
}
127
Show();
128
}
129
130
131
//Режим "Габариты", включены все кольца белым цветом
132
void
gabarit(){
133
uint32_t white = RGBW2Color(0, 0, 0, 255);
134
for
(
int
i=0; i<NUMPIXELS0; i++) {
135
strip0.setPixelColor(i, white);
136
strip3.setPixelColor(i, white);
137
}
138
for
(
int
i=0; i<NUMPIXELS1; i++) {
139
strip1.setPixelColor(i, white);
140
strip2.setPixelColor(i, white);
141
}
142
Show();
143
}
144
145
//Режим "Vtec", включены все кольца красным цветом
146
void
vtec(){
147
uint32_t red = RGBW2Color(255, 0, 0, 0);
148
for
(
int
i=0; i<NUMPIXELS0; i++) {
149
strip0.setPixelColor(i, red);
150
strip3.setPixelColor(i, red);
151
}
152
for
(
int
i=0; i<NUMPIXELS1; i++) {
153
strip1.setPixelColor(i, red);
154
strip2.setPixelColor(i, red);
155
}
156
Show();
157
}
158
159
//Режим "Правый поворотник", включениы правые кольца оранжевым цветом, левые белым
160
void
pravpow(){
161
uint32_t orange = RGBW2Color(255, 40, 0, 0);
162
uint32_t white = RGBW2Color(0, 0, 0, 255);
163
for
(
int
i=0; i<NUMPIXELS0; i++) {
164
strip0.setPixelColor(i, orange);
165
}
166
for
(
int
i=0; i<NUMPIXELS1; i++) {
167
strip1.setPixelColor(i, orange);
168
}
169
for
(
int
i=0; i<NUMPIXELS0; i++) {
170
strip2.setPixelColor(i, white);
171
}
172
for
(
int
i=0; i<NUMPIXELS1; i++) {
173
strip3.setPixelColor(i, white);
174
}
175
Show();
176
}
177
178
//Режим "Левый поворотник" включены левые кольца оранжевым цветом, правые белым
179
void
levpow(){
180
uint32_t orange = RGBW2Color(255, 40, 0, 0);
181
uint32_t white = RGBW2Color(0, 0, 0, 255);
182
for
(
int
i=0; i<NUMPIXELS0; i++) {
183
strip0.setPixelColor(i, white);
184
}
185
for
(
int
i=0; i<NUMPIXELS1; i++) {
186
strip1.setPixelColor(i, white);
187
}
188
for
(
int
i=0; i<NUMPIXELS0; i++) {
189
strip2.setPixelColor(i, orange);
190
}
191
for
(
int
i=0; i<NUMPIXELS1; i++) {
192
strip3.setPixelColor(i, orange);
193
}
194
Show();
195
}
196
197
//Режим "Аварийка", включены все кольца оранжевым цветам
198
void
avaria(){
199
uint32_t orange = RGBW2Color(255, 40, 0, 0);
200
for
(
int
i=0; i<NUMPIXELS0; i++) {
201
strip0.setPixelColor(i, orange);
202
strip1.setPixelColor(i, orange);
203
}
204
for
(
int
i=0; i<NUMPIXELS1; i++) {
205
strip2.setPixelColor(i, orange);
206
strip3.setPixelColor(i, orange);
207
}
208
Show();
209
}
210
211
//Считываем температуру с датчиков
212
213
void
TempTOvalue()
214
{
215
sensorsP.requestTemperatures();
//Опрашиваем датчик температуры ds18b20 правой фары
216
sensorsL.requestTemperatures();
//Опрашиваем датчик температуры ds18b20 левой фары
217
CtempP=sensorsP.getTempCByIndex(0);
//присваиваем переменную для температуры правой фары
218
CtempL=sensorsL.getTempCByIndex(0);
//присваиваем переменную для температуры левой фары
219
CtempPL=(CtempP+CtempL)/2;
//Вычисляем среднее значение температуры в фарах
220
}
221
222
// Обновляем все светодиоды.
223
224
void
Show()
225
{
226
strip0.show();
227
strip1.show();
228
strip2.show();
229
strip3.show();
230
}
231
232
// Выключаем все светодиодные кольца.
233
234
void
begin()
235
{
236
strip0.begin();
237
strip1.begin();
238
strip2.begin();
239
strip3.begin();
240
}
Ну вроде перепилил, если я тебя правельно понял :)
Единственное не получиться обьеденить в поворотниках, т.к. они разбиваются на левый и правый.
>>не получиться обьеденить в поворотниках, т.к. они разбиваются на левый и правый
Можно так:
01
//Режим "Правый поворотник", включениы правые кольца оранжевым цветом, левые белым
02
void
pravpow(){
03
uint32_t orange = RGBW2Color(255, 40, 0, 0);
04
uint32_t white = RGBW2Color(0, 0, 0, 255);
05
for
(
int
i=0; i<NUMPIXELS0; i++) {
06
strip0.setPixelColor(i, orange);
07
strip2.setPixelColor(i, white);
08
}
09
for
(
int
i=0; i<NUMPIXELS1; i++) {
10
strip1.setPixelColor(i, orange);
11
strip3.setPixelColor(i, white);
12
}
13
Show();
14
}
а можно и в одном цикле -
01
//Режим "Правый поворотник", включениы правые кольца оранжевым цветом, левые белым
02
void
pravpow(){
03
uint32_t orange = RGBW2Color(255, 40, 0, 0);
04
uint32_t white = RGBW2Color(0, 0, 0, 255);
05
06
for
(
int
i=0; i<NUMPIXELS1; i++) {
07
strip1.setPixelColor(i, orange);
08
strip3.setPixelColor(i, white);
09
if
(i < NUMPIXELS0) {
10
strip0.setPixelColor(i, orange);
11
strip2.setPixelColor(i, white);
12
}
13
}
14
Show();
15
}
А почему TempTOvalue() нигде не используется?
1
Serial
.println(CtempP);
2
Serial
.println(CtempL);
3
Serial
.println(CtempPL);
4
5
// Условия при которых включается соответствующий режим
6
7
if
(CtempPL >= -30 && CtempPL <= 75)
// Если температура находиться в пределах от -30°С до +75°С, (значение по паспорту -40°С~+85°С), то выполняются нижеперечисленные условия
Ну я с TempTOvalue() переменный выдергиваю. датчик ещё не подключал но в serial нули пишет, условие выполняется. Я что то делаю не так?
Кстати только что загнал код, всё получилось, задержки убрались, всё включается за доли секунды
Не критикуй за тупые вопросы, это мой первый код в жизни :)
OlegK, есть ещё 2 момента, которые я незнаю как осуществить.
1. Поворотники, хочеться сделать постепенное заполнение оранжевым светом за определенный промежуток времени, т.е. При включении поворота,2 кольца 36 и 48, одинаково заполняются.
Где то видел что добавляют
delay(x); как я понимаю эта задержка, т.е.
что бы например за секунду заполнить 36 , требуется 27,77мс, а для 48 20,83мс
delay(27.77);
delay(20.83);
Непонятно куда в цикл из запихать.
2. При переменном сигнале поворотника, точнее его отсутствии, по условию будет загораться обратно белый, как и где сделать условие, что бы при прерывании сигнала с поворотника, прога ждала повторный сигнал, и не включала белый свет. а то получается какая то светомузыка :)
Эта процедура присваивает значения глобальным переменным, которые вы выводите в порт, но учитывая, что
она нигде не вызывается, то и значения этих переменных всегда будут нулевыми. Значит, нужно вызывать этот кусок кода в loop(), но периодически, с интервалом не менее секунды, а лучше более (специфика этих термодатчиков) и без delay.
Внутри тела цикла, первой или последней строкой.
Значения должны быть целочисленными.
по п2. я не понял, что требуется. Если есть некое условие, то при нужном состоянии можно выполнить принудительный выход из цикла, не дожидаясь его окончания. Командой break.
01
//Режим "Правый поворотник", включениы правые кольца оранжевым цветом, левые белым
02
void
pravpow(){
03
delay(1000);
04
uint32_t orange = RGBW2Color(40, 255, 0, 0);
05
uint32_t white = RGBW2Color(0, 0, 0, 255);
06
for
(
int
i=0; i<NUMPIXELS0; i++) {
07
strip0.setPixelColor(i, orange);
08
Show();
09
}
10
for
(
int
i=0; i<NUMPIXELS1; i++) {
11
strip1.setPixelColor(i, orange);
12
Show();
13
}
14
for
(
int
i=0; i<NUMPIXELS0; i++) {
15
strip2.setPixelColor(i, white);
16
}
17
for
(
int
i=0; i<NUMPIXELS1; i++) {
18
strip3.setPixelColor(i, white);
19
}
20
Show();
21
}
Если delay ставить в начале, действия выполняются последовательно, как сделать парралельное включение обеих колец?
Вот, что получается
https://www.youtube.com/watch?v=akn3c_1hV8I
Ну и собственно у каждого кольца, должна быть своя задержка.
Для чего у вас задержка в секунду в начале процедуры?
Для чего вызов show() помещён то в цикле, то снаружи?
>>как сделать парралельное включение обеих колец?
В сообщении 5 уже я показывал, как поместить включение обеих колец в один цикл. И даже всех четырёх.
А если хотите, что бы всё вообще раздельно работало, с индивидуальными задержками и ничего не блокировалось, ковыряйте в сторону "blink без delay", опроса кнопок через PCINT и смены принципа работы программы...
задержка для тестирования.
а show() я просто эксперементировал
Голова кипит уже.
Подскажите как в коде
1
void
pravpowB(){
2
uint32_t orange = RGBW2Color(40, 255, 0, 0);
3
for
(
int
i=0; i<NUMPIXELS1; i++) {
4
strip1.setPixelColor(i, orange);
5
strip1.show();
6
delay(20);
7
}
8
}
заменить delay(20) на milis()
Ну, как и всегда, вычислить разницу между текущей и старой миллис, если больше или равна заданному интервалу, выполнить код, приравнять старую миллис к текущей и вернуться в основное тело.
Столько уже всего пречитал. Но все равно немогу догнать, как конкретно в моем коде приминить millis () можете помочь?
Лана, начал писать, понял что неправ. В форе такой номер не пройдет, а если и сделать, то ничем не будет отличаться от делая (из фора можно выйти по окончанию цикла или принудительно). Лично мое видение - делаем аналог фора на ифах и уже там отсчитываем задержки.
01
void
функция (){
02
03
static
unsigned
long
prevTime = 0;
04
if
(millis() - prevTime > 20) {
//Проверка заданного интервала
05
06
что то делаем
07
08
prevTime = millis();
09
10
}
11
}
Как я понят получается, что то типо того:
01
void
функция (){
02
static
unsigned
long
prevTime = 0;
03
if
(millis() - prevTime > 20) {
//Проверка заданного интервала
04
05
uint32_t orange = RGBW2Color(40, 255, 0, 0);
06
int
i=0;
07
if
(i<NUMPIXELS1){i++;}
08
strip1.setPixelColor(i, orange);
09
strip1.show();
10
11
prevTime = millis();
12
}
13
}
примерно так, i надо тоже сделать static или глобальной и по окончании if-а принудительно ее обнулить. Как сейчас, она у вас всегда будет равна 0.
тоже жду такую ленту, смотрел видяхи про них( в даташите глубоко не разбирался) у всех светодиоды по очереди загарабтся, первый светодиод принимает свои биты, загорается, и передает биты дальше второму, второй третьему. вот и результат
Здравствуйте, Magra!
Сможете ли написать на почту morev.d.s@gmail.com У меня похожий проект, но на начальной стадии. Нужен Ваш совет (скорее всего не один).
разместите заказ в платном разделе - вам напишут код.
А тут, когда вы в скетче ничего не понимаете и даже не можете правильно вставить код в сообщение - вряд ли кто-то станет вас учить с нуля.
спасибо большое конечно вам. но знать бы еще куда и где писать мне?
но знать бы еще куда и где писать мне?
А я разве непонятно обьяснил?
Если хотите результат без особого труда - в раздел платной помощи Ищу исполнителя
Если хотите разобраться сами - начните с изучения правил форума вот тут: Песочница