Всем привет! ! ! Написал небольшой код, но встала проблема. Как реализовать смену цвета светодиода если нажата одна из кнопок. Суть в том что есть 9 пикселей в ленте, по нажатию кнопки допустим красной команды то следующий пиксель после красного (который горит синим) загорался красным. Вот пример схемы [/url][/IMG] И да не могу задать 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); }
Я хотел опробывать программу сначала в tinkercad, а там подключение библиотек не доступно, вот по этому #include <Adafruit_NeoPixel.h> библиотека, и да светодиоды WS2812
Если не понятна суть всего то вот подробней объяснение. Есть красная и синяя команда, у каждой команды по 8 кнопок, они рандомно зажигаются. Если красная нажала быстрее на горящую кнопку то надо сделать +1 светодиод к красной команде, ну а если синяя то к Синей. И когда все светодиоды будут гореть одним цветов конец раунда. хотел сделать три состояния флага 1, 2, 3. 1-белый цвет 2- синий 3 красный и что бы программа проверяла если нажата красная кнопка то ардуинка начала смотреть флаги если светодиод 1 имеет состояние 3 она его пропускала и шла дальше проверять, пока не будет состояния 1 или 2. и тогда этот светодиод переводить в состояние 3. Только что то щас в ступоре немного ))
Э не. Прежде, чем браться за код, необходимо взять лист бумаги и нарисовать алгоритм. Этому учат в ВУЗах, но этому не учит тырнет. Даже никто не заикается. Все учат кодить. Задача распадается на две: запустить рандом, опросить кнопки, инкрементировать переменную. Если равно 4, то конец игры. Флаги вообще не нужны. Задача вторая: опрашивать переменную и зажечь светодиоды.
Заинтересовался темой. Скачал несколько библ для WS2812. FastLed - самая "народная". Из примеров - Blink - там то что вы ищете. Управление конкретным ЛЭД-ом, в конкретный цвет. Два десятка букав кода. Погонял в Протеусе программки - красиво аднака. Раскошелюсь пожалуй на партейку девайсов.