Официальный сайт компании Arduino по адресу arduino.cc
Светофор
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Я новичок в среде разработки ардуино. Вчера написал светофор с кнопкой. Как мне сделать так, чтобы если кнопка не была нажата в первые 4 секунды, то выполняется цикл redyellow()? Вот сам код:
int buttonState; void setup() { pinMode(10, OUTPUT); pinMode(11, OUTPUT); pinMode(12, OUTPUT); pinMode(2, INPUT); redyellow(); } void loop(){ buttonState = digitalRead(2); if (buttonState == HIGH){ changelight(); } } void redyellow(){ digitalWrite(10, HIGH); delay(4000); digitalWrite(11, HIGH); delay(2000); digitalWrite(10, LOW); digitalWrite(11, LOW); green(); } void green(){ digitalWrite(12, HIGH); loop(); } void changelight() { digitalWrite(12, LOW); delay(500); digitalWrite(12, HIGH); delay(500); digitalWrite(12, LOW); delay(500); digitalWrite(12, HIGH); delay(500); digitalWrite(12, LOW); delay(500); digitalWrite(12, HIGH); delay(500); digitalWrite(12, LOW); delay(500); digitalWrite(12, HIGH); delay(500); digitalWrite(12, LOW); digitalWrite(11, HIGH); delay(2000); digitalWrite(11, LOW); redyellow(); }
Извиняюсь за кривой код)
Извиняюсь за кривой код)
Не извиняйтесь, а вставьте код как положено на этом флруме. В таком виде его, скорее всего, никто и читать не станет.
готово
В подпрограмме(п/п) setup нужно проверять условия значение функции millis() < 4000 и нажатия кнопки. Если хотя бы одно из условий выполняется , то выставить флаг "мигающий желтый" и выйти, иначе просто выйти. В п/п loop проверять флаг "мигающий желтый" и если он выставлен то вызывать его п/п, иначе вызывать п/п смены цветов.
Можете пожалуйста прикрепить готовый код?
Можете пожалуйста прикрепить готовый код?
Нет.
Nailoren - - начните с того, что тот код, что вы выложили - работать не будет. Во всяком случае долго.
Смотрите - у вас сначала запускается setup(). из него - redyellow(), из него green(), потом loop(), потом changelight(). а из него снова redyellow() Все, круг замкнулся. Это называется бесконечная рекурсия и она быстро и гарантировано приводит к зависанию программы даже на больших ПК с тысячами мегабайт RAM. А тут микроконтроллер всего с 2 кбайт.
Так программы не пишутся. Если хотите бесконечный цикл -вызывайте все ваши подпрограммы из loop - собственно, ЛУП для того и нужен, чтобы бесконечно выполнять программу "по кругу"
Можете пожалуйста прикрепить готовый код?
Готовые коды прикрепляют в другом разделе форума.
Ок