Millis + Button
- Войдите на сайт для отправки комментариев
Пт, 18/08/2017 - 16:34
Имеется код. Логика планировалась след: при нажатии и удержание кнопки через 5 сек загорается светодиод и горит пока не отпустить кнопку, если не нажимать или отпустить кнопку раньше 5 сек то светодиот гаснет\не горит. Загвоздка в точ что при удерживание кнопки,точнее при ее нажатии и послед удержание задержка может быть меньше запланированных 5 сек. подскажите где ощибка в коде.
Спасибо.
unsigned long timebutton1; //хранение времени нажатия кнопки const byte led1=9; //pin светодиод long interval01 = 5000; void setup(){ Serial.begin(9600); pinMode(led1,OUTPUT); //пин как выход pinMode(5,INPUT_PULLUP); // пин как вход } void loop(){ boolean button1 = !digitalRead(5); // при нажатие кнопки получаем 1 if (button1 == 1){ //кнопка нажата и удерживается Serial.print("timebutton1: ");Serial.println(button1); //смотрим состояние кнопки (1) timer01(); } else { digitalWrite(led1,0); // если не прошло 5 сек или кнопка отпушена не вкл светодиод Serial.print("timebutton1: ");Serial.println(button1); //смотрим состояние кнопки (0) } } void timer01() { if (millis() - timebutton1 >= interval01){ //еслим прошло 5 сек после нажатия и удержиния то timebutton1 = millis(); digitalWrite(led1,1); //вкл светодиод Serial.print("Светодиод горит: ");Serial.println("ON"); } }
Може быть меньше вплоть до 0.
Вы не хотите в момент нажатия кнопки запомнить время нажатия в timebutton1? Или Вы 5 сек не от момента нажатия, а от включения ардуины считаете?
нет мне именно нужно от нажатия кнопки считать время .
Ну так и делайте! Нажали кнопку - запоминайте время в переменной timebutton1!
Сейчас-то Вы этого не делаете, вот и считаете от включения ардуины.
Телерь светодиод загорается сразу по нажатию, а не через 5 сек как планировалось. что сделал не так ??? Если можно по конкретнее, а не прото ТЫ НУБ СДЕЛАЛ НЕ ПРАВИЛЬНО, СДЕЛАЙ ПРАВИЛЬНО !!!
Телерь светодиод загорается сразу по нажатию, а не через 5 сек как планировалось. что сделал не так ??? Если можно по конкретнее, а не прото ТЫ НУБ СДЕЛАЛ НЕ ПРАВИЛЬНО, СДЕЛАЙ ПРАВИЛЬНО !!!
Так у Вас опять 23-я строчка написана для красы. Поэтому, естественно, 24-я выполняется сразу.
Где волшебное слово if ?
Так у Вас опять 23-я строчка написана для красы. Поэтому, естественно, 24-я выполняется сразу.
Где волшебное слово if ?
видно и в правду Нуб, слона то и не заметил. Спасибо за помощь
А вот если бы была включена проверка на MISRA, вам бы сразу компилятор сделал предупреждение насчет строки 23.
А вот если бы была включена проверка на MISRA, вам бы сразу компилятор сделал предупреждение насчет строки 23.
Мне вот любопытно, а для чего вообще в Си разрешены такие конструкции? Может есть какое-то неочевидное применение? Сам я придумать не могу.
А вот если бы была включена проверка на MISRA, вам бы сразу компилятор сделал предупреждение насчет строки 23.
та, да - без МИСРА никак
Мне вот любопытно, а для чего вообще в Си разрешены такие конструкции? Может есть какое-то неочевидное применение? Сам я придумать не могу.
а, что криминального в конструкции?
А вот если бы была включена проверка на MISRA, вам бы сразу компилятор сделал предупреждение насчет строки 23.
Он бы и так сделал предупреждение, если бы не совпали два обстоятельства:
1. разработчики IDE выключили нахрен ВСЕ предупреждения, чтобы не пугать лоха-юзера
2. ТС подтвердил, что он лох и предупреждения не включил. А зачем? Меньше знаешь - крепче спишь.
а, что криминального в конструкции?
Я, честно признаюсь, в Си совсем не специалист. Так уж получилось, что мне Паскаль роднее. Вот там такая строчка вызовет ошибку. Не предупреждение - ошибку. А здесь нет.
Вот мне и интересно, это просто так уж вот описан синтаксис языка что эта запись ему не противоречит или подобный оператор всё-таки может нести какую-то полезную функцию?
так уж вот описан синтаксис языка что эта запись ему не противоречит или подобный оператор всё-таки может нести какую-то полезную функцию?
Конечно, может.
видно и в правду Нуб
Неужели, были сомнения? :)
Вот мне и интересно, это просто так уж вот описан синтаксис языка что эта запись ему не противоречит или подобный оператор всё-таки может нести какую-то полезную функцию?
Нормальный логический оператор. Можно поместить в условие if, можно сохранить результат в переменной, можно передать в функцию.
Скорее удивительно. что такая контрукция вызывает ошибку в Паскале...
Вот мне и интересно, это просто так уж вот описан синтаксис языка что эта запись ему не противоречит или подобный оператор всё-таки может нести какую-то полезную функцию?
ну, я же процитировал, что по этому поводу думает компиллятор - is not used
не запрещено писать код, который не используется
не запрещено писать код, который не используется
Ну я так и понял. Всем спасибо!
Неужели, были сомнения? :)
не на мгновение не сомневался )))