адресная светодиодная лента

Serega_los'
Offline
Зарегистрирован: 20.10.2020

Здравствуйте, насмотревшись видео с youtube по проектам arduino и адресной светодиодной лентой, решил тоже поиграться. Раньше с arduino дело не имел. Идея проекта заключается в том, чтобы управлять лентой через bluetoth, хочу чтобы можно было ввести 3 числа и лента горела соответствующим цветом, но для меня пока даже это сложно. Решил проверить как данные приходят с телефона на arduino. Написал код, по задумке если я ввожу 255, то лента горит красным, а если нет, то розовым, однако она горит розовым чтобы я не вводил. Помогите пожалуйста, подскажите в чем ошибка.

// Подключаем библиотеку Adafruit NeoPixel.
#include "Adafruit_NeoPixel.h"


// Указываем, какое количество пикселей у нашей ленты.
#define LED_COUNT 8

// Указываем, к какому порту подключен вход ленты DIN.
#define LED_PIN 7

// Создаем переменную strip для управления нашей лентой.
Adafruit_NeoPixel strip = Adafruit_NeoPixel(LED_COUNT, LED_PIN, NEO_GRB + NEO_KHZ800);

//объявляю переменные
int red = 0;
int green = 0;
int blue = 0;
int color;

void setup()
{
  Serial.begin(9600);

  // Инициализируем ленту.
  strip.begin();
}

void loop()
{

  if (Serial.available())
  {
    color = Serial.read();

    if color (x == 255)
    {
       for (int i = 0; i < LED_COUNT; i++)
      {
        strip.setPixelColor(i, strip.Color(255, 0, 0)); // цвет.
      }
    }

    else
    {
      for (int i = 0; i < LED_COUNT; i++)
      {
        strip.setPixelColor(i, strip.Color(255, 0, 255)); // цвет.
      }
    }
   
  }
  
  
  strip.show();
  
  
  delay(500);
}

 

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

Забудьте о ленте на время, просто печатайте переменную x в Serial Monitor.

А, вообще, расскажите - что означает строка 35?

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

sadman41 пишет:
что означает строка 35?

Она означает, что ТС обманул нас написав

Serega_los' пишет:

 она горит розовым чтобы я не вводил. 

На самом деле там ничего не горит, т.к. код просто не компилируется.

Ну или у него проблема с одним кодом, а нам он показывает другой (очень разумно!)

Serega_los'
Offline
Зарегистрирован: 20.10.2020

ой, извините у меня там ошибка, он должна выглядеть так "if (color == 255)"

Serega_los'
Offline
Зарегистрирован: 20.10.2020

Serega_los' пишет:

 

// Подключаем библиотеку Adafruit NeoPixel.
#include "Adafruit_NeoPixel.h"


// Указываем, какое количество пикселей у нашей ленты.
#define LED_COUNT 8

// Указываем, к какому порту подключен вход ленты DIN.
#define LED_PIN 7

// Создаем переменную strip для управления нашей лентой.
Adafruit_NeoPixel strip = Adafruit_NeoPixel(LED_COUNT, LED_PIN, NEO_GRB + NEO_KHZ800);

//объявляю переменные
int red = 0;
int green = 0;
int blue = 0;
int color;

void setup()
{
  Serial.begin(9600);

  // Инициализируем ленту.
  strip.begin();
}

void loop()
{

  if (Serial.available())
  {
    color = Serial.read();

    if (color == 255)
    {
       for (int i = 0; i < LED_COUNT; i++)
      {
        strip.setPixelColor(i, strip.Color(255, 0, 0)); // цвет.
      }
    }

    else
    {
      for (int i = 0; i < LED_COUNT; i++)
      {
        strip.setPixelColor(i, strip.Color(255, 0, 255)); // цвет.
      }
    }
   
  }
  
  
  strip.show();
  
  
  delay(500);
}

 

Serega_los'
Offline
Зарегистрирован: 20.10.2020

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

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

Serega_los' пишет:

Я не понимаю в чем загвоздка

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

На самом деле вы скорее всего передаете сначала '2' , потом '5'. а потом еще раз '5' . ни один из этих кодов не равен 255, поэтому лента и горит розовым

 

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

Serega_los' пишет:

ой, извините у меня там ошибка

Привыкайте вставлять код копипастом прямо из IDE ничего не меняя. Если Вы поменяли что-то одно, то откуда у меня уверенность, что Вы не поменяли что-то ещё? В итоге час бьёшься, а человек тебе на голуюом глазу: "это не тот код, я тут поменял кое чего" - бесит неимоверно.

