помогите разобраться с таймером в программе
- Войдите на сайт для отправки комментариев
Чт, 15/10/2015 - 21:57
Кнопка, таймер, запускают последовательно функции. в конце тймер обнуляется и всё должно останавливаться. но вторая функция периодически запускается через каждые 10 сек. Почему и как остановить.
long previousMillis = 0; int val = 0; int state = 0; void loop(){ if(digitalRead(button1) == HIGH && state == 0) { state = 1; } if (state == 1) { tune(); } if (millis() - previousMillis >=1000) { previousMillis = millis(); val++; } if(val >= 10) { state = 2; val = 0; } if (state == 2) { fineTune(); } if (millis() - previousMillis >=1000) { previousMillis = millis(); val++; } if(val >= 10) { state = 0; val = 0; }
Если я правильно понял Вашу задачу, то попробуйте так:
Спасибо
Но не работает, я проверил, даже первая функция не запускается
В моём варианте всё запускается и останвливается после исполнения второй функции но через 10 сек
идёт запуск второй функции и это всё повторяется. Не могу остановить этот непроизвольный повтор.
Код начиная с 29й строчки по 37ю, а это у вас остановка, не будет выполняться потому что ему не дает код с 15 по 23 строк где val обнуляется и условие 34й строки выполнится не может
Всем спасибо
НО: в скэтче vvadim идёт запуск первой функции с помощью кнопки и всё, она не останавливается и не переходит во вторую.
В скэтче keefa идет запуск сразу второй функции даже без кнопки и тоже не останавливатся.
В моём скэтче кратковерменное нажатие на кнопку идёт запуск первой функции, через некоторое время автоматически запускается вторая функция и через время останов, ну и потом через 10 сек ложный старт исполнения вторй функции.
--------------------------------
Всем спасибо
НО: в скэтче vvadim идёт запуск первой функции с помощью кнопки и всё, она не останавливается и не переходит во вторую.
В скэтче keefa идет запуск сразу второй функции даже без кнопки и тоже не останавливатся.
В моём скэтче кратковерменное нажатие на кнопку идёт запуск первой функции, через некоторое время автоматически запускается вторая функция и через время останов, ну и потом через 10 сек ложный старт исполнения вторй функции.
--------------------------------
У меня есть подозрения, что у тебя кнопка шумит. Она у тебя подтянута к минусу через сопротивление? я обычно кнопками комутирую минус, а подтяжку организовываю внутренним сопротивлением в контроллере, что бы не навешивать дополнительные сопротивления. если у тебя вход контроллера висит в воздухе до нажатия кнопки, то на нем может быть что угодно, и 1 и ноль.... может из за этого непонятно как работает код?
вот про что я говорю. Два варианта подключения кнопок.
наружное сопротивление на землю, как положено. тут что-то не то с этими 10 сек. Я ппопытался убрать val = 0 в 24-25 строке, всё сбиватся и вторая функция не запускается. Может то , что там прописано два таймера и они в конфликте? Убирал в 37 строке val=0 estate=0. всё прекращает работать. Откуда-то лезет такт 10 сек
у меня UNO one. Первая схема 10к на землю
у меня UNO one. Первая схема 10к на землю
Без разницы.
что мой код, что vvadima, с плюсами минусами должны работать. ищите причину в остальном коде. либо выкладывайте полностью код, а не вырезку...
В моем коде в 13 строке поменяй
if
(val = 10) на
if
(val == 10)
Первая функция запускается один раз после нажатия кнопки, вторая - один раз через 10 секунд.
Попробуйте такой код:
Всем кто участвовал, большое спасибо, что удивительно, последний вариант от keefa и vosara работают. хотя прописаны немного по разному. К сожалению от Araris даже нет запуска первой функции. Ещё раз большое спасибо, буду теперь разбираться с логикой написания.