ARDUINO microLED. Обсуждение библиотеки

ASM

★★★★✩✩✩
26 Окт 2018
1,515
294
void loop() {

btn.tick();
if (btn.isSingle()) Serial.println("Click");
strip.fill(mGreen);
else
strip.clear();

strip.show();
}

с задержками поэксперементируй)
 

Александр Симонов

★★★★✩✩✩
2 Авг 2018
727
207
Поковырял библиотеку. Глюк происходит в методе sendRaw, там где ассемблерный код идет.

C++:
case LED_WS2811:
            asm volatile (
            "LDI  r17 ,8        \n\t"       // Загружаем в счетчик циклов 8
            "_LOOP_START_%=:       \n\t"       // Начало основного цикла
            .......
Если закоментить, то клики отрабатывают, но соответственно лента не фурычит, т.к. это самый главный метод.
На этом мои полномочия все. С ассемблером не дружу.
Видно придется на FastLed возвращаться.
Попробуй сначала сменить пин кнопки на больше 7.
 

Jools

✩✩✩✩✩✩✩
16 Ноя 2020
4
0
Пока решил на FastLed остаться. Там все работает. Пин поменять не так просто сейчас.
Девайс в самодельной коробке, залитой термоклеем, поэтому не хочется расковыривать его.
 

Rom327

✩✩✩✩✩✩✩
24 Ноя 2019
11
0
Приветствую уважаемые коллеги!
Пытаюсь использовать библиотеку microLed.
Стоит задача при подаче на вход Ардуинки 0, должна бежать тень красным, при подачи 1 должна бежать тень зеленым.
Вроде бы все работает, но...
При подаче 0 тень бежит красным, от 11 до 0 светодиода..
При подаче 1 тень бежит зеленым, от 11 до 0 светодиода и! красным от 24 и до 11 светодиода.
Подскажите как это можно поправить?
И еще вопрос: тень бежит от последнего (11) светодиода к первому, как сделать, чтобы бежала от первого к последнему (11)?
Спасибо!
Код:

C++:
#define STRIP_PIN 6     // пин ленты
#define NUMLEDS 12      // кол-во светодиодов
//#define COLOR_DEBTH 2
#include <microLED.h>   // подключаем библу
microLED < NUMLEDS, STRIP_PIN, -1, LED_WS2812, ORDER_GRB, CLI_AVER > strip;

void setup()
{
  strip.setBrightness(75);
  pinMode (2, INPUT_PULLUP); //подтянутый к + INPUT, вход 0 - красный, 1 - зеленый.
  strip.clear(); // Выключить всю ленту
  strip.show();
  delay (1000); // Задержка 1сек
}
void loop()
{
  if (digitalRead(2) == 0); //Если на входе 0, включить бегущие точки красным
  { static byte count;
    count++;
    strip.begin();
    for (int r = 0; r < NUMLEDS; r++)
    {
      strip.send(mWheel8(255, count + r * 255 / NUMLEDS));
    }
    //strip.end();
    delay(3);
  }

  if (digitalRead(2) == 1) //Если на входе 1, включить бегущие точки зеленым

  { static byte count;
    count++;
    strip.begin();
    for (int g = 0; g < NUMLEDS; g++)
    {
      strip.send(mWheel8(100, count + g * 255 / NUMLEDS));
    }
    strip.end();
    //delay(5);
  }

}
 
Изменено:

Александр Симонов

★★★★✩✩✩
2 Авг 2018
727
207
Код:
  if (digitalRead(2) == 0); //Если на входе 0, включить бегущие точки красным
  { static byte count;
    count++;
    strip.begin();
    for (int r = 0; r < NUMLEDS; r++)
    {
      strip.send(mWheel8(255, count + r * 255 / NUMLEDS));
    }
    //strip.end();
    delay(3);
  }
Дальше не вникал, но ; после условия надо убрать, иначе у вас следующий блок будет выполняться всегда.
 

Rom327

✩✩✩✩✩✩✩
24 Ноя 2019
11
0
А каким образом подается 0 и 1 ?
Вход подтянут на + программно. Замыкаю его на Gnd...

Дальше не вникал, но ; после условия надо убрать, иначе у вас следующий блок будет выполняться всегда.
Вот спасибо! Заработало!!! Зрение пора апгрейдить....
 

Старик Похабыч

★★★★★★★
14 Авг 2019
4,192
1,281
Москва
Т.е. кнопка. Даже при подтянутом + может быть дребезг. Лучше тогда взять библиотеку гайвер-батон, там есть программная защита от дребезга.
 

Rom327

✩✩✩✩✩✩✩
24 Ноя 2019
11
0
Т.е. кнопка. Даже при подтянутом + может быть дребезг. Лучше тогда взять библиотеку гайвер-батон, там есть программная защита от дребезга.
Подключаться буду к выходу операционника. Пока на кнопке тренируюсь... Еще раз спасибо за подсказку Александру...

Все равно тень "не полная": диоды зажигаются плавно, а гаснут резко...:(

Есть ли решение, чтобы и зажигание и угасание сделать плавными?
 
Изменено:

АВРчик

✩✩✩✩✩✩✩
18 Дек 2020
10
1
Добрый вечер,
Извиняюсь заранее если в терминологии напутал.
Подскажите пожалуйста, а какой будет правильный синтаксис объявления\инициализации микролед если я хочу инициализировать в setup, но чтобы была доступна отовсюду.
По типу вот так (указателями это вроде называется):

C++:
#define STRIP_PIN 28     // пин ленты
#define NUMLEDS 1      // кол-во светодиодов

#define COLOR_DEBTH 3
#include <microLED.h>   // подключаем библу
//microLED<NUMLEDS, STRIP_PIN, MLED_NO_CLOCK, LED_WS2815, ORDER_GRB, CLI_AVER> strip;
microLED *strip;

void setup() {

  strip = new microLED(NUMLEDS, STRIP_PIN, MLED_NO_CLOCK, LED_WS2815, ORDER_GRB, CLI_AVER);

  strip->setBrightness(255);
}
void loop(){}
Но так не работает, ругается что темплейт запрещает объявляться без параметров:

microtest3:48:1: error: invalid use of template-name 'microLED' without an argument list
microLED *strip;
^~~~~~~~
microtest3.ino:48:1: note: class template argument deduction is only available with -std=c++1z or -std=gnu++1z

microLED.h:151:7: note: 'template<int amount, signed char pin, signed char pinCLK, M_chip chip, M_order order, M_ISR isr, unsigned char uptime> class microLED' declared here
class microLED {
^~~~~~~~
exit status 1
invalid use of template-name 'microLED' without an argument list


Ах да, версия библиотеки последняя - 3.1.
 

poty

★★★★★★✩
19 Фев 2020
2,988
895
По завершению setup класс, который Вы создали, уничтожится, что Вы будете использовать по всему остальному коду?
У Вас закомментирована правильная строка инициализации.
 
Изменено:

АВРчик

✩✩✩✩✩✩✩
18 Дек 2020
10
1
Ну идея объявлять переменную типа микроЛед вне setup, а инициализировать уже внутри setup, отсюда получится что она будет доступна по всему остальному коду.
И на версии библиотеки 2.х работает это нормально (в этой же теме пост #36). Просто в версиях 3.х её переписали на темплейты, и я не понимаю пока что как правильно инициализировать в данной ситуации.
 

poty

★★★★★★✩
19 Фев 2020
2,988
895
Ок, моя ошибка, выделение памяти, видимо, автоматически не отслеживается, а указатель на неё объявлен глобально.
В #36 требовалось не сохранить глобальность, а определить размер в setup, а не жёстко.
Но как обмануть присвоение я пока тоже не знаю.
 

АВРчик

✩✩✩✩✩✩✩
18 Дек 2020
10
1
В #36 требовалось не сохранить глобальность, а определить размер в setup, а не жёстко.
Из одного выходит другое. В конечном счёте мне нужно тоже самое - динамически присваивать размер массива.

Но как обмануть присвоение я пока тоже не знаю.
Буду ждать, может кто отзовётся. В противном случае пишу на фастЛЕДе всё, если что перейти не сложно.
 

bort707

★★★★★★✩
21 Сен 2020
2,898
862
в версии 3 ошибка с цветностью, в табличке
C++:
enum M_order {
    // порядок цвета: r-00, g-01, b-10
    ORDER_RGB = 0b000110,
    ORDER_RBG = 0b001001,
    ORDER_BRG = 0b100001,
    ORDER_BGR = 0b100100,
    ORDER_GRB = 0b010010,
    ORDER_GBR = 0b011000,
};
значения ORDER_BRG и ORDER_GBR взаимно перепутаны.

Кстати, в предыдущей версии ORDER_BRG тоже было неверно описано.
 

bort707

★★★★★★✩
21 Сен 2020
2,898
862
как обмануть присвоение я пока тоже не знаю.
никак. В текущей версии библиотеки число светодиодов ленты включено в параметры шаблона, поэтому создать указатель на обьект можно только зная заранее правильное число диодов в ленте.

Надо чуть переписать библиотеку, чтобы темплейт не включал число светодиодов.
Лучше, наверно, как раньше, передавать обьекту типа microLED указатель на внешний массив светодиодов.
Хотя по мне проще пользоваться версией 2... и не переходить на новую. Пусть авторы ее допилят сначала.
 

AlexeyZZZ

✩✩✩✩✩✩✩
14 Июн 2021
2
0
Привет, не могу понять, что я делаю не так, помогите)
C-like:
#define STRIP_PIN 2     // пин ленты
#define NUMLEDS 96      // кол-во светодиодов

#define COLOR_DEBTH 3

#include <microLED.h>   // подключаем библу
microLED< NUMLEDS, STRIP_PIN, -1, LED_WS2812, ORDER_GRB> strip;

void setup() {
  strip.set(0, mRGB(255, 0, 0));
  strip.show();
}

void loop() {
 
}
Такая ошибка при компиляции
Screenshot 2021-06-14 at 23.31.12.png
 

Александр Симонов

★★★★✩✩✩
2 Авг 2018
727
207
@AlexeyZZZ, тонкости AVR-ассемблера, в некоторых командах не все регистры можно использовать, а в коде библиотеки не прописаны эти ограничения при распихивании переменных по регистрам. По тексту ошибки можно нагуглить обсуждения и решение.

По-хорошему бы, @AlexGyver самому стоило бы глянуть и исправить, может я чего-нибудь другое сломал этим решением.
 
  • Лойс +1
Реакции: AlexeyZZZ

AlexseyShva

✩✩✩✩✩✩✩
7 Июл 2021
1
1
In file included from D:\LEDstairs-master (1)\LEDstairs-master\firmware\LEDstairs_v1.1\LEDstairs_v1.1.ino:45:0:

C:\Users\legion\Documents\Arduino\libraries\microLED\src/microLED.h:133:15: error: expected identifier before '=' token

ORDER_GRB = 0b010010,

^

C:\Users\legion\Documents\Arduino\libraries\microLED\src/microLED.h:133:15: error: expected '}' before '=' token

C:\Users\legion\Documents\Arduino\libraries\microLED\src/microLED.h:133:15: error: expected unqualified-id before '=' token

C:\Users\legion\Documents\Arduino\libraries\microLED\src/microLED.h:135:1: error: expected declaration before '}' token

};

^

Несколько библиотек найдено для "microLED.h"
Используется: C:\Users\legion\Documents\Arduino\libraries\microLED
Не используется: C:\Program Files (x86)\Arduino\libraries\microLED
Несколько библиотек найдено для "FastLED.h"
Используется: C:\Users\legion\Documents\Arduino\libraries\FastLED
Не используется: C:\Program Files (x86)\Arduino\libraries\FastLED-3.2.9
exit status 1
Ошибка компиляции для платы Arduino Nano.


Помогите пожалуйста с ошибкой
 
Изменено:
  • Лойс +1
Реакции: Seodoka

Grimmr

✩✩✩✩✩✩✩
16 Окт 2021
1
0
Здравствуйте, захотелось освоить библиотеку microLED, точнее tinyLED применительно к Attiny85 Digispark. Беру пример из библиотеки tinyled_guide, меняю номер ноги, всё внимательно читаю, загружаю в контроллер - горит один диод, неправильным цветом. Пробую разные примеры, включая примеры для microLED, результат одинаковый. Пробовал различные настройки (ограничение прерываний, разные ноги МК) - всегда только один диод, видимо что-то не так со скоростью передачи. Прошу помочь разобраться.
Диоды - ws2812, линейка восемь штук, работают 100% (проверял с FastLED, на той же плате Attiny85 Digispark).
 

2garri

✩✩✩✩✩✩✩
20 Окт 2021
1
0
Добрый.. (время суток :)) Столкнулся с похожей проблемой, как описал Grimmr. Условия те-же дигиспарк(85), ws2812, линейка восемь штук , библиотека microLED . с примера Код не работает (нет выхода).
А написанный код при помощи библиотеки Light_WS2812 работает. Линейка тоже работает..
 

Вложения