Что-то сбрасывается при окончании самого длинного millis
- Войдите на сайт для отправки комментариев
Сб, 02/10/2021 - 01:15
Здравствуйте!
Помогите пожалуйста кое-что.
Написал код с использованием FastLED. Пытаюсь контролировать три куска адресной ленты параллельно отдельно. Проблема вот в чем. Когда самая длинная лента заканчивает свой цикл, остальные сбрасывают свой цвет в начало.
Вот код. Максимально откомментировал, чтобы было проще, если нужен будет видос проблемы, скину:
#include <FastLED.h> //Количество светодиодов на каждой ленте #define NUM_LEDS_1 3 #define NUM_LEDS_2 6 #define NUM_LEDS_3 45 //Цвета CRGB redLeds[NUM_LEDS_1]; CRGB greenLeds[NUM_LEDS_2]; CRGB blueLeds[NUM_LEDS_3]; //Переменные для получения номера светодиодов byte counter1 = 0; int counter2 = 0; int counter3 = 0; //Переменные для таймеров unsigned long timing1 = 0; unsigned long timing2 = 0; void setup() { //Инициализировал три ленты отдельно по пинам FastLED.addLeds<NEOPIXEL, 6>(redLeds, NUM_LEDS_1); FastLED.addLeds<NEOPIXEL, 5>(greenLeds, NUM_LEDS_2); FastLED.addLeds<NEOPIXEL, 7>(blueLeds, NUM_LEDS_3); } void loop() { //Таймер 1 if (millis() - timing1 > 20) { timing1 = millis(); ledFirst(); } //Таймер 2 if (millis() - timing2 > 50) { timing2 = millis(); ledSecond(); } } //Функция для первых двух лент (Радуга) void ledFirst() { for (int i = 0; i < NUM_LEDS_1; i++ ) { redLeds[i] = CHSV(counter1 + i * 2, 255, 50); } for (int i = 0; i < NUM_LEDS_2; i++ ) { greenLeds[i] = CHSV(counter2 + i * 2, 255, 50); } counter1++; counter2++; FastLED.show(); } //Функция для третьей ленты (бежит точка с хвостом) void ledSecond() { blueLeds[counter3] = CHSV(counter3 * 255 / NUM_LEDS_3, 255, 100); blueLeds[counter3 - 1] = CHSV(counter3 * 255 / NUM_LEDS_3, 255, 50); blueLeds[counter3 - 2] = CHSV(counter3 * 255 / NUM_LEDS_3, 255, 30); blueLeds[counter3 - 3] = CHSV(counter3 * 255 / NUM_LEDS_3, 255, 15); blueLeds[counter3 - 4] = CHSV(counter3 * 255 / NUM_LEDS_3, 255, 0); counter3++; if (counter3 >= NUM_LEDS_3) { counter3 = 0; }; FastLED.show(); }
Заранее спасибо!
Как Вы думаете, blueLeds[counter3 - 4] при counter3 == 0 - это где?
Anatonokao, а нафига вторая такая же ветка? Тех отвнтов, что были вчера - недостаточно?
Я в душе не понимаю, что произошло(что админ сделал). У меня еще вчера при публикации ветка сдублировалась, после чего в одной из них я попросил удалить одну, в другой соответственно были ответы. Гляньте на время публикации.
С этой проблемой разобрался. Спасибо большое всем, кто отвечал. Теперь вылезла другая.
Написал еще пару эффектов для этих трех кусков. Выпихал эти функции в отдельный .h и пытаюсь switch их по кнопке(ее тоже пихнул в отдельный .h). Первые два кейса, четвертый и дефолт отрабатывают хорошо, а при переключении на третий происходит вакханалия(явно не то, что я имею в виду). При этом отдельной прошивкой он тоже хорошо отрабатывает. На всякий случай приложу весь имеющийся код, потому что не знаю, где конкретно проблема. Опять же максимально все откомментировал, чтобы было проще.
Вот основной файл с кейсами:
Вот .h с функциями:
И .h кнопки на всякий случай:
Помогите пожалуйста, люди добрые! Битый час сижу!
Заранее спасибо!
Если бы в той теме Вам сразу бы не показали проблему, то Вы бы научились дебажить свой код и локализовать ошибки.
Поэтому снова без вызываемой в case 3 функции все работает? Если её заменить на простую типа fill() // не помню, как там в фастледе заливка страйпа // все работает нормально?
> с этой проблемой разобрался, теперь вылезла другая.....
Anatonokao, вы совсем идиот? С чем вы разобрались, какая "другая проблема"?
Ошибка та же что вчера, только теперь в другой функции
Неужели я дождался переполнения millis()? Пипец...
Неужели я дождался переполнения millis()? Пипец...
че, там еще и переполнение?:)
А нахера тогда сбрасывать?
Да у него просто мк перенружается...
Я тут себе win10 поставил. Просто автокад на линуксе не пашет. Похоже, что его писали тоже "пинововцы"
Дядь, Вы зачем такой агрессивный? Мб Вы >идиот, учитывая Вашу гениальную идею заходить в песок и токсичить на людей из-за их непонимания?))
sadman41, спасибо. Попробую.
mykaida, я понимаю, что надо обнулять, просто не совсем понимаю где это делать, по клику кнопки?
mykaida, я понимаю, что надо обнулять, просто не совсем понимаю где это делать, по клику кнопки?
Не - Вы меня не поняли. Не надо обнулять, а надо перезаписывать oldmillis. Переменная так называется.
Если Вы хотите получить реальное тактирование - посмотрите в "проектах" мой "термостат". Там я исходил из реального времени. (сейчас забросают)
Если Вы хотите получить реальное тактирование - посмотрите в "проектах" мой "термостат". Там я исходил из реального времени. (сейчас забросают)
Спасибо, гляну обязательно.
Всем большое спасибо за ответы. Опытным путем понял, где ошибка и исправил.
Опытным путем понял, где ошибка и исправил.
"понял и исправил" как в прошлый раз ? А завтра снова придешь с той же проблемой?
Давай рассказывай что понял
Дядь, там помимо выхода за границу массива, была ошибка с таймингами из-за которой вообще не было видно этого самого выхода, и соответственно проблема, которую я не понимал была именно в них, а не в массиве.
Откисай))