Режим приветствия поворотника с функцией дхо,аварийка на адресной ленте Ws2812

Brat4791
Brat4791 аватар
Offline
Зарегистрирован: 13.02.2021

Всем благ народ
Может кто помочь в исправлении кода скетча . Есть немного ошибок решить неполучается
1 не одновременно включаются ленты, запуск поочередно происходит
2 Режим поворотника отрабатывает через дхо,а должно дхо вкл после как поворотник отработает
3 Нет запуска второй ленты поворотов
4 Прописать кнопку аварийки

v258
v258 аватар
Offline
Зарегистрирован: 25.05.2020

Это в раздел "Ищу исполнителя"

Brat4791
Brat4791 аватар
Offline
Зарегистрирован: 13.02.2021

Это сам код 

Не судите строго я в этом новичек Учусь в програмировании

#include <Adafruit_NeoPixel.h>
long Z = 0;
long N = 0;
long NeoPix = 30;
long NeoPix2 = 30;

Adafruit_NeoPixel pixels_1 = Adafruit_NeoPixel(20, 2, NEO_GRB + NEO_KHZ800);
Adafruit_NeoPixel pixels_2 = Adafruit_NeoPixel(20, 3, NEO_GRB + NEO_KHZ800);

                       // povorot L
void S1() {
  for (int count = 0; count < 3; count++) {
    for (int count = 0; count < NeoPix; count++) {
      Z = Z + 1;
      pixels_1.setBrightness(255);
       pixels_1.setPixelColor(Z-1, pixels_1.Color(255,255,0));
       pixels_1.show();
       delay(5);
    }
    delay(200);
    Z = 0;
    for (int count = 0; count < NeoPix; count++) {
      Z = Z + 1;
      pixels_1.setBrightness(255);
       pixels_1.setPixelColor(Z-1, pixels_1.Color(0,0,0));
       pixels_1.show();
       }
    Z = 0;
    delay(200);
  }
}

                             // beg stroka L
void S2() {
  Z = NeoPix + 1;
  for (int count = 0; count < NeoPix; count++) {
    for (int count = 0; count < NeoPix; count++) {
      Z = Z - 1;
      pixels_1.setBrightness(255);
       pixels_1.setPixelColor(Z-1, pixels_1.Color(0,0,153));
       pixels_1.show();
       delay(5);
      pixels_1.setBrightness(255);
       pixels_1.setPixelColor(Z-1, pixels_1.Color(0,0,0));
       pixels_1.show();
       }
    pixels_1.setBrightness(255);
     pixels_1.setPixelColor(Z-1, pixels_1.Color(0,0,153));
     pixels_1.show();
     Z = NeoPix + (Z + 1);
  }
  delay(300);
}

                             // beg tocka L
void S3() {
  Z = 0;
  for (int count = 0; count < NeoPix; count++) {
    Z = Z + 1;
    pixels_1.setBrightness(255);
     pixels_1.setPixelColor(Z-1, pixels_1.Color(255,255,255));
     pixels_1.show();
     delay(10);
    pixels_1.setBrightness(255);
     pixels_1.setPixelColor(Z-1, pixels_1.Color(51,51,51));
     pixels_1.show();
     }
  Z = NeoPix;
  for (int count = 0; count < NeoPix; count++) {
    Z = Z - 1;
    pixels_1.setBrightness(255);
     pixels_1.setPixelColor(Z-1, pixels_1.Color(255,255,255));
     pixels_1.show();
     delay(10);
    pixels_1.setBrightness(255);
     pixels_1.setPixelColor(Z-1, pixels_1.Color(51,51,51));
     pixels_1.show();
     }
}
                         // dxo L
void S4() {
  Z = 0;
  for (int count = 0; count < NeoPix; count++) {
    Z = Z + 1;
    pixels_1.setBrightness(255);
     pixels_1.setPixelColor(Z-1, pixels_1.Color(255,255,255));
     pixels_1.show();
     }
  pinMode(12, OUTPUT);
   digitalWrite(12, 1);
}

                      // povorot ot knopki L
