Подскажите где ошибка в коде?

Rom327
Offline
Зарегистрирован: 25.04.2015

Приветствую уважаемые коллеги!

Пытаюсь использовать библиотеку microLed.

Стоит задача при подаче на вход Ардуинки 0, должна бежать тень красным, при подачи 1 должна бежать тень зеленым.

Вроде бы все работает, но...

При подаче 0 тень бежит красным, от 11 до 0 светодиода..

При подаче 1 тень бежит зеленым, от 11 до 0 светодиода и! красным от 24 и до 11 светодиода.

Подскажите как это можно поправить?

И еще вопрос: тень бежит от последнего (11) светодиода к первому, как сделать, чтобы бежала от первого к последнему (11)?

Спасибо!



Код:

#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);
  }

}

 

vde69
Offline
Зарегистрирован: 10.01.2016

во первых у тебя двойное описание 

static byte count

вполне возможно когда программа зайдет в оба условия (во время выполнения первого контакт меняется)

 

во вторых использовать static  в цикле - сильно не советую, банально загубишь ардуинку

 

Rom327
Offline
Зарегистрирован: 25.04.2015

Брал пример из https://alexgyver.ru/microled/.

К сожалению, сам не программер..., поэтому хотелось бы конкретики... Спасибо!

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

vde69 пишет:

во вторых использовать static  в цикле - сильно не советую, банально загубишь ардуинку

Можно с этого места поподробнее? Чем это ей может не понравиться?

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

Rom327 пишет:

Брал пример из https://alexgyver.ru/microled/.

Тогда Вам лучше задать свой вопрос на https://community.alexgyver.ru/

vde69
Offline
Зарегистрирован: 10.01.2016

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

vde69 пишет:

во вторых использовать static  в цикле - сильно не советую, банально загубишь ардуинку

Можно с этого места поподробнее? Чем это ей может не понравиться?

вроде как статик - это выделение во флеш памяти, а у нее количество циклов записи ограничено

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

Нет, это не выделение во флеш памяти, используйте и ничего не бойтесь.

Rom327
Offline
Зарегистрирован: 25.04.2015

А можно что-то по сути моего вопроса?

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

#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(80, count + g * 255 / NUMLEDS));
    }
    strip.end();
    delay(3);
  }

}

 

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

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

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

Rom327 пишет:
А можно что-то по сути моего вопроса?

По сути Вашего вопроса я Вам уже ответил в #4. Вы читаете, что Вам пишут?

rkit
Offline
Зарегистрирован: 23.11.2016

5 строка феерическая

Rom327
Offline
Зарегистрирован: 25.04.2015

Вопрос разрешился! Поле первого условия убрал ;

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

rkit пишет:

5 строка феерическая

А что там феерического? Строка как строка.

mykaida
mykaida аватар
Offline
Зарегистрирован: 12.07.2018

Rom327 пишет:

Брал пример из https://alexgyver.ru

Гы...ы, ну ты попал! Тут Гайвера малость не уважают...

Rom327
Offline
Зарегистрирован: 25.04.2015

Тут видимо многих не уважают, ИМХО. Надо было задать вопрос следующим образом: $100 тому, кто подскажет как решить проблему?

anatoli_nik
Offline
Зарегистрирован: 17.01.2019

Бабло заберут, но проблему не решат.

brokly
brokly аватар
Offline
Зарегистрирован: 08.02.2014

К гайверу обратись :) Он тебе бесплатно поможет :)

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

brokly
brokly аватар
Offline
Зарегистрирован: 08.02.2014

anatoli_nik пишет:

Бабло заберут, но проблему не решат.

Не суди по себе :)

Kakmyc
Offline
Зарегистрирован: 15.01.2018

vde69 пишет:

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

vde69 пишет:

во вторых использовать static  в цикле - сильно не советую, банально загубишь ардуинку

Можно с этого места поподробнее? Чем это ей может не понравиться?

вроде как статик - это выделение во флеш памяти, а у нее количество циклов записи ограничено

С такими знаниями вам советы давать рановато.
static в данном случае указывает на продолжительность жизни переменной. Она тупо будет создана один раз и будет жить в ОЗУ всегда. Ну или до тех пор пока что нибудь не прибьет.
Этакий аналог глобальной переменной , к которой есть доступ только из одного места(блока где она используется).
Именно поэтому может быть таких "static count" объявлено множество(в каждом блоке своя) и никаким местом они пересекаться не будут.
В общем идите курите матчасть

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

Rom327 пишет:

Надо было задать вопрос следующим образом: $100 тому, кто подскажет как решить проблему?

Ответ неправильный. Надо было поступить так, как я написал в #4