Прошу вас посмотреть и исправить ошибку в коде. Цикл-1 минуты не работает,смена цвета происходит только через 47 сек,при этом в коде указанно 40,цвета сменяются не плавно как хотелось,при дополнении или смены строк в коде,появляются ошибки и много,при удалении строк жёлтого цвета в цикле возникает следующее:цикл завершается красным цветом и смены последующих цветов не происходит 25 минут ждал и без результата.Плату использовал Arduino UNO питание от powerbank 5800,через USB переходник. КОД: #include <Adafruit_NeoPixel.h> Adafruit_NeoPixel strip1 = Adafruit_NeoPixel(8, 2, NEO_GRB + NEO_KHZ800); Adafruit_NeoPixel strip2 = Adafruit_NeoPixel(16, 3, NEO_GRB + NEO_KHZ800); int oldRed = 80, newRed = 0, redDiff = 0; int oldGreen = 80, newGreen = 0, greenDiff = 0; int oldBlue = 80, newBlue = 0, blueDiff = 0; int oldYellow = 80, newYellow = 0, yellowDiff = 0; unsigned long timeToChangeColor = 0; #define DELAY_TO_CHANGE_COLOR 20; unsigned long delayTime = 40000; // Пауза между циклами unsigned long timeNow = 0; // Пауза между циклами int gradientWidth = 100; // Сколько раз меняем градиент int gradientFrequency = 100; // Частота с которой меняем цвет в градиенте int gradientTime = gradientWidth * gradientFrequency; // Всего времени на градиент void setColorDifference() { if (oldRed == newRed) { redDiff = 0; } else { redDiff = abs(oldRed - newRed) / gradientWidth; } if (oldRed > newRed) { redDiff *= -1; } if (oldGreen == newGreen) { greenDiff = 0; } else { greenDiff = abs(oldGreen - newGreen) / gradientWidth; } if (oldGreen > newGreen) { greenDiff *= -1; } if (oldBlue == newBlue) { blueDiff = 0; } else { blueDiff = abs(oldBlue - newBlue) / gradientWidth; } if (oldBlue > newBlue) { blueDiff *= -1; } if (oldYellow == newYellow) { yellowDiff = 0; } else { yellowDiff = abs(oldYellow - newYellow) / gradientWidth; } if (oldYellow > newYellow) { yellowDiff *= -1; } } void setup() { strip1.begin(); strip2.begin(); strip1.show(); strip2.show(); } void setRandomNewColor() { randomSeed(analogRead(0)); newRed = random(0, 80); randomSeed(analogRead(0)); newGreen = random(0, 80); randomSeed(analogRead(0)); newBlue = random(0, 80); randomSeed(analogRead(0)); newYellow = random(0, 80); } void loop() { setRandomNewColor(); setColorDifference(); for (int c = 1 ; c < gradientWidth + 1; c++) { for (int i = 0; i < strip1.numPixels(); i++) { strip1.setPixelColor(i, strip1.Color( round(oldRed + (c * redDiff)), round(oldGreen + (c * greenDiff)), round(oldBlue + (c * blueDiff)), round(oldYellow + (c * yellowDiff)) )); } for (int i = 0; i < strip2.numPixels(); i++) { strip2.setPixelColor(i, strip2.Color( round(oldRed + (c * redDiff)), round(oldGreen + (c * greenDiff)), round(oldBlue + (c * blueDiff)), round(oldYellow + (c * yellowDiff)) )); } strip1.show(); strip2.show(); delay(gradientFrequency); } oldRed = newRed; oldBlue = newBlue; oldGreen = newGreen; oldYellow = newYellow; timeNow = millis(); while (millis() < timeNow + delayTime) {} }
вот код Код (C++): #include <Adafruit_NeoPixel.h> Adafruit_NeoPixel strip1 = Adafruit_NeoPixel(8, 2, NEO_GRB + NEO_KHZ800); Adafruit_NeoPixel strip2 = Adafruit_NeoPixel(16, 3, NEO_GRB + NEO_KHZ800); int oldRed = 80, newRed = 0, redDiff = 0; int oldGreen = 80, newGreen = 0, greenDiff = 0; int oldBlue = 80, newBlue = 0, blueDiff = 0; int oldYellow = 80, newYellow = 0, yellowDiff = 0; unsigned long timeToChangeColor = 0; #define DELAY_TO_CHANGE_COLOR 20; unsigned long delayTime = 40000; // Пауза между циклами unsigned long timeNow = 0; // Пауза между циклами int gradientWidth = 100; // Сколько раз меняем градиент int gradientFrequency = 100; // Частота с которой меняем цвет в градиенте int gradientTime = gradientWidth * gradientFrequency; // Всего времени на градиент void setColorDifference() { if (oldRed == newRed) { redDiff = 0; } else { redDiff = abs(oldRed - newRed) / gradientWidth; } if (oldRed > newRed) { redDiff *= -1; } if (oldGreen == newGreen) { greenDiff = 0; } else { greenDiff = abs(oldGreen - newGreen) / gradientWidth; } if (oldGreen > newGreen) { greenDiff *= -1; } if (oldBlue == newBlue) { blueDiff = 0; } else { blueDiff = abs(oldBlue - newBlue) / gradientWidth; } if (oldBlue > newBlue) { blueDiff *= -1; } if (oldYellow == newYellow) { yellowDiff = 0; } else { yellowDiff = abs(oldYellow - newYellow) / gradientWidth; } if (oldYellow > newYellow) { yellowDiff *= -1; } } void setup() { strip1.begin(); strip2.begin(); strip1.show(); strip2.show(); } void setRandomNewColor() { randomSeed(analogRead(0)); newRed = random(0, 80); randomSeed(analogRead(0)); newGreen = random(0, 80); randomSeed(analogRead(0)); newBlue = random(0, 80); randomSeed(analogRead(0)); newYellow = random(0, 80); } void loop() { setRandomNewColor(); setColorDifference(); for (int c = 1 ; c < gradientWidth + 1; c++) { for (int i = 0; i < strip1.numPixels(); i++) { strip1.setPixelColor(i, strip1.Color( round(oldRed + (c * redDiff)), round(oldGreen + (c * greenDiff)), round(oldBlue + (c * blueDiff)), round(oldYellow + (c * yellowDiff)) )); } for (int i = 0; i < strip2.numPixels(); i++) { strip2.setPixelColor(i, strip2.Color( round(oldRed + (c * redDiff)), round(oldGreen + (c * greenDiff)), round(oldBlue + (c * blueDiff)), round(oldYellow + (c * yellowDiff)) )); } strip1.show(); strip2.show(); delay(gradientFrequency); } oldRed = newRed; oldBlue = newBlue; oldGreen = newGreen; oldYellow = newYellow; timeNow = millis(); while (millis() < timeNow + delayTime) {} } а тут предупреждение Код (Text): C:\Users\nemvi.DESKTOP-SFK8G8G\Documents\Arduino\neopixel_1\neopixel_1.ino: In function 'void loop()': C:\Users\nemvi.DESKTOP-SFK8G8G\Documents\Arduino\neopixel_1\neopixel_1.ino:58:23: warning: comparison between signed and unsigned integer expressions [-Wsign-compare] for (int i = 0; i < strip1.numPixels(); i++) { ^ C:\Users\nemvi.DESKTOP-SFK8G8G\Documents\Arduino\neopixel_1\neopixel_1.ino:66:23: warning: comparison between signed and unsigned integer expressions [-Wsign-compare] for (int i = 0; i < strip2.numPixels(); i++) { ^
а вот исправленный код Код (C++): #include <Adafruit_NeoPixel.h> Adafruit_NeoPixel strip1 = Adafruit_NeoPixel(8, 2, NEO_GRB + NEO_KHZ800); Adafruit_NeoPixel strip2 = Adafruit_NeoPixel(16, 3, NEO_GRB + NEO_KHZ800); int oldRed = 80, newRed = 0, redDiff = 0; int oldGreen = 80, newGreen = 0, greenDiff = 0; int oldBlue = 80, newBlue = 0, blueDiff = 0; int oldYellow = 80, newYellow = 0, yellowDiff = 0; unsigned long timeToChangeColor = 0; #define DELAY_TO_CHANGE_COLOR 20; unsigned long delayTime = 40000; // Пауза между циклами unsigned long timeNow = 0; // Пауза между циклами int gradientWidth = 100; // Сколько раз меняем градиент int gradientFrequency = 100; // Частота с которой меняем цвет в градиенте int gradientTime = gradientWidth * gradientFrequency; // Всего времени на градиент void setColorDifference() { if (oldRed == newRed) { redDiff = 0; } else { redDiff = abs(oldRed - newRed) / gradientWidth; } if (oldRed > newRed) { redDiff *= -1; } if (oldGreen == newGreen) { greenDiff = 0; } else { greenDiff = abs(oldGreen - newGreen) / gradientWidth; } if (oldGreen > newGreen) { greenDiff *= -1; } if (oldBlue == newBlue) { blueDiff = 0; } else { blueDiff = abs(oldBlue - newBlue) / gradientWidth; } if (oldBlue > newBlue) { blueDiff *= -1; } if (oldYellow == newYellow) { yellowDiff = 0; } else { yellowDiff = abs(oldYellow - newYellow) / gradientWidth; } if (oldYellow > newYellow) { yellowDiff *= -1; } } void setup() { strip1.begin(); strip2.begin(); strip1.show(); strip2.show(); } void setRandomNewColor() { randomSeed(analogRead(0)); newRed = random(0, 80); randomSeed(analogRead(0)); newGreen = random(0, 80); randomSeed(analogRead(0)); newBlue = random(0, 80); randomSeed(analogRead(0)); newYellow = random(0, 80); } void loop() { setRandomNewColor(); setColorDifference(); for (int c = 1 ; c < (int)gradientWidth + 1; c++) { for (int i = 0; i < (int)strip1.numPixels(); i++) { strip1.setPixelColor(i, strip1.Color( round(oldRed + (c * redDiff)), round(oldGreen + (c * greenDiff)), round(oldBlue + (c * blueDiff)), round(oldYellow + (c * yellowDiff)) )); } for (int i = 0; i < (int)strip2.numPixels(); i++) { strip2.setPixelColor(i, strip2.Color( round(oldRed + (c * redDiff)), round(oldGreen + (c * greenDiff)), round(oldBlue + (c * blueDiff)), round(oldYellow + (c * yellowDiff)) )); } strip1.show(); strip2.show(); delay(gradientFrequency); } oldRed = newRed; oldBlue = newBlue; oldGreen = newGreen; oldYellow = newYellow; timeNow = millis(); while (millis() < timeNow + delayTime) {} }
Пробовал симуляцию в протеус - есть каке то данные на портах, но в протеусе кажеться не работает 2812 лед
подключал два кольца https://www.chipdip.ru/product/neopixel-ring-16-8?from=suggest_product вот попробуй прям на ленте