помогите привести код к нормальному виду;

Александр Спицын
Offline
Зарегистрирован: 06.03.2017

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

int VXOD1 = 9;

int VXOD2 = 6;
int VXOD3 = 5;
int VXOD4 = 4;
int val;
void setup(){
  pinMode(VXOD1,OUTPUT);
  pinMode(VXOD2,OUTPUT);
  pinMode(VXOD3,OUTPUT);
  pinMode(VXOD4,OUTPUT);
  Serial.begin(9600); // инициализируем прередачу данных по ком порту на скорости 9600 бод.
}
 
void loop(){
  if (Serial.available()) {
  val = Serial.read();
  if (val == '1'){// 2led
  for(int i =0; ; i++){
  digitalWrite(VXOD1,(i % 2 == 0) ? 1 : 0); // на четных проходах включаем, на нечетных выключаем
  delay(100);
  }
  }//закрывающие скобки 
    if (val == '2'){ // 3led
  for(int i =0; ; i++){
  digitalWrite(VXOD2,(i % 2 == 0) ? 1 : 0); // на четных проходах включаем, на нечетных выключаем
  delay(100);
  }
  }//закрывающие скобки 
    if (val == '3'){ // 4led
  for(int i =0; ; i++){
  digitalWrite(VXOD1,(i % 2 == 0) ? 1 : 0); // на четных проходах включаем, на нечетных выключаем
  digitalWrite(VXOD2,(i % 2 == 0) ? 1 : 0); // на четных проходах включаем, на нечетных выключаем
  delay(250);
}
}//закрывающие скобки 
    if (val == '4'){ // 5led
  for(int i =0; ; i++){
  digitalWrite(VXOD3,(i % 2 == 0) ? 1 : 0); // на четных проходах включаем, на нечетных выключаем
  delay(100);
  }
  }//закрывающие скобки 
    if (val == '5'){ // 6led
  for(int i =0; ; i++){
  digitalWrite(VXOD1,(i % 2 == 0) ? 1 : 0); // на четных проходах включаем, на нечетных выключаем
  digitalWrite(VXOD3,(i % 2 == 0) ? 1 : 0); // на четных проходах включаем, на нечетных выключаем
  delay(250);
  }
  }//закрывающие скобки 
     if (val == '6'){ // 7led
  for(int i =0; ; i++){
  digitalWrite(VXOD2,(i % 2 == 0) ? 1 : 0); // на четных проходах включаем, на нечетных выключаем
  digitalWrite(VXOD3,(i % 2 == 0) ? 1 : 0); // на четных проходах включаем, на нечетных выключаем
  delay(250);
  }
  }//закрывающие скобки 8й
   if (val == '7'){ // 8led
  for(int i =0; ; i++){
  digitalWrite(VXOD1,(i % 2 == 0) ? 1 : 0); // на четных проходах включаем, на нечетных выключаем
  digitalWrite(VXOD2,(i % 2 == 0) ? 1 : 0); // на четных проходах включаем, на нечетных выключаем
  digitalWrite(VXOD3,(i % 2 == 0) ? 1 : 0); // на четных проходах включаем, на нечетных выключаем
  delay(250);
  }
  }//закрывающие скобк*/
    if (val == '8'){ // 9led
  for(int i =0; ; i++){
  digitalWrite(VXOD4,(i % 2 == 0) ? 1 : 0); // на четных проходах включаем, на нечетных выключаем
  delay(100);
  }
  }
   if (val == '9'){ // 10led
  for(int i =0; ; i++){
  digitalWrite(VXOD1,(i % 2 == 0) ? 1 : 0); // на четных проходах включаем, на нечетных выключаем
  digitalWrite(VXOD4,(i % 2 == 0) ? 1 : 0); // на четных проходах включаем, на нечетных выключаем
  delay(250);
  }
  }
    if (val == 'Q'){ // 11led
  for(int i =0; ; i++){
  digitalWrite(VXOD2,(i % 2 == 0) ? 1 : 0); // на четных проходах включаем, на нечетных выключаем
  digitalWrite(VXOD4,(i % 2 == 0) ? 1 : 0); // на четных проходах включаем, на нечетных выключаем
  delay(250);
  }
  }
    if (val == 'W'){ // 12led
  for(int i =0; ; i++){
  digitalWrite(VXOD1,(i % 2 == 0) ? 1 : 0); // на четных проходах включаем, на нечетных выключаем
  digitalWrite(VXOD2,(i % 2 == 0) ? 1 : 0); // на четных проходах включаем, на нечетных выключаем
  digitalWrite(VXOD4,(i % 2 == 0) ? 1 : 0); // на четных проходах включаем, на нечетных выключаем
  delay(250);
  }
  }
   if (val == 'E'){ // 13led
  for(int i =0; ; i++){
  digitalWrite(VXOD3,(i % 2 == 0) ? 1 : 0); // на четных проходах включаем, на нечетных выключаем
  digitalWrite(VXOD4,(i % 2 == 0) ? 1 : 0); // на четных проходах включаем, на нечетных выключаем
  delay(250);
  }
  }
  
    if (val == 'R'){ // 14led
  for(int i =0; ; i++){
  digitalWrite(VXOD1,(i % 2 == 0) ? 1 : 0); // на четных проходах включаем, на нечетных выключаем
  digitalWrite(VXOD3,(i % 2 == 0) ? 1 : 0); // на четных проходах включаем, на нечетных выключаем
  digitalWrite(VXOD4,(i % 2 == 0) ? 1 : 0); // на четных проходах включаем, на нечетных выключаем
  delay(250);
  }
  }
        if (val == 'T'){ // 15led
  for(int i =0; ; i++){
  digitalWrite(VXOD2,(i % 2 == 0) ? 1 : 0); // на четных проходах включаем, на нечетных выключаем
  digitalWrite(VXOD3,(i % 2 == 0) ? 1 : 0); // на четных проходах включаем, на нечетных выключаем
  digitalWrite(VXOD4,(i % 2 == 0) ? 1 : 0); // на четных проходах включаем, на нечетных выключаем
  delay(250);
  }
  }
      if (val == 'Y'){ // 16led
  for(int i =0; ; i++){
  digitalWrite(VXOD1,(i % 2 == 0) ? 1 : 0); // на четных проходах включаем, на нечетных выключаем
  digitalWrite(VXOD2,(i % 2 == 0) ? 1 : 0); // на четных проходах включаем, на нечетных выключаем
  digitalWrite(VXOD3,(i % 2 == 0) ? 1 : 0); // на четных проходах включаем, на нечетных выключаем
  digitalWrite(VXOD4,(i % 2 == 0) ? 1 : 0); // на четных проходах включаем, на нечетных выключаем
  delay(250);
  }
  }
 
         
}
 
Прешибаллин
Offline
Зарегистрирован: 23.05.2017

Сначала научитесь:

1) понятно формулировать свои мысли

