Запрос Do Loop не останавливается
Я новичок в программировании Arduino и хотел бы задать вопрос.
Во-первых, приносим свои извинения, если на этот вопрос уже был дан ответ, и я понимаю, что он будет заблокирован, если на него был дан ответ в другом месте.
Я пытаюсь заставить три светодиода (красный, желтый, зеленый) зацикливаться 5 раз (в цикле выполнения).
Для этого я создал целочисленную переменную (x) и инициализировал ее значением 0.
Затем я каждый раз увеличиваю x на 1.
Однако я не могу заставить их прекратить цикл, когда x больше 5. Программа работает должным образом для всего остального (горит зеленый светодиод, подождите 1 секунду, горит желтый светодиод, подождите 1 секунду, горит красный светодиод, а затем зацикливается). ).
//устанавливаем контакты светодиода
int greenPin = 13;
int yellowPin = 12;
int redPin = 11;
void setup()
{
pinMode(greenPin, OUTPUT); // устанавливает цифровой вывод в качестве выхода
pinMode(yellowPin, OUTPUT);
pinMode(redPin, OUTPUT);
}
void loop(){
int x = 0;
do {
digitalWrite(greenPin, HIGH); // включает светодиод
delay(1000); // ждем секунду
digitalWrite(greenPin, LOW);
digitalWrite(yellowPin, HIGH); // выключает светодиод
delay(1000);
digitalWrite(yellowPin, LOW);// ждем секунду
digitalWrite(redPin, HIGH); // выключает светодиод
delay(1000);
digitalWrite(redPin, LOW);
}
while(x<=5); {
x = x + 1;
}
}
@Mr Digs, 👍0
Обсуждение1 ответ
Крисл уже дал подсказку.
Однако, чтобы добавить комментарий с примером кода, я использую поле ответа.
В C у вас есть более или менее два типа циклов:
- для
- делать / пока
Во-первых, вы заранее знаете, сколько итераций у вас есть, во-вторых, когда это зависит от внешнего ввода (например, когда вы ожидаете значение, полученное из цикла).
В вашем случае лучше использовать цикл for
, чтобы получить:
for (x = 0; x < 6; x++)
{
...
}
Что это значит?
- Инициализирует x значением 0 (первая часть оператора
for
) - Проверяет условие
x < 5' (вторая часть оператора
for). Если false, продолжается с первого оператора после тела
for` (после скобки }). - Выполняет тело цикла (внутри скобок)
- Увеличивает x (третья часть инструкции
for
) - Продолжается с 2
Также довольно часто условие включает начальный элемент диапазона (x = 0), но исключает конечный элемент диапазона (x < 6), поэтому оно выполняется в последний раз с x == 5.
Спасибо за ответы. Когда я изучаю это, я пытаюсь выполнить упражнение, подобное приведенному ниже: Зеленый светодиод горит Подождите 1 сек. Зеленый светодиод не горит Желтый светодиод горит Подождите 1 сек. Желтый светодиод не горит Красный светодиод горит.. Сделайте это в течение 5 итераций. В упражнении указано, что я должен использовать цикл do while. Поскольку я специально ограничен вышеуказанными условиями, @Mr Digs
@MrDigs хорошо, если у упражнения есть это ограничение, сделайте это. Просто в данном случае это не самый обычный способ. Вы можете попробовать оба варианта для себя, чтобы увидеть разницу, если у вас есть время., @Michel Keijzers
- Объектно-ориентированное программирование Arduino
- в то время как (1) внутри, если условно
- Глобальная переменная не изменяется, когда значение задано в логической функции
- Как заставить переключатель работать до тех пор, пока не будет обнаружен другой последовательный вход?
- Операторы If/Else на Arduino не выполняются
- Как я могу остановить цикл при использовании сервопривода с клавишным вводом?
- оператор if не работает с дробью, но работает с десятичным эквивалентом
- Выполнить функцию цикла из основного цикла()
Переместите оператор приращения внутрь цикла do while, @chrisl