WS2812

Xtro
Xtro аватар
Offline
Зарегистрирован: 26.09.2017

И снова здравствуйте...

Опять нужна ваша помощь, уважаемые ардуино -гуру...

Зажигаю линейку от кнопки...все нормально...а вот погасить не могу...

Что не так...подскажите...пожалста...

#include <Adafruit_NeoPixel.h>

int PIN = 6;                                             // Это выход #6, куда подключено управление лентой.
int BUTTON1 = 2;
int NUMPIXELS = 17;
uint32_t time;
bool BUTTON_1;


Adafruit_NeoPixel strip = Adafruit_NeoPixel(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);

void setup() {

  pinMode(BUTTON1, INPUT_PULLUP);


  strip.begin();
  strip.show();
}

void loop() {
  if (digitalRead(BUTTON1) == LOW) {
    if (millis() - time >= 100) {
      time = millis();
      if (!BUTTON_1)BUTTON_1 = 1, NUMPIXELS = 0;
      if (NUMPIXELS <= 17)
      {
        strip.setPixelColor(NUMPIXELS, strip.Color(255, 55, 0));
        strip.show();
        NUMPIXELS ++;
      }
      if (digitalRead(BUTTON1) == HIGH) {
        if (millis() - time >= 100) {
          time = millis();
          if (!BUTTON_1)BUTTON_1 = 1, NUMPIXELS = 17;
          if (NUMPIXELS = 17)
          {
            strip.setPixelColor(NUMPIXELS, strip.Color(255, 55, 0));
            strip.show();
            NUMPIXELS -- ;
          }
        }
      }
    }
  }
}

 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Xtro пишет:

а вот погасить не могу...

Из розетки выдерните. Если и при этом не погаснет, обращайтесь за шведской визой, поедете нобелевскую премию получать.

1. Что написано в строках 25 и 35 - просто и по русски можете объяснить?

2. В каком именно месте Вы собрались её гасить? В каких строках она по-Вашему должна гаситься?

Xtro
Xtro аватар
Offline
Зарегистрирован: 26.09.2017

А я помощи прошу...
Ну а Вы, если думаете что блистаете остроумием, сидя на своей высокой ветке программирования,не я Вам судья...
Ведь про millis, а тем более про neopixel, на просторах интернета ни хрена нет...ничего вразумительного...
Тем более связка NeoPixel+millis...

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

Про NeoPixel нет ничего в интернете? А-ха-ха.... Т.е. мяу. Вы что, из Северной Кореи что ли?

 

leks
Offline
Зарегистрирован: 22.10.2017

 strip.setPixelColor(NUMPIXELS, strip.Color(0, 0, 0));

Выключаем пиксель - "нумпиксель"

Xtro
Xtro аватар
Offline
Зарегистрирован: 26.09.2017

Так вот с этим сейча разбираюсь досконально...
По сути, тут должно работать if...else....
Но не работает...
Или опять что-то не так делаю...

Xtro
Xtro аватар
Offline
Зарегистрирован: 26.09.2017

Да нет...не из кореи...
А если считать информац ией всю воду по NeoPi el, строящуюся только на затертых эффпктах типа радуги... и фейдера и сканера...тогда я согласен...в корее наверное больше информации...

Xtro
Xtro аватар
Offline
Зарегистрирован: 26.09.2017

А stripColor(0,0,0) тоже не катит...
Тупо играть в шашки, перетасовывая все что под руку попадется...не в моем стиле...
Все что получается и работает хоть и считается победой, но достаточно маленькой...
Действительно победа и достижение это добраться до сути...до начала...погонять в разных режимах...изменяя параметры и т.д.

leks
Offline
Зарегистрирован: 22.10.2017

Xtro пишет:
А stripColor(0,0,0) тоже не катит... Тупо играть в шашки, перетасовывая все что под руку попадется...не в моем стиле... Все что получается и работает хоть и считается победой, но достаточно маленькой... Действительно победа и достижение это добраться до сути...до начала...погонять в разных режимах...изменяя параметры и т.д.

