Adafruit_NeoPixel Потушить ленту, не портя массив

b612
Offline
Зарегистрирован: 12.03.2017

Добрый день All !

Есть проблемка. Во время работы часиков нужно периодически измерить освещенность помещения

Но лента светит на датчик освещенности и с этим ничего поделать не удаётся.

ВОПРОС:

Как резко на миллисекундочку потушить ленту, а потом зажечь снова в том же виде как она была ?

На сколько я понимаю не влезая в код библиотеки нельзя заставить её прописать в ленту все нули.

Подскажите как это сделать.

Я бы с удовольствием подсунул либе указатель на обнулённый массив нужного размера, хотя очень жалко памяти под это дело. Но похоже что нельзя даже изменить её внутренний указатель на массив, в котором хранятся все цвета всех свеиков.

Как крайний вариант можно сохранить массив где-то в сторонке и обнулить рабочий массив, а потом после измерения вернуть всё назад, но хочется как-то покрасивее.

 

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Вам по уму или как получится?

Если по уму, то никто не мешает написать функцию аналогичную функции отображения ленты из массива, но вместо содержимого массива использовать константу. Можно даже задавать константу снаружи - чтобы можно было не только погасить, но и, скажем, залить ленту белым (а то и вообще любым цветом радуги).

Не думаю, что сделать копию функции, изменив лишь источник данных, - сложная программистская задача.

Ну а если "как получится", то надо считать, осталась ли свободная память: одно дело лента в 100 светодиодов, и совсем другое - в 600.

arduinec
Offline
Зарегистрирован: 01.09.2015

b612 пишет:

Как резко на миллисекундочку потушить ленту, а потом зажечь снова в том же виде как она была ?

Можно подать в ленту нужное количество нулей и она погаснет, а затем заново загрузить в неё массив.

gfx125
Offline
Зарегистрирован: 27.05.2017

b612 пишет:

Как резко на миллисекундочку потушить ленту, а потом зажечь снова в том же виде как она была ?


А просто вырубить питание ленты релюхой или полевиком? Не?

arduinec
Offline
Зарегистрирован: 01.09.2015

Посмотрел библиотеку Adafruit_NeoPixel 1.1.8. Там есть функция fill(), которая может заполнять часть ленты (всю ленту) нужным цветом. Соответственно, с нулевым агрументом лента погаснет.

b612
Offline
Зарегистрирован: 12.03.2017

Функция заполняет ленту или буфер ? Скорее всего буфер.

b612
Offline
Зарегистрирован: 12.03.2017

andriano пишет:

Если по уму, то никто не мешает написать функцию аналогичную функции отображения ленты из массива, 

там в либе эта функция на ассемблере. я пытался понять как она работает но не смог

b612
Offline
Зарегистрирован: 12.03.2017

Вроде так заработало

 

void pogasit(){
  noInterrupts();
  for (uint16_t l=0;l < (NUMPIXELS*24);l++)
  { PORTD |= B01000000;
    asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");
    PORTD &= B10111111;}
    interrupts();
}   

 

Logik
Онлайн
Зарегистрирован: 05.08.2014

Прикольно, шаманство чистейшее 8) Еще немного и получится функция вывода в ленту без ассемблера.

b612
Offline
Зарегистрирован: 12.03.2017

Logik пишет:
Прикольно, шаманство чистейшее 8) Еще немного и получится функция вывода в ленту без ассемблера.
Спасибо за лестный коммент )

Но это придумано не мной https://habr.com/ru/post/257057/

Обнаружена странная проблема. Гашу ленту, через 50мкс измеряю освещенность - результат как будто лента НЕ ПОГАШЕНА !

Даже чере 3 миллисекунды лента тухнет НЕ ПОЛНОСТЬЮ 

Только через 6-10 м.сек можно нормально мерить освещенность.

Помеху по питанию я практически исключаю, поскольку опорным напряжением для моста с фоторезистором

и для АЦП = напряжение питания, соответственно результат от питания зависеть не должен.

 

sadman41
Offline
Зарегистрирован: 19.10.2016
b612
Offline
Зарегистрирован: 12.03.2017

СПАСИБО !

Может быть подскажете, чем можно заменить эту "черепаху" ?

sadman41
Offline
Зарегистрирован: 19.10.2016

Полупроводниковым фотодатчиком.

b612
Offline
Зарегистрирован: 12.03.2017

Всем СПАСИБО !

Вот мои часики

https://youtu.be/m-ZY15XYFMU

правда фоторезистор для них же но в другом исполнении

bwn
Offline
Зарегистрирован: 25.08.2014

Симпатичные, понравились. Только динамика, не слишком быстрая?

b612
Offline
Зарегистрирован: 12.03.2017

bwn пишет:

Симпатичные, понравились. Только динамика, не слишком быстрая?

Динамика настраивается, при том автономно. Там 66 разных настроек. Настраивается и скорость и плавность и очерёдность и "зайчики" и всё всё.

А вообще они у меня и у родни уже почти год. Всем нравится.