2) вставлять код программы про правилам форума

// код программы

 

Клапауций 112
Клапауций 112 аватар
Offline
Зарегистрирован: 01.03.2017

Прешибаллин пишет:

1) понятно формулировать свои мысли

шо тут непонятного? - // на четных проходах включаем, на нечетных выключаем

Alex_Mirko
Alex_Mirko аватар
Offline
Зарегистрирован: 16.05.2016

Если я вас правильно понял. Отправка восклицательного знака выводит из цикла

int VXOD1 = 9;
int VXOD2 = 6;
int VXOD3 = 5;
int VXOD4 = 4;
int val;

void setup() {
  pinMode(VXOD1, OUTPUT);
  pinMode(VXOD2, OUTPUT);
  pinMode(VXOD3, OUTPUT);
  pinMode(VXOD4, OUTPUT);
  Serial.begin(9600); // инициализируем прередачу данных по ком порту на скорости 9600 бод.
}

void loop() {
  
  if (Serial.available()) {

    byte i = 0;
    val = Serial.read();

    while (1) {

      if (Serial.peek() == '!') {
        Serial.read();
        break;
      }
      else if (Serial.peek() > -1) {
        i = 0;
        val = Serial.read();
      }

      if (val == '1') { // 2led
        digitalWrite(VXOD1, (i % 2 == 0) ? 1 : 0); // на четных проходах включаем, на нечетных выключаем
        delay(100);
      }//закрывающие скобка

      if (val == '2') { // 3led
        digitalWrite(VXOD2, (i % 2 == 0) ? 1 : 0); // на четных проходах включаем, на нечетных выключаем
        delay(100);
      }//закрывающие скобки

      if (val == '3') { // 4led
        digitalWrite(VXOD1, (i % 2 == 0) ? 1 : 0); // на четных проходах включаем, на нечетных выключаем
        digitalWrite(VXOD2, (i % 2 == 0) ? 1 : 0); // на четных проходах включаем, на нечетных выключаем
        delay(250);
      }//закрывающие скобки

      if (val == '4') { // 5led
        digitalWrite(VXOD3, (i % 2 == 0) ? 1 : 0); // на четных проходах включаем, на нечетных выключаем
        delay(100);
      }//закрывающие скобки

      if (val == '5') { // 6led
        digitalWrite(VXOD1, (i % 2 == 0) ? 1 : 0); // на четных проходах включаем, на нечетных выключаем
        digitalWrite(VXOD3, (i % 2 == 0) ? 1 : 0); // на четных проходах включаем, на нечетных выключаем
        delay(250);
      }//закрывающие скобки

      if (val == '6') { // 7led
        digitalWrite(VXOD2, (i % 2 == 0) ? 1 : 0); // на четных проходах включаем, на нечетных выключаем
        digitalWrite(VXOD3, (i % 2 == 0) ? 1 : 0); // на четных проходах включаем, на нечетных выключаем
        delay(250);
      }//закрывающие скобки 8й

      if (val == '7') { // 8led
        digitalWrite(VXOD1, (i % 2 == 0) ? 1 : 0); // на четных проходах включаем, на нечетных выключаем
        digitalWrite(VXOD2, (i % 2 == 0) ? 1 : 0); // на четных проходах включаем, на нечетных выключаем
        digitalWrite(VXOD3, (i % 2 == 0) ? 1 : 0); // на четных проходах включаем, на нечетных выключаем
        delay(250);
      }//закрывающие скобк*/

      if (val == '8') { // 9led
        digitalWrite(VXOD4, (i % 2 == 0) ? 1 : 0); // на четных проходах включаем, на нечетных выключаем
        delay(100);
      }

      if (val == '9') { // 10led
        digitalWrite(VXOD1, (i % 2 == 0) ? 1 : 0); // на четных проходах включаем, на нечетных выключаем
        digitalWrite(VXOD4, (i % 2 == 0) ? 1 : 0); // на четных проходах включаем, на нечетных выключаем
        delay(250);
      }

      if (val == 'Q') { // 11led
        digitalWrite(VXOD2, (i % 2 == 0) ? 1 : 0); // на четных проходах включаем, на нечетных выключаем
        digitalWrite(VXOD4, (i % 2 == 0) ? 1 : 0); // на четных проходах включаем, на нечетных выключаем
        delay(250);
      }

      if (val == 'W') { // 12led
        digitalWrite(VXOD1, (i % 2 == 0) ? 1 : 0); // на четных проходах включаем, на нечетных выключаем
        digitalWrite(VXOD2, (i % 2 == 0) ? 1 : 0); // на четных проходах включаем, на нечетных выключаем
        digitalWrite(VXOD4, (i % 2 == 0) ? 1 : 0); // на четных проходах включаем, на нечетных выключаем
        delay(250);
      }

      if (val == 'E') { // 13led
        digitalWrite(VXOD3, (i % 2 == 0) ? 1 : 0); // на четных проходах включаем, на нечетных выключаем
        digitalWrite(VXOD4, (i % 2 == 0) ? 1 : 0); // на четных проходах включаем, на нечетных выключаем
        delay(250);
      }

      if (val == 'R') { // 14led
        digitalWrite(VXOD1, (i % 2 == 0) ? 1 : 0); // на четных проходах включаем, на нечетных выключаем
        digitalWrite(VXOD3, (i % 2 == 0) ? 1 : 0); // на четных проходах включаем, на нечетных выключаем
        digitalWrite(VXOD4, (i % 2 == 0) ? 1 : 0); // на четных проходах включаем, на нечетных выключаем
        delay(250);
      }

      if (val == 'T') { // 15led
        digitalWrite(VXOD2, (i % 2 == 0) ? 1 : 0); // на четных проходах включаем, на нечетных выключаем
        digitalWrite(VXOD3, (i % 2 == 0) ? 1 : 0); // на четных проходах включаем, на нечетных выключаем
        digitalWrite(VXOD4, (i % 2 == 0) ? 1 : 0); // на четных проходах включаем, на нечетных выключаем
        delay(250);
      }

      if (val == 'Y') { // 16led
        digitalWrite(VXOD1, (i % 2 == 0) ? 1 : 0); // на четных проходах включаем, на нечетных выключаем
        digitalWrite(VXOD2, (i % 2 == 0) ? 1 : 0); // на четных проходах включаем, на нечетных выключаем
        digitalWrite(VXOD3, (i % 2 == 0) ? 1 : 0); // на четных проходах включаем, на нечетных выключаем
        digitalWrite(VXOD4, (i % 2 == 0) ? 1 : 0); // на четных проходах включаем, на нечетных выключаем
        delay(250);
      }

      if (i > 254) {
        i = 0;
      }
      i++;

    }
  }
}