Serega_los'
Offline
Зарегистрирован: 20.10.2020

ну я ввожу 255 в строке ввода, а потом передаю на передатчик 

Serega_los'
Offline
Зарегистрирован: 20.10.2020

извините, так и буду делать

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

Serega_los' пишет:

ну я ввожу 255 в строке ввода, а потом передаю на передатчик 

Вы не поняли, что Вам человек сказал? Код давайте. Что Вы там вводите, куда и как передаёте. Без кода здесь будет только флуд и глум.

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

b707 пишет:
На самом деле вы скорее всего ...

Или \n в конце. Она мигнёт на наносекунды красным и снова ... :)

Serega_los'
Offline
Зарегистрирован: 20.10.2020

Serega_los' пишет:

Serega_los' пишет:

так вот он код

 

// Подключаем библиотеку Adafruit NeoPixel.
#include "Adafruit_NeoPixel.h"


// Указываем, какое количество пикселей у нашей ленты.
#define LED_COUNT 8

// Указываем, к какому порту подключен вход ленты DIN.
#define LED_PIN 7

// Создаем переменную strip для управления нашей лентой.
Adafruit_NeoPixel strip = Adafruit_NeoPixel(LED_COUNT, LED_PIN, NEO_GRB + NEO_KHZ800);

//объявляю переменные
int red = 0;
int green = 0;
int blue = 0;
int color;

void setup()
{
  Serial.begin(9600);

  // Инициализируем ленту.
  strip.begin();
}

void loop()
{

  if (Serial.available())
  {
    color = Serial.read();

    if (color == 255)
    {
       for (int i = 0; i < LED_COUNT; i++)
      {
        strip.setPixelColor(i, strip.Color(255, 0, 0)); // цвет.
      }
    }

    else
    {
      for (int i = 0; i < LED_COUNT; i++)
      {
        strip.setPixelColor(i, strip.Color(255, 0, 255)); // цвет.
      }
    }
   
  }
  
  
  strip.show();
  
  
  delay(500);
}

 

Serega_los'
Offline
Зарегистрирован: 20.10.2020

Я скачал блютуз терминал на телефон, и ввожу там 255

И по идее это должно присваеваться переменной color

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

Serega_los' пишет:

Я скачал блютуз терминал на телефон, и ввожу там 255

И по идее это должно присваеваться переменной color

до вас не доходит, что я написал?

Когда вы вводите в терминале 255 - это не одно число 255, а три отдельных символа '2' '5' '5". Вы разницу между символами и числами понимаете?

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

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

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

sadman41 пишет:
Без контроля приема вы можете сколь угодно долго биться об стену. Выводите принимаемое значение в куда-нибудь и все узнаете про розовое.

да бесполезно....

Чтобы он смог что-то куда-то вывести - ему сначала надо отключить блютус от Сериала :) Ты ему замумукаешься обьяснять. что такое Софтовый сериал и как им пользоваться.

 

 

Serega_los'
Offline
Зарегистрирован: 20.10.2020

А как можно исправить?

Создать массив?

Serega_los'
Offline
Зарегистрирован: 20.10.2020

Я не знаю как это сделать, если бы вы объяснили, или ссылку на статью кинули... 

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

Serega_los' пишет:

А как можно исправить?

Создать массив?

и как вы собрались этот массив передавать?

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

Если на смартфоне нормальный терминал, то он ещё и отображает принимаемые данные, которые Ардуино может совать в Serial

Serega_los'
Offline
Зарегистрирован: 20.10.2020

ну он же записывает по одному символу, через цикл заносить их в массив 

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

Serega_los' пишет:

Я не знаю как это сделать, если бы вы объяснили, или ссылку на статью кинули... 

Serega_los', когда отвечаете на сообшение - нажимайте цитировать или пишите в начале ник того, кому отвечаете

Serega_los'
Offline
Зарегистрирован: 20.10.2020

b707 пишет:

Serega_los' пишет:

Я не знаю как это сделать, если бы вы объяснили, или ссылку на статью кинули... 

Serega_los', когда отвечаете на сообшение - нажимайте цитировать или пишите в начале ник того, кому отвечаете

понял, принял

MaksVV
Offline
Зарегистрирован: 06.08.2015

ТС внимательно перечитай ответы sadman41. Особенно посты 15 и 20.