void S5() {
  for (int count = 0; count < 5; count++) {
    for (int count = 0; count < NeoPix; count++) {
      Z = Z + 1;
      pixels_1.setBrightness(255);
       pixels_1.setPixelColor(Z-1, pixels_1.Color(255,255,0));
       pixels_1.show();
       delay(5);
    }
   
    Z = 0;
    for (int count = 0; count < NeoPix; count++) {
      Z = Z + 1;
      pixels_1.setBrightness(255);
       pixels_1.setPixelColor(Z-1, pixels_1.Color(0,0,0));
       pixels_1.show();
       }
    Z = 0;
    delay(200);
  }
  Z = 0;
  for (int count = 0; count < NeoPix; count++) {
    Z = Z + 1;
    pixels_1.setBrightness(255);
     pixels_1.setPixelColor(Z-1, pixels_1.Color(255,255,255));
     pixels_1.show();
     }
}
                             // povorot R
void C1() {
  for (int count = 0; count < 3; count++) {
    for (int count = 0; count < NeoPix2; count++) {
      Z = Z + 1;
      pixels_2.setBrightness(255);
       pixels_2.setPixelColor(Z-1, pixels_2.Color(255,255,0));
       pixels_2 .show();
       delay(5);
    }
    delay(200);
    Z = 0;
    for (int count = 0; count < NeoPix2; count++) {
      Z = Z + 1;
      pixels_2.setBrightness(255);
       pixels_2.setPixelColor(Z-1, pixels_2.Color(0,0,0));
       pixels_2.show();
       }
    Z = 0;
    delay(200);
  }
  }
                     // beg stroka R
void C2() {
  Z = NeoPix2 + 1;
  for (int count = 0; count < NeoPix2; count++) {
    for (int count = 0; count < NeoPix2; count++) {
      Z = Z - 1;
      pixels_2.setBrightness(255);
       pixels_2.setPixelColor(Z-1, pixels_2.Color(0,0,153));
       pixels_2.show();
       delay(5);
      pixels_2.setBrightness(255);
       pixels_2.setPixelColor(Z-1, pixels_2.Color(0,0,0));
       pixels_2.show();
       }
    pixels_2.setBrightness(255);
     pixels_2.setPixelColor(Z-1, pixels_2.Color(0,0,153));
     pixels_2.show();
     Z = NeoPix2 + (Z + 1);
  }
  delay(1000);
}

                             // beg tocka R
void C3() {
  Z = 0;
  for (int count = 0; count < NeoPix2; count++) {
    Z = Z + 1;
    pixels_2.setBrightness(255);
     pixels_2.setPixelColor(Z-1, pixels_2.Color(255,255,255));
     pixels_2.show();
     delay(10);
    pixels_2.setBrightness(255);
     pixels_2.setPixelColor(Z-1, pixels_2.Color(51,51,51));
     pixels_2.show();
     }
  Z = NeoPix;
  for (int count = 0; count < NeoPix2; count++) {
    Z = Z - 1;
    pixels_2.setBrightness(255);
     pixels_2.setPixelColor(Z-1, pixels_2.Color(255,255,255));
     pixels_2.show();
     delay(10);
    pixels_2.setBrightness(255);
     pixels_2.setPixelColor(Z-1, pixels_2.Color(51,51,51));
     pixels_2.show();
     }
}

                       // dxo R
void C4() {
  Z = 0;
  for (int count = 0; count < NeoPix2; count++) {
    Z = Z + 1;
    pixels_2.setBrightness(255);
     pixels_2.setPixelColor(Z-1, pixels_2.Color(255,255,255));
     pixels_2.show();
     }
}
                      // povorot ot knopki R
void C5() {
  for (int count = 0; count < 5; count++) {
    for (int count = 0; count < NeoPix2; count++) {
      Z = Z + 1;
      pixels_2.setBrightness(255);
       pixels_2.setPixelColor(Z-1, pixels_2.Color(255,255,0));
       pixels_2.show();
       delay(5);
    }
    delay(200);
    Z = 0;
    for (int count = 0; count < NeoPix2; count++) {
      Z = Z + 1;
      pixels_2.setBrightness(255);
       pixels_2.setPixelColor(Z-1, pixels_2.Color(0,0,0));
       pixels_2.show();
       }
    Z = 0;
    delay(200);
  }

}
                    // povorot knopka dxo R
