#include <Adafruit_NeoPixel.h>
#define LED_PIN0 0 // Пин, к которому подключены первые 10 светодиодов
#define LED_PIN1 18 // Пин, к которому подключены следующие 20 светодиодов (белый цвет)
#define LED_PIN2 2 // Пин, к которому подключены другие 20 светодиодов (красный цвет)
#define NUMPIXELS0 10 // Количество светодиодов для первой полосы
#define NUMPIXELS1 20 // Количество светодиодов для второй полосы
#define NUMPIXELS2 20 // Количество светодиодов для третьей полосы
#define ADC1_PIN 33 // Пин ADC1 (GPIO3)
#define ADC2_PIN 4 // Пин ADC2 (GPIO4)
#define ADC3_PIN 26 // Пин ADC3 (GPIO5)
// Определение цветов для первой полосы
uint32_t colorOn = Adafruit_NeoPixel::Color(230, 230, 255); // Белый цвет для включенного светодиода
uint32_t colorLight = Adafruit_NeoPixel::Color(10, 15, 30); // Тускло голубой цвет для отключенного светодиода
uint32_t colorOff = Adafruit_NeoPixel::Color(0, 0, 0); // off
uint32_t colorEmerald = Adafruit_NeoPixel::Color(0, 255, 127);// Изумрудный цвет
// Определение цветов для второй и третьей полос
uint32_t colorWhite = Adafruit_NeoPixel::Color(255, 255, 255); // Белый цвет
uint32_t colorRed = Adafruit_NeoPixel::Color(255, 0, 30); // Красный цвет
Adafruit_NeoPixel pixels0(NUMPIXELS0, LED_PIN0, NEO_GRB + NEO_KHZ800);
Adafruit_NeoPixel pixels1(NUMPIXELS1, LED_PIN1, NEO_GRB + NEO_KHZ800);
Adafruit_NeoPixel pixels2(NUMPIXELS2, LED_PIN2, NEO_GRB + NEO_KHZ800);
float adc3_min = 3.3;
unsigned long prevMillis = 0;
const unsigned long interval = 2000;
bool trackingMode = false;
void setup() {
Serial.begin(115200);
Serial.println("Hello");
pixels0.begin();
pixels1.begin();
pixels2.begin();
pinMode(ADC1_PIN, INPUT);
pinMode(ADC2_PIN, INPUT);
pinMode(ADC3_PIN, INPUT);
//adc3_min = analogRead(ADC3_PIN) * (3.3 / 4095.0);
//Serial.println(adc3_min);
// Плавное включение первой полосы (радужная волна) и второй, третьей полос светодиодов
for (int i = 0; i < 256; i += 2) { // Увеличение шага для ускорения
for (int j = 0; j < NUMPIXELS0; j++) {
pixels0.setPixelColor(j, Wheel((i + j) & 255)); // Плавное изменение цвета для каждого светодиода первой полосы (радужная волна)
}
for (int j = 0; j < NUMPIXELS1; j++) {
pixels1.setPixelColor(j, pixels1.Color(i, i, i)); // Плавное изменение яркости для второй полосы (белый цвет)
}
for (int j = 0; j < NUMPIXELS2; j++) {
pixels2.setPixelColor(j, pixels2.Color(i, 0, 0)); // Плавное изменение яркости для третьей полосы (красный цвет)
}
pixels0.show();
pixels1.show();
pixels2.show();
delay(10); // Уменьшение задержки для ускорения
}
// Устанавливаем постоянный цвет для второй полосы (белый цвет)
for (int i = 0; i < NUMPIXELS1; i++) {
pixels1.setPixelColor(i, colorWhite);
pixels2.setPixelColor(i, colorRed);
}
pixels1.show();
pixels2.show();
}
void loop() {
// Считываем значения с пинов
int adc1_val = analogRead(ADC1_PIN);
int adc2_val = analogRead(ADC2_PIN);
// Конвертируем значения в напряжение
float adc1_voltage = adc1_val * (3.3 / 4095.0);
float adc2_voltage = adc2_val * (3.3 / 4095.0);
unsigned long currentMillis = millis();
if (adc1_voltage > 3.0 && adc2_voltage > 3.0) {
if (!trackingMode) {
if (currentMillis - prevMillis >= interval) {
// Мигание всеми светодиодами изумрудным цветом
for (int j = 0; j < 2; j++) {
for (int i = 0; i < NUMPIXELS0; i++) {
pixels0.setPixelColor(i, colorEmerald);
}
pixels0.show();
delay(150);
for (int i = 0; i < NUMPIXELS0; i++) {
pixels0.setPixelColor(i, colorOff);
}
pixels0.show();
delay(150);
}
trackingMode = true;
}
}
} else {
prevMillis = currentMillis;
trackingMode = false;
}
if (trackingMode) {
int adc3_val = analogRead(ADC3_PIN);
float adc3_voltage = adc3_val * (3.3 / 4095.0);
if(adc3_voltage < adc3_min) {adc3_min = adc3_voltage;}
int num_leds = map(adc3_min, 0, 3.3, 0, NUMPIXELS0);
//int num_leds = map(adc3_voltage, 0, 3.3, 0, NUMPIXELS0);
// Управляем светодиодами первой полосы
for (int i = 0; i < NUMPIXELS0; i++) {
if (i < num_leds) {
pixels0.setPixelColor(i, colorOn); // Включенный светодиод
} else {
pixels0.setPixelColor(i, colorLight); // приглушенный светодиод
}
}
pixels0.show();
} else {
// Управляем светодиодами первой полосы на основе adc1 и adc2
for (int i = 0; i < NUMPIXELS0; i++) {
if (adc1_voltage > 3.0 && adc2_voltage < 3.0) {
if(i >= 5) pixels0.setPixelColor(i, colorOff);
if(i < 5) pixels0.setPixelColor(i, colorEmerald);
} else if (adc2_voltage > 3.0 && adc1_voltage < 3.0) {
if(i >= 5) pixels0.setPixelColor(i, colorEmerald);
if(i < 5) pixels0.setPixelColor(i, colorOff);
} else if (adc1_voltage > 3.0 && adc2_voltage > 3.0) {
pixels0.setPixelColor(i, colorEmerald);
} else {
int adc3_val = analogRead(ADC3_PIN);
float adc3_voltage = adc3_val * (3.3 / 4095.0);
if(adc3_voltage < adc3_min) {adc3_min = adc3_voltage;}
int num_leds = map(adc3_min, 0, 3.3, 0, NUMPIXELS0);
//int num_leds = map(adc3_voltage, 0, 3.3, 0, NUMPIXELS0);
Serial.println(adc3_voltage);
if (i < num_leds) {
pixels0.setPixelColor(i, colorOn); // Включенный светодиод
} else {
pixels0.setPixelColor(i, colorLight); // приглушенный светодиод
}
}
}
pixels0.show();
}
delay(100);
}
// Функция для создания цветов радуги
uint32_t Wheel(byte WheelPos) {
WheelPos = 255 - WheelPos;
if (WheelPos < 85) {
return pixels0.Color(255 - WheelPos * 3, 0, WheelPos * 3);
} else if (WheelPos < 170) {
WheelPos -= 85;
return pixels0.Color(0, WheelPos * 3, 255 - WheelPos * 3);
} else {
WheelPos -= 170;
return pixels0.Color(WheelPos * 3, 255 - WheelPos * 3, 0);
}
}