Да суть тут проста: stripColor(к1,к2,к3) где "кааки" от 0 до 255, три нуля не горим, три 255 - сгораем белым цветом...всё остальное Ваше творчество.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Xtro пишет:
А я помощи прошу...

Так, а я Вам помогаю!

Я вижу, что написано неправильно, но чтобы иметь возможность объяснить суть ошибки, мне надо знать, что Вы хотели написать. Вот я и спросил Вас

1. Что написано в строках 25 и 35 - просто и по русски можете объяснить?

2. В каком именно месте Вы собрались её гасить? В каких строках она по-Вашему должна гаситься?

Вам нужны объяснения? Тогда отвечайте.

Или что Вам нужно-то?

Xtro
Xtro аватар
Offline
Зарегистрирован: 26.09.2017

Так про творчество все понятно...энто знаю и пользуюсь...и с RGB...и с NeoPixel...
Но в данном случае первая часть кода благополучно зажигает линейку...
То погасить не могу...
Смысл конструкции...кнопка нажата...последовательно зажигаемся...кнопка отжата...последовательно гаснем...
Беда...или просто нехватка опыта...ну и знаний...

Xtro
Xtro аватар
Offline
Зарегистрирован: 26.09.2017

Извините, господа, не за компом...
В тел. Трудновато общаться...

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Для тех, кто за телефоном, повторяю вопрос в третий раз (больше не буду, т.к. три раза даже для тех, кто за телефоном должно хватить):

1. Что написано в строках 25 и 35 - просто и по русски можете объяснить?

2. В каком именно месте Вы собрались её гасить? В каких строках она по-Вашему должна гаситься?

Ответы на первый вопрос типа

Xtro пишет:
Смысл конструкции...кнопка нажата...последовательно зажигаемся...кнопка отжата...последовательно гаснем.
Не подходят. Я ведь не спрашиваю Вас о сути мироздания, а спрашиваю, что написано в конкртеной строке. Можете конкретно ответить? Зачем-то же Вы эту строку  писали?

И второй вопрос вполне конкретен - не надо объяснять мне "смысл конструкции", просто назовите номера строк.

Или это не Вы писали? И понятия не имеете что там написано? Но если так, то как я могу объяснить Вам ошибки? Если Вы не понимаете что там написано?

Или Вам не нужно объяснение ошибок? Тогда что Вам нужно?

Xtro
Xtro аватар
Offline
Зарегистрирован: 26.09.2017

Обязательно отпишусь по всем вопросам...

