Можно ли выйти из цикла при изменении входного состояния?

input loop

Я хотел бы выйти из определенного цикла, если состояние входных данных изменяется с НИЗКОГО на ВЫСОКИЙ. Это текущий цикл:

void brakeFade() {
pixels.clear();
pixels.setBrightness(255);
pixels.fill(16711680, 0, 0);

for(int i=255; i>=10; i-=1) {
  pixels.setBrightness(i);
  pixels.show();
  delay(5);
  }
for(int j=10; j<=255; j+=1) {
  pixels.setBrightness(j);
  pixels.show();
  delay(5);

} }

Мне нужен этот цикл для выхода, если

(digitalRead(brakeFeed) == LOW)

Изменяется на ВЫСОКИЙ во время цикла.

, 👍1

Обсуждение

нет никаких причин использовать две разные именованные индексные переменные, i и j, в двух циклах for ... они оба могут быть "i" .... увеличение может быть выполнено с помощью "i ++ вместо i + = 1` ... то же самое и с декрементом, @jsotola


1 ответ


1

разобрался в этом:

void brakeFade2() {
pixels.clear();
pixels.setBrightness(255);
pixels.fill(16711680, 0, 0);

for(int i=255; i>=10; i-=1) {
  if (digitalRead(brakeFeed) == LOW){
  pixels.setBrightness(i);
  pixels.show();
  delay(5);
  }
  else {
    break;
  }
}
for(int j=10; j<=255; j+=1) {
  if (digitalRead(brakeFeed) == LOW){
  pixels.setBrightness(j);
  pixels.show();
  delay(5);
  }
  else {
    break;
  }
  }

}

,

более простым способом было бы добавить его в тест завершения цикла for... for(int i=255; (i>=10) или (digitalRead(brakeFeed) == НИЗКИЙ); i--) {, @jsotola

Разве это не было бы for(int i=255; (i>=10) && (digitalRead(brakeFeed) == LOW)? Операционная система хочет, чтобы цикл продолжался до тех пор, пока значение >= 10, ** и ** вывод подачи тормоза по-прежнему считывается как низкий. Он должен сломаться, если что-то из этого перестанет иметь место., @Duncan C