Вопрос по циклам

Sany2235
Offline
Зарегистрирован: 17.11.2016

Здравствуйте, в програмировании совсем не разбираюсь, прошу помощи в решении следующего вопроса:

при появлении на определенном пине HIGH должно происходить последовательность действий, при появлнии LOW ничего не происходить. при повторном появлении HIGH опять должно происходить последовательность действий. Вот отрезок кода

a = digitalRead(outPin);

    if (a!=LOW)
     {while(i < 1)
     { digitalWrite(outPin1, HIGH);
      delay(1000);
      digitalWrite(outPin1,LOW);
      delay(1000);
      digitalWrite(outPin2, LOW);
      delay(1000);
      digitalWrite(outPin2,HIGH);
      delay(1000);
      i++;}}
   else digitalWrite(outPin2,LOW);
поблема в том что эта последовательность выполняется всего 1 раз, переменная а меняется, но цикл не запускается повторно. 
Вот отрезок другого кода
a = digitalRead(outPin);
    if (a!=LOW)
     {digitalWrite(outPin2,HIGH);}
   else digitalWrite(outPin2,LOW);
здесь все работает сколько угодно раз при изменении переменной а
в чем может быть проблема????
нужно чтоб работал первый отрезок кода.
заранее благодарен.
 
qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

переменная i.  будет <1 будет запускаться. а нет не будет.

Sany2235
Offline
Зарегистрирован: 17.11.2016

если переменная i равна 2 то цикл запускается все равно единожды с той разницей что диоды промаргивают 2 раза, а при изменении переменной "a" повторно промаргивание не запускается

Coolerr
Offline
Зарегистрирован: 30.06.2014

Про while почитайте. И при изменении i что произойдет? После первого цикла в while прошли проверку i=1, возвращаемся опять проверили цикл не выпонили, нужно обнулить i для входа в while.

Sany2235
Offline
Зарегистрирован: 17.11.2016

я совсем чайник, подскажите пожалуйста в каком месте обнулить i

a = digitalRead(outPin);
    if (a!=LOW)

     {while(i < 1)
     { digitalWrite(outPin1, LOW);
      delay(1000);
      digitalWrite(outPin1,HIGH);
      delay(1000);
      digitalWrite(outPin2, LOW);
      delay(1000);
      digitalWrite(outPin2,HIGH);
      delay(1000);
      i++;}
          }
   else digitalWrite(outPin2,HIGH);
    digitalWrite(outPin1,HIGH);

 

Sany2235
Offline
Зарегистрирован: 17.11.2016
до меня дошло, всем БОЛЬШОЕ спасибо
if (a!=LOW)

     {while(i < 1)
     { digitalWrite(outPin1, LOW);
      delay(1000);
      digitalWrite(outPin1,HIGH);
      delay(1000);
      digitalWrite(outPin2, LOW);
      delay(1000);
      digitalWrite(outPin2,HIGH);
      delay(1000);
      i++;}
          }
          
   else digitalWrite(outPin2,HIGH);
    digitalWrite(outPin1,HIGH);
    if (a==HIGH)
    i=1;
   else i=0;