Xtro
Xtro аватар
Offline
Зарегистрирован: 26.09.2017
void loop() {
  if (digitalRead(BUTTON1) == LOW) { // если кнопка нажата
    if (millis() - time >= 100) {
      time = millis();
      if (!BUTTON_1)BUTTON_1 = 1, NUMPIXELS = 0; // если BUTTON_1 не LOW (не False), то BUTTON_1 = True,т.е.1
      if (NUMPIXELS <= 17)
      {
        strip.setPixelColor(NUMPIXELS, strip.Color(255, 55, 0));
        strip.show();
        NUMPIXELS ++; // зажигаем по очереди
      }
    }

ЕвгенийП, Вы ждали от меня пояснений по строке...

И при таких условиях все выполняется...т.е линейка зажигается по очереди...ну а дальше...она самая...чем садятся на крыльцо...

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Xtro пишет:

ЕвгенийП, Вы ждали от меня пояснений по строке...

И не дождался.

Поскольку я их просил уже трижды - больше не буду. Вам это не нужно, а мне и подавно - разбирайтесь сами.

Xtro
Xtro аватар
Offline
Зарегистрирован: 26.09.2017

Что значит не дождался...извините...а в 14 посте 05 строка...

Конечно разберусь...только времени потрачу побольше...

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Xtro пишет:

а в 14 посте 05 строка...

Я Вас просил

Xtro пишет:

просто и по русски можете объяснить?

А Вы написали "if ...LOW ... TRUE" - это я и без Вас вижу. Я спрашивал что там делается.

 
Xtro
Xtro аватар
Offline
Зарегистрирован: 26.09.2017

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

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

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

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

ЕвгенийП пишет:

Xtro пишет:

а в 14 посте 05 строка...

Я Вас просил

Xtro пишет:

просто и по русски можете объяснить?

Сдается мне, что это может кончится только одним - душевным расстройством. Историю Ивана Бездомного помните?

 
Xtro
Xtro аватар
Offline
Зарегистрирован: 26.09.2017

Еще раз повторюсь...

Блистать своей гениальностью никому не запрещено...

Может Вас и обучали программированию на бейсике или ассемблере...или еще на чем-то... и когда-то...

мне к моему большому сожалению не удалось...в 1984 г. была обычная логика...и собрать какое-нибудь устройство о 20-30 корпусах 155 или 176 серии не было большой проблемой...микроконтроллеров тогда не было...

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

по сути, я упустил целую эпоху...время, когда у нас начали появляться МК и серьезное программирование...

Но все равно...спасибо за общение...в Ваших колючих ответах есть огромное количество указателей на что стоит обратить внимание...

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

Вспоминать, как в библиотеках ночи просиживали будете?

Причем тут бейсики, ассемблеры?

Вам словами нужно описать, что должно происходить для:

1) зажигания страйпа;

2) выключения страйпа.

Без всяких миллисов и кнопок. Объясните нам, как тупым, а не просто: "зажигаются по-очереди". 

Xtro
Xtro аватар
Offline
Зарегистрирован: 26.09.2017

Придется наверное...просиживать...

Господа...я не на экзамене...можете помочь и что-то объяснить...помогите и объясните...

Поверьте...если бы в нете по тому же миллису была полная информация, я бы не полез сюда...за помощью...

а когда на всех сайтах тупо перепечатываются фразы типа...миллис возвращает количество миллисекунд с начала работы микроконтроллера...вот это убого...

Всем спасибо за помощь и участие...пока...

Тема закрыта...пойду в библиотеку...на ночь...

с уважением, Xtro...

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Xtro пишет:

Господа...я не на экзамене...можете помочь и что-то объяснить...помогите и объясните...

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

Ну, придушите Вы свою лень и объясните, что Вы делаете в этих несчастных строчках! Я Вам уже намекал, что Вы там номер пина на кой-то хер меняете, но Вы либо не читаете, что Вам пишут, либо понимаете в этом коде даже меньше, чем я думал.

В самый распоследний раз, пытаюсь объяснить. что от Вас требуется. Вот смотрите: есть строчка:

if (alnalogRead(2) < 100) digitalWrite(10, HIGH);

Если объяснять, чо там делается, то можно сказать: "Если сигнал на пине А2 меньше 100, то установить пин 10 в высокий уровень". Это объяснение абсолютно бесполезное и мудацкое. Я и сам вижу, что там делается. От Вас же требуется объяснение типа: "Если уровень освещённости упал ниже 100, то включить аварийное освещение". Разницу видите?

И мой второй вопрос. Вы говорите "не гаснет". Я спросил в каких строках Вы пытаетесь погасить?" Мля - не надо философии, просто скажите "в строках №№ ххх" или "я вообще пока не пытался". НИчего другого.

И, простите, но уже достало. Я в пятый раз задаю простейшие вопросы. Если ответов на оба вопроса опять не не будет, я даже комментировать ничего не буду. Идите Вы .... в библиотеку.

Xtro
Xtro аватар
Offline
Зарегистрирован: 26.09.2017

Всем спасибо за помощь и участие...пока...

Тема закрыта...пойду в библиотеку...на ночь...

с уважением, Xtro...

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