void C6() {
  for (int count = 0; count < NeoPix2; count++) {
    Z = Z + 1;
    pixels_2.setBrightness(255);
    pixels_2.setPixelColor(Z-1, pixels_2.Color(255,255,255));
    pixels_2.show();
     }
}
  // povorot knopka dxo R




  
                        ///////////////////////////
void setup() {
   pinMode(12, OUTPUT);
   digitalWrite(12, 0);

  pixels_1.begin();
  pixels_2.begin();
  pinMode(A0,INPUT_PULLUP);
  pinMode(A1,INPUT_PULLUP);
  pinMode(A2,INPUT_PULLUP); ///////аварийка
}

void loop() {
    if (N == 0) {
      S1();
      S2();
      S3();
      S4();
     
      C1();
      C2();
      C3();
      C4();
      N = 1;
    }
    if (analogRead(A0) == 0) {
      S5();
      S4();
      N = 1;
    if (analogRead(A1) == 0) {
      C6();
      C5();
      N = 1;
      if (analogRead(A2) == 0) {
      /////осталось прописать код аварийки
     
      N = 1;
      }
    
     }
    }





 

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

этот код невозможно исправить, его надо полностью переписывать. Главная проблема - использование оператора delay() Все делеи нужно удалить

Brat4791
Brat4791 аватар
Offline
Зарегистрирован: 13.02.2021

b707 пишет:

этот код невозможно исправить, его надо полностью переписывать. Главная проблема - использование оператора delay() Все делеи нужно удалить

при удалении  delay() логически не выдет т.к паузы не будет

Файл исходник  написан  в  Ардблок  на сайте ардуиноблок и любезно предоставлен ими

long Z = 0;
long N = 0;
long NeoPix = 20;

#include <Adafruit_NeoPixel.h>
Adafruit_NeoPixel pixels_1 = Adafruit_NeoPixel(NeoPix, 2, NEO_GRB + NEO_KHZ800);


void S1() {
  for (int count = 0; count < 2; count++) {
    for (int count = 0; count < NeoPix; count++) {
      Z = Z + 1;
      pixels_1.setBrightness(255);
       pixels_1.setPixelColor(Z-1, pixels_1.Color(255,255,0));
       pixels_1.show();
       delay(5);
    }
    delay(200);
    Z = 0;
    for (int count = 0; count < NeoPix; count++) {
      Z = Z + 1;
      pixels_1.setBrightness(255);
       pixels_1.setPixelColor(Z-1, pixels_1.Color(0,0,0));
       pixels_1.show();
       }
    Z = 0;
    delay(200);
  }
}

void S2() {
  Z = NeoPix + 1;
  for (int count = 0; count < NeoPix; count++) {
    for (int count = 0; count < NeoPix; count++) {
      Z = Z - 1;
      pixels_1.setBrightness(255);
       pixels_1.setPixelColor(Z-1, pixels_1.Color(0,0,153));
       pixels_1.show();
       delay(5);
      pixels_1.setBrightness(255);
       pixels_1.setPixelColor(Z-1, pixels_1.Color(0,0,0));
       pixels_1.show();
       }
    pixels_1.setBrightness(255);
     pixels_1.setPixelColor(Z-1, pixels_1.Color(0,0,153));
     pixels_1.show();
     Z = NeoPix + (Z + 1);
  }
  delay(1000);
}

void S3() {
  Z = 0;
  for (int count = 0; count < NeoPix; count++) {
    Z = Z + 1;
    pixels_1.setBrightness(255);
     pixels_1.setPixelColor(Z-1, pixels_1.Color(255,255,255));
     pixels_1.show();
     delay(10);
    pixels_1.setBrightness(255);
     pixels_1.setPixelColor(Z-1, pixels_1.Color(51,51,51));
     pixels_1.show();
     }
  Z = NeoPix;
  for (int count = 0; count < NeoPix; count++) {
    Z = Z - 1;
    pixels_1.setBrightness(255);
     pixels_1.setPixelColor(Z-1, pixels_1.Color(255,255,255));
     pixels_1.show();
     delay(10);
    pixels_1.setBrightness(255);
     pixels_1.setPixelColor(Z-1, pixels_1.Color(51,51,51));
     pixels_1.show();
     }
}

void S4() {
  Z = 0;
  for (int count = 0; count < NeoPix; count++) {
    Z = Z + 1;
    pixels_1.setBrightness(255);
     pixels_1.setPixelColor(Z-1, pixels_1.Color(255,255,255));
     pixels_1.show();
     }
}


void setup() {

  pixels_1.begin();

}

void loop() {
    if (N == 0) {
      S1();
      S2();
      S3();
      S4();
      N = 1;
    }

}

 

v258
v258 аватар
Offline
Зарегистрирован: 25.05.2020

С чего вдруг паузы не будет? А как же здесь получается - http://arduino.ru/tutorials/BlinkWithoutDelay ?

Brat4791
Brat4791 аватар
Offline
Зарегистрирован: 13.02.2021

v258 пишет:

С чего вдруг паузы не будет? А как же здесь получается - http://arduino.ru/tutorials/BlinkWithoutDelay ?

возможно ни так выразился он что 

delay()менять на millis()

 

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

Brat4791, у вас русский не родной?

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

Brat4791 пишет:

возможно ни так выразился он что делей менять на милес 

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

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

2. По сути кода. Код бывает блокирующим и неблокирующим. delay() делает код блокирующим, то есть во время выполнения алгоритма ничего другого не может происходить., в том числе и реакции на кнопки.

3. Программы для микроконтроллеров (МК) в парадигме "бесконечный цикл", которая принята в Ардуино следует писать в виде комбинации неблокирующих шагов. Следует сделать проход loop() максимально коротким - единицы миллисекунд. Тогда, при каждом проходе контроллер смотрит текущее время (функция millis()) и, сверяя время с заданным программистом планом, совершает те или иные действия - установить выходной пин, прочитать входной или еще что-то. Для понимания процесса следует читать код для "блинк без делей" до наступления просветления в мозгу.

В случае ленты, вызов метода show() можно считать одним действием, он требует более 1 мс, но все равно не очень много в таймлайне твоей задачи.

4. Концептуально код должен выглядеть так:

В перовой части loop() следует проверить органы управления (кнопки, энкодеры и пр.) и датчики, если они есть в схеме. Если полученные данные или команды требуют какого-то действия, то установить флаг (простая булева переменная) требования действия.

Во второй части loop() следует  по очереди проверить флаги, и выполнить требуемые действия, одновременно сбросив флаг. Это делается для исключения повторного совершения действий.

в третьей части loop() следует совершить вывод данных на все подключенные индикаторы - экраны, светодиоды, внешние линии.

--------------

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

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

wdrakula пишет:

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

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

 

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

Если удалить delay() или заменить его на millis(), то один хер толку не будет никакого, там циклы прописаны через for.
Переписывать полностью.

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

ua6em пишет:

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

Вот 2**10 раз туды!

Brat4791
Brat4791 аватар
Offline
Зарегистрирован: 13.02.2021

Код успешно исправил и теперь есть синхронность 2 лент и раздельность поворотов. Единственное, что пока не разобрался так это после режима поворотников включить ДХО Так же разобраться режим аварийка

Morroc
Offline
Зарегистрирован: 24.10.2016

Спасибо за информацию, следим за новостями поворотникостроения )

Brat4791
Brat4791 аватар
Offline
Зарегистрирован: 13.02.2021
Brat4791
Brat4791 аватар
Offline
Зарегистрирован: 13.02.2021

Выдалось свободное время разобратся с кодом приветствия

И теперь работает как хотелось,

Исправленный код эффект приветствия ,поворотник с режимом ДХО

https://cdn.hackaday.io/files/1860527960048768/sinxron_privetstvie_2.ino