Остановка действия в void loop
- Войдите на сайт для отправки комментариев
Пт, 15/06/2018 - 10:16
Приветствую всех.
if (millis() - last_time > x ) {
digitalWrite(red,1);
Необходимо продолжить этот фрагмент так, чтобы при включении светодиода проходило 5 секунд, после чего он выключался совсем, а вместо него включался другой пин
int blue = 12;
int green = 11; // настройка портов
int red = 10;
int motor = 7;
int buzzer = 6;
const int start = 9; // работа с кнопками
const int choice = 8;
int choice_status = 0;
unsigned long last_time; // работа с таймером
int x = 5000;
void setup() {
pinMode(blue, OUTPUT); // установка режима работы портов
pinMode(green, OUTPUT);
pinMode(red, OUTPUT);
pinMode(start, INPUT);
pinMode(choice, INPUT);
pinMode(motor, OUTPUT);
pinMode(buzzer, OUTPUT);
int x = 5000; // установка времени
}
void loop() {
choice_status = digitalRead(choice);
if (choice_status == HIGH) {
digitalWrite(green, 0);
digitalWrite(buzzer, 0);
}
else {
digitalWrite(green,1);
digitalWrite(buzzer, 1);
x = 10000;
}
if (millis() - last_time > x ) {
digitalWrite(red,1);
}
delay(5000);
digitalWrite(red,0);
}
чтобы при включении светодиода проходило 5 секунд, после чего он выключался совсем, а вместо него включался другой пин
По-простому так:
... boolean canOnRed = true; //Переменная, разрешающая включать red ... void setup() { ... } void loop() { ... if ((millis() - last_time > x) && canOnRed) { //Если выполняется условие и можно включать red digitalWrite(red,1); canOnRed = false; //Больше включать red нельзя никогда } else if (!canOnRed) { //Если нельзя включать red digitalWrite(orherPin,1); //Включим другой пин } ... }Однако, лучше еще избавиться бы от delay, а то loop каждый раз будет тормозиться на 5 секунд и кнопку на пине choice нужно будет держать 5 секунд, чтобы программа ее прочитала.
Спасибо, попробую)
Не сработало, оба светодиода горят сразу же после включения
Не сработало, оба светодиода горят сразу же после включения
У вас сам код как-то не очень...
Например, last_time не меняется никогда.
Как должно все вместе работать? Я предложил только идею, а не готовое решение.
Код не очень, т.к. это моя первая попытка что-то собрать на ардуино. Мне необходимо сделать так, чтобы после того, как пройдет 10 секунд загорался красный светодиод, после чего проходит 5 секунд, и он выключается насовсем. Вместо красного загорается зеленый и горит не выключаясь. И да, необходимо, чтобы все это выполнялось в void loop. Но у меня мало опыта, поэтому я не могу реализовать это сам
Со светодиодами работаю для отладки, пока не добьюсь того, что задумано
Запомнили время, отсчитали 10 секунд, включили красный, отсчитали пятнадцать секунд, выключили красный, зажгли зеленый.
P/S Типа так:
void setup() { // put your setup code here, to run once: time = millis(); } void loop() { if (millis() - time > 10000 && millis() - time < 15000) { digitalWrite(red, HIGH); } if(millis() - time >=15000) { digitalWrite(red,LOW); digitalWrite(green,HIGH); } }Уже делал, но все равно попробую, может я что-то делал не так
Если что, то можно пойти по-другому. Можно сбрасывать саму ардуино через определенное время, но необходимо сначала узнать как это делается
Один пин на сброс, в нужный момент дернуть. Называется красивым японским словом - харакири.))))
ЗАЧЕМ???
Не говоря уж о том, что это "гланды через Ж", так еще и после сброса ардуина снова начнет ту же программу с начала... и так и будет крутить по кругу.
Не думаю, что вам надо именно это.
Код не очень, т.к. это моя первая попытка что-то собрать на ардуино. Мне необходимо сделать так, чтобы после того, как пройдет 10 секунд загорался красный светодиод, после чего проходит 5 секунд, и он выключается насовсем. Вместо красного загорается зеленый и горит не выключаясь. И да, необходимо, чтобы все это выполнялось в void loop. Но у меня мало опыта, поэтому я не могу реализовать это сам
Через 10 секунд после нажатия кнопки загорается красный, через 5 секунд после этого гаснет красный и загорается зеленый? При нажатии кнопки все повторяется? Или кнопка тут не причем?
Вот это именно то, что нужно. Спасибо!)
Запомнили время, отсчитали 10 секунд, включили красный, отсчитали пятнадцать секунд, выключили красный, зажгли зеленый.
P/S Типа так:
void setup() { // put your setup code here, to run once: time = millis(); } void loop() { if (millis() - time > 10000 && millis() - time < 15000) { digitalWrite(red, HIGH); } if(millis() - time >=15000) { digitalWrite(red,LOW); digitalWrite(green,HIGH); } }Спасибо)
Удачи