довольно неэффективно... sser - позвольте совет. Организуйте все что касается девяти светодиодов - в массивы. Массив номеров пинов, массив переменных ledstate, массив переменных a1-a9 и тд... Код уменьшится примерно в 9 раз
Уф... Светодиоды в массив загнал вроде. Код (C++): const int buttonPin11 = 11; // номер входа, подключенный к кнопке int buttonState11 = 0; // переменная для хранения состояния кнопки const int buttonPin12 = 12; // номер входа, подключенный к кнопке int buttonState12 = 0; // переменная для хранения состояния кнопки int ledPins[] = { 2, 3, 4, 5, 6, 7,8, 9, 10 }; // массив данным с номерами пинов, к которым подключены светодиоды int pinCount = 9; // количество пинов (то есть, длина массива) int X = 0; bool a1 = false; //переменные для хранения состояния светодиода 1 bool a2= false; //...светодиода 2 bool a3 = false; bool a4= false; bool a5 = false; bool a6= false; bool a7 = false; bool a8= false; bool a9 = false; // Variables will change: int ledState2 = LOW; int ledState3 = LOW; int ledState4 = LOW; int ledState5 = LOW; int ledState6 = LOW; int ledState7 = LOW; int ledState8 = LOW; int ledState9 = LOW; int ledState10 = LOW; // этой переменной устанавливаем состояние светодиода long previousMillis = 0; // храним время последнего переключения светодиода long interval = 200; // интервал между включение/выключением светодиода void setup() { pinMode(buttonPin11, INPUT);// задаем режим выхода для порта, подключенного к кнопке pinMode(buttonPin12, INPUT); // использование for loop для инициализации пинов как выходов for (int thisPin = 0; thisPin < pinCount; thisPin++) { pinMode(ledPins[thisPin], OUTPUT); } } void loop() { buttonState11 = digitalRead(buttonPin11);//нажатие кнопки изменяет переменную buttonState12 = digitalRead(buttonPin12); if (buttonState11 == HIGH) { //перемещаем мигающий светодиод после каждого нажатия X= ++X; if (X==10) { X=1; } delay (200); } if ((buttonState12 == HIGH)&&(X==1)){ // запоминаем положение мигающего светодиода. a1=true; } if ((buttonState12 == HIGH)&&(X==2)){ a2=true; } if ((buttonState12 == HIGH)&&(X==3)){ a3=true; } if ((buttonState12 == HIGH)&&(X==4)){ a4=true; } if ((buttonState12 == HIGH)&&(X==5)){ a5=true; } if ((buttonState12 == HIGH)&&(X==6)){ a6=true; } if ((buttonState12 == HIGH)&&(X==7)){ a7=true; } if ((buttonState12 == HIGH)&&(X==8)){ a8=true; } if ((buttonState12 == HIGH)&&(X==9)){ a9=true; } unsigned long currentMillis = millis(); if(currentMillis - previousMillis > interval) { previousMillis = currentMillis; } if (((ledState2 == LOW)&&(X==1))||(a1==true))//мигаем светодиодами ledState2 = HIGH; else ledState2 = LOW; if (((ledState3 == LOW)&&(X==2))||(a2==true)) ledState3 = HIGH; else ledState3 = LOW; if (((ledState4 == LOW)&&(X==3))||(a3==true)) ledState4 = HIGH; else ledState4 = LOW; if (((ledState5 == LOW)&&(X==4))||(a4==true)) ledState5 = HIGH; else ledState5 = LOW; if (((ledState6 == LOW)&&(X==5))||(a5==true)) ledState6 = HIGH; else ledState6 = LOW; if (((ledState7 == LOW)&&(X==6))||(a6==true)) ledState7 = HIGH; else ledState7 = LOW; if (((ledState8 == LOW)&&(X==7))||(a7==true)) ledState8 = HIGH; else ledState8 = LOW; if (((ledState9 == LOW)&&(X==8))||(a8==true)) ledState9 = HIGH; else ledState9 = LOW; if (((ledState10 == LOW)&&(X==9))||(a9==true)) ledState10 = HIGH; else ledState10 = LOW; digitalWrite(ledPins[0],ledState2); digitalWrite(ledPins[1],ledState3); digitalWrite(ledPins[2],ledState4); digitalWrite(ledPins[3],ledState5); digitalWrite(ledPins[4],ledState6); digitalWrite(ledPins[5],ledState7); digitalWrite(ledPins[6],ledState8); digitalWrite(ledPins[7],ledState9); digitalWrite(ledPins[8],ledState10); if (((a1==true)&&(a2==true)&&(a3==true))||((a1==true)&&(a4==true)&&(a7==true))||((a4==true)&&(a5==true)&&(a6==true))||((a1==true)&&(a5==true)&&(a9==true))||((a3==true)&&(a6==true)&&(a9==true))||((a7==true)&&(a8==true)&&(a9==true))||((a3==true)&&(a5==true)&&(a7==true))) { //победил! a2=0;//второй светодиод отключаем X=2; //мигаем 2 светодиодом } }
Ну, вроде всё в массивы загнал . Код (C++): const int buttonPin11 = 11; // номер входа, подключенный к кнопке int buttonState11 = 0; // переменная для хранения состояния кнопки int aI = 0; const int buttonPin12 = 12; // номер входа, подключенный к кнопке int buttonState12 = 0; // переменная для хранения состояния кнопки int ledPins[] = { 2, 3, 4, 5, 6, 7,8, 9, 10 }; // массив данным с номерами пинов, к которым подключены светодиоды int pinCount = 9; // количество пинов (то есть, длина массива) int X = 0; int Vals_a[9] = {0, 0, 0, 0, 0, 0, 0, 0, 0};//массив переменных для хранения состояния светодиода a1 int ledState[9] = {0, 0, 0, 0, 0, 0, 0, 0, 0};//массив переменных ledState2 // этой переменной устанавливаем состояние светодиода long previousMillis = 0; // храним время последнего переключения светодиода long interval = 200; // интервал между включение/выключением светодиода void setup() { pinMode(buttonPin11, INPUT);// задаем режим выхода для порта, подключенного к кнопке pinMode(buttonPin12, INPUT); // использование for loop для инициализации пинов как выходов for (int thisPin = 0; thisPin < pinCount; thisPin++) { pinMode(ledPins[thisPin], OUTPUT); } } void loop() { buttonState11 = digitalRead(buttonPin11);//нажатие кнопки изменяет переменную buttonState12 = digitalRead(buttonPin12); if ((buttonState11 == HIGH)&&( ledState[X] == 0)) { //перемещаем мигающий светодиод после каждого нажатия X= ++X; if (X==9) { X=0; } delay (200);//дрыхнем } if (buttonState12 == HIGH)//кнопка 2 записывает в массив ход { Vals_a[X] = 1;; } unsigned long currentMillis = millis(); if(currentMillis - previousMillis > interval) { previousMillis = currentMillis; } if (ledState[X]==0)//мигаем светодиодами { ledState[X] = 1;; } else { ledState[X] = 0;; } for (int Z = 0; Z < 9; Z++) { //листаем массив aI=((ledState[Z])||(Vals_a[Z]));//проверяем зажжённые светодиоды digitalWrite(ledPins[Z],aI);//зажигаем светодиоды } //условия победы if (((Vals_a[1]==1)&&(Vals_a[4]==1)&&(Vals_a[7]==1))||((Vals_a[0]==1)&&(Vals_a[1]==1)&&(Vals_a[2]==1))||((Vals_a[0]==1)&&(Vals_a[3]==1)&&(Vals_a[6]==1))||((Vals_a[3]==1)&&(Vals_a[4]==1)&&(Vals_a[5]==1))||((Vals_a[0]==1)&&(Vals_a[4]==1)&&(Vals_a[8]==1))||((Vals_a[2]==1)&&(Vals_a[5]==1)&&(Vals_a[8]==1))||((Vals_a[6]==1)&&(Vals_a[7]==1)&&(Vals_a[8]==1))||((Vals_a[2]==1)&&(Vals_a[4]==1)&&(Vals_a[6]==1))) { //если выполнено условие , то победил! Vals_a[1] = 0;;//второй светодиод отключаем X=1;//мигаем 2 светодиодом } }