Управление адресной лентой

Тема в разделе "Arduino & Shields", создана пользователем Gokry, 22 фев 2018.

  1. Gokry

    Gokry Нуб

    Всем привет! ! ! Написал небольшой код, но встала проблема. Как реализовать смену цвета светодиода если нажата одна из кнопок. Суть в том что есть 9 пикселей в ленте, по нажатию кнопки допустим красной команды то следующий пиксель после красного (который горит синим) загорался красным.
    Вот пример схемы
    [​IMG][/url][/IMG] Безымянный.png

    И да не могу задать
    int G1 = 9;
    int G2 = 10;
    int G3 = 11;
    int G4 = 12;

    что были

    int B1 = 9;
    int B2 = 10;
    int B3 = 11;
    int B4 = 12;


    Код (C++):
    #include <Adafruit_NeoPixel.h>


    #define LED 19
    #define LED_COUNT 9

    Adafruit_NeoPixel strip = Adafruit_NeoPixel(LED_COUNT, LED, NEO_GRB + NEO_KHZ800);
    int  flag_0=0;  // Переменные светодиодов
    int  flag_1=1;
    int  flag_2=2;
    int  flag_3=3;
    int  flag_4=4;
    int  flag_5=5;
    int  flag_6=6;
    int  flag_7=7;
    int  flag_8=8;
    boolean ROFF;   // Переменные кнопок
    boolean RON;
    boolean BOFF;
    boolean BON;
    int R1 = 2;
    int R2 = 3;
    int R3 = 4;
    int R4 = 5;
    int G1 = 9;
    int G2 = 10;
    int G3 = 11;
    int G4 = 12;
    int RIN = 7;
    int GIN = 8;
    long randNumber1;
    long randNumber2;
    void setup () {
     
      strip.begin();
      strip.show();
     
     
      pinMode(LED, OUTPUT);
      pinMode (GIN, INPUT);
      pinMode (G1, OUTPUT);
      pinMode (G2, OUTPUT);
      pinMode (G3, OUTPUT);
      pinMode (G4, OUTPUT);
      pinMode (RIN, INPUT);
      pinMode (R1, OUTPUT);
      pinMode (R2, OUTPUT);
      pinMode (R3, OUTPUT);
      pinMode (R4, OUTPUT);
      Serial.begin(9600);
      Serial.println("READY");
    }

    void loop (){
     
     
     
    BOFF=!digitalRead (GIN);  // Считываем состояние кнопок Синих
      delay (10);
    ROFF=!digitalRead (RIN); //Считываем состояние кнопок Красных
      delay (10);
     

          digitalWrite(13, 1);
      strip.clear();

       strip.setPixelColor( 0, 0 , 0 , 255 );
        strip.setPixelColor( 1, 0 , 0 , 255 );
        strip.setPixelColor( 2, 0 , 0 , 255 );
        strip.setPixelColor( 3, 0 , 0 , 255 );
        strip.setPixelColor( 4, 255 , 255 ,255);
        strip.setPixelColor( 5, 255 , 0 , 0 );
        strip.setPixelColor( 6, 255 , 0 , 0 );
        strip.setPixelColor( 7, 255 , 0 , 0 );
        strip.setPixelColor( 8, 255 , 0 , 0 );
     

      strip.show(); // Передаем цвета ленте
     

      if (ROFF == 1 && RON == 0){ // Если кнопка красных не нажата
      RON = 1;
       delay (100);
        randNumber1=random (R1,R4); // Рандом красной команды
        Serial.println(randNumber1);
         Serial.println("ON");
         digitalWrite (randNumber1, HIGH); // Зажигаем кнопку красной
      }
      if (ROFF == 0 && RON == 1){ // Если кнопка красных нажата
      RON = 0;
     
        Serial.println(randNumber1);
         Serial.println("OFF");
         digitalWrite (randNumber1, LOW); // Тушим кнопку красных
      }
     
      if (BOFF == 1 && BON == 0){// Если кнопка синих не нажата
      BON = 1;
        delay (100);
        randNumber2=random (G1,G4);  //Рандом синей команды
        Serial.println(randNumber2);
         Serial.println("ON_BLUE");
         digitalWrite (randNumber2, HIGH);//Зажигаем кнопку синих
      }
      if (BOFF == 0 && BON == 1){// Если кнопка синих нажата
      BON = 0;
     
        Serial.println(randNumber2);
         Serial.println("OFF_BLUE");
         digitalWrite (randNumber2, LOW);// Тушим кнопку синих
      }
     

     
      delay (50);
    }
     
  2. parovoZZ

    parovoZZ Гуру

    У тебя какие светики? 2812? Юзай фастлед.
     
    Ariadna-on-Line нравится это.
  3. Gokry

    Gokry Нуб

    Я хотел опробывать программу сначала в tinkercad, а там подключение библиотек не доступно, вот по этому #include <Adafruit_NeoPixel.h> библиотека, и да светодиоды WS2812
     
  4. parovoZZ

    parovoZZ Гуру

    Так у тебя сейчас вообще ничего нет?
     
  5. Gokry

    Gokry Нуб

    Из железа только ардуинка микро ) все остальное едет
     
  6. Gokry

    Gokry Нуб

    Если не понятна суть всего то вот подробней объяснение.
    Есть красная и синяя команда, у каждой команды по 8 кнопок, они рандомно зажигаются. Если красная нажала быстрее на горящую кнопку то надо сделать +1 светодиод к красной команде, ну а если синяя то к Синей. И когда все светодиоды будут гореть одним цветов конец раунда.
    хотел сделать три состояния флага 1, 2, 3.
    1-белый цвет
    2- синий
    3 красный
    и что бы программа проверяла если нажата красная кнопка то ардуинка начала смотреть флаги если светодиод 1 имеет состояние 3 она его пропускала и шла дальше проверять, пока не будет состояния 1 или 2. и тогда этот светодиод переводить в состояние 3. Только что то щас в ступоре немного ))
     
  7. parovoZZ

    parovoZZ Гуру

    Э не. Прежде, чем браться за код, необходимо взять лист бумаги и нарисовать алгоритм. Этому учат в ВУЗах, но этому не учит тырнет. Даже никто не заикается. Все учат кодить.
    Задача распадается на две: запустить рандом, опросить кнопки, инкрементировать переменную. Если равно 4, то конец игры. Флаги вообще не нужны.
    Задача вторая: опрашивать переменную и зажечь светодиоды.
     
  8. parovoZZ

    parovoZZ Гуру

    давай поможем. Что не получается?
     
  9. parovoZZ

    parovoZZ Гуру

    за деньги в другом разделе помогут.
     
  10. Ariadna-on-Line

    Ariadna-on-Line Гуру

    Заинтересовался темой. Скачал несколько библ для WS2812. FastLed - самая "народная".
    Из примеров - Blink - там то что вы ищете. Управление конкретным ЛЭД-ом, в конкретный цвет. Два десятка букав кода. Погонял в Протеусе программки - красиво аднака. Раскошелюсь пожалуй на партейку девайсов.
     
    Последнее редактирование: 9 дек 2018
  11. мне нужно что бы эти режимы переключались строго по кнопке