Вопрос новичка - как выйти из цикла ?
- Войдите на сайт для отправки комментариев
Здравствуйте , вот и настало время задать не умный вопрос . Есть это
//////////////РЕЛЕ ВЫТЯЖКИ ///////////////////////
if (digitalRead(12) == LOW && flag == 1) //если кнопка не нажата
// и перемення flag равна 1 , то ...
{
delay(2000);//делаем задержку
digitalWrite(11, HIGH); //выключаем свет
digitalWrite(10, LOW); //включаем вытяжку
// Вот тут проблема -не знаю что сделать , чтоб если "digitalRead(12)" вдруг стал " HIGH" не ждать минуту , а сразу выйти из цикла .
delay(60000);
digitalWrite(10, HIGH); //выключаем вытяжку
flag = 0; //обнуляем переменную flag
}
else //если не нажата...
{
flag = 0; //обнуляем переменную flag
digitalWrite(10, HIGH); //выключаем вытяжку
}
Принцип такой -по датчику движения на 12 пин приходит "-" это включает освещение -11 пин , как только движения нет 11пин выкл и на 60 сек вкл 10пин -вытяжка. Проблема в том, что пока работает 11 пин- вытяжка , не видно сигнала от датчика движения 12пин , и если в это время зайти - то придется ждать 60 сек до конца цикла .Помогите как написать этот цикл , видимо надо добавить команду прерывания цикла...посоветуйте . Спасибо .
Не умный вопрос, а где у Вас тут цикл?
https://ru.wikipedia.org/wiki/%D0%A6%D0%B8%D0%BA%D0%BB_(%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5)
Не умный вопрос, а где у Вас тут цикл?
https://ru.wikipedia.org/wiki/%D0%A6%D0%B8%D0%BA%D0%BB_(%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5)
согласен , а что по существу ?
Ваша проблема - delay(60000); и от него придется избавляться.
Почитайте http://arduino.ru/tutorials/BlinkWithoutDelay , постарайтесь разобраться, как это работает.
Ваша проблема - delay(60000); и от него придется избавляться.
Почитайте http://arduino.ru/tutorials/BlinkWithoutDelay , постарайтесь разобраться, как это работает.
Спасибо , буду разбираться .
Спасибо , буду разбираться .
Зато как разберетесь - сразу попреееееет)))... Это одна из основных полезных штук!
Не умный вопрос, а где у Вас тут цикл?
https://ru.wikipedia.org/wiki/%D0%A6%D0%B8%D0%BA%D0%BB_(%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5)
согласен , а что по существу ?
А это и есть по существу, у Вас нет циклов в приведенном куске. Поэтому можно предполагать всё, что угодно.
Не нужна помощь? Без проблем.
Вот что получилось :
int FAN = 10; // пин вытяжка
int Light = 11; // пин свет
long OnTime = 20000; // время работы вытяжки , мс
int ledState = LOW;
int pinButton = 12; // пин, вход от датчика движения
int Flag = 0;
unsigned long previousMillis = 0;
void setup()
{
pinMode(FAN, OUTPUT);
pinMode(Light, OUTPUT);
digitalWrite(FAN, HIGH);
digitalWrite(Light, HIGH);
digitalWrite(pinButton, LOW );
}
void loop()
{
unsigned long currentMillis;
if (digitalRead (pinButton) == HIGH && (Flag == 0))
{
digitalWrite(FAN, HIGH);// выключаем вытяжку
digitalWrite(Light, LOW);//включаем свет
delay (2000);
Flag = 1;
} else {
digitalWrite(Light, HIGH);
Flag = 0;
}
if (digitalRead (pinButton) == LOW)
{
currentMillis = millis();
// проверяем сколько прошло времени,
// если больше заданного - выключаем
if (currentMillis - previousMillis >= OnTime)
{
ledState = LOW;
previousMillis = 0;
digitalWrite(FAN, HIGH);
}
}
// если кнопка не нажата и Flag=1
if (digitalRead (pinButton) == LOW && (Flag == 1))
{
previousMillis = currentMillis; // запоминаем время
ledState = HIGH;
digitalWrite(FAN, LOW);
}
}
все работает как надо , но может что то можно улучшить - что пососетуете ?
Люблю простые и понятные скетчи, респект.
Вместо digitalWrite(pinButton, LOW ); напишите лучше pinMode(pinButton,INPUT);
Люблю простые и понятные скетчи, респект.
Вместо digitalWrite(pinButton, LOW ); напишите лучше pinMode(pinButton,INPUT);
Спасибо , исправил ... вот еще вопрос у меня датчик движения(HC-SR501) инфракрасный , но это в описании , на самом деле надо периодически частями тела двигать, чтобы он не выключался . Вот я и думаю- может поставить HC-SR04 ультразвуковой, по диаганали и мониторить дистанцию -уменшилась-включение, увеличилась -выкл ... все проще чем долбаться с написанием программы под датчик движения, чтоб несколько раз опрашивал и только потом делал вывод- что никого нет ?
HC-SR501 на неподвижные объекты не реагирует, это датчик ДВИЖЕНИЯ. Так что все правильно, для определения наличия неподвижных объектов нужен ультразвуковой\инфракрасный дальномер, или что-то в этом роде.