Xtro пишет:

Придется наверное...просиживать...

Господа...я не на экзамене...можете помочь и что-то объяснить...помогите и объясните...

Поверьте...если бы в нете по тому же миллису была полная информация, я бы не полез сюда...за помощью...

а когда на всех сайтах тупо перепечатываются фразы типа...миллис возвращает количество миллисекунд с начала работы микроконтроллера...вот это убого...

Всем спасибо за помощь и участие...пока...

Тема закрыта...пойду в библиотеку...на ночь...

с уважением, Xtro...

Нет ну надо же...

Хорошо, дам Вам самую полную информацию по функции millis():

Функция millis() возвращает в виде длинного целого без знака количество миллисекунд, прошедшее с момента включения микроконтроллера.

Все. Это полная информация по millis(). Полнее быть не может.

PS. Xtro, Вы, наверное, думаете, что есть некоторая тайная информация, которую от Вас тщательно скрывают. Так вот, открою страшную иайну - никакой тайной информации нет. Для того, чтобы написать программу, надо проделать несколько шагов.

1. Сформулировать задачу.

2. Представить, что бы мы сами стали делать, если бы нам пришлось решать эту задачу вместо микроконтроллера.

3. Тщательно и подробно по-русски записать последовательность действий по п.2.

4. Перевести п.3 на Си.

5. Наслаждаться результатом.

 

Xtro
Xtro аватар
Offline
Зарегистрирован: 26.09.2017

Cпасибо за полный и конкретный ответ и совет...

b707
Offline
Зарегистрирован: 26.05.2017

По-моему, это даже для этой конфы уникальный случай - столько постов написать, и при этом НЕ СКАЗАТЬ НИЧЕГО. Видимо, человеку просто скучно и не с кем поговорить.

Xtro, что мешает вам ответить на вопросы?

 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

b707 пишет:

что мешает вам ответить на вопросы?

Полагаю, что скетч цельнотянутый, в него сделаны вставки методом тыка, понимания - 0.0, вот это и мешает.

Xtro
Xtro аватар
Offline
Зарегистрирован: 26.09.2017

ЕвгенийП...приветствую...Вы правы, но отчасти...

вот поэтому и начал разбираться во всем с нуля...это что касается связки ардуино+WS2812+millis...

а ежели пошерстить по сети, то 98% всего кода и написаны куда выведет...эта кривая...получилось - карашо...не получилось...соответственно не шегельме...

не све рождаются с мозгом программиста...

b707
Offline
Зарегистрирован: 26.05.2017

Xtro пишет:

вот поэтому и начал разбираться во всем с нуля...

не све рождаются с мозгом программиста...

Вот и разбирайтесь именно "с нуля". Это значит - оставьте пока Неопиксели и начните с классического примера "блинк без делей" - он поможет понять, что такое миллис и как им пользоваться.

И, уверен - тогда вдруг окажется, что везде в инете про миллис написана не ерунда, а вполне толковые статьи и примеры.

А что касается "разных мозгов" - тут вы правы. Я вот даже не пытаюсь понять, что такое "логика в корпусах" и как она могла существовать без программирования. Я в 1984м уже писал программы для Б3-34

b707
Offline
Зарегистрирован: 26.05.2017

Xtro - еще один совет, может будет полезно.

Когда ищете примеры в инете - не читайте статьи "для пацанов". Ищите для программистов. Первые обычно довольно легко отличить от вторых по стилю и языку. Всякие там инструкции: "как за пару минут сделать новогоднюю гирлянду" или "как приделать к машине крутой переливающийся повортник" - в топку. Эти авторы, как правило, сами ничего не понимают в том, что делают, у них в коде масса ляпов и несуразностей.

Видеоуроки на Ютубе тоже, в большинстве своем - записываются неграмотными дилетантами.

Xtro
Xtro аватар
Offline
Зарегистрирован: 26.09.2017

Спасибо, b707...