Таймер для миксера
- Войдите на сайт для отправки комментариев
Пнд, 03/01/2022 - 22:55
Всех с наступившим Новым Годом!
Прошу помощи... В рамках "гаражной самопальщины" понадобилось сваять миксер. Работать будет так: Включается моторчик на 20 секунд, останавливается на 1 секунду, включается (вращаясь в другую сторону) на 20 секунд. И так по кругу. Останавливается вся эта пляска через пять минут. И стоит колом до перезапуска (откл/вкл питания). Точностей по выдержке времени никакой. Шим не нужен. Кнопки не нужны. Решил не наворачивать полну. DIN рейку таймеров, а начать осваивать ардуинку (как все нормальные люди). Соорудил вот такую великую программку:
Все это, ка ни странно (с учетом квалификации программиста) заработало. А вот с остановкой работы через 5 минут после старта, не задалось. Пробовал разные варианты таймеров. Сами по себе они работают, а остановить цикл не получается. Подскажите пожалуйста, как написать для этого код. Вот не догоняю...
Заранее благодарен.
без схемы обсуждать нечего, и да, код сейчас вас попросят вставить по правилам
http://arduino.ru/forum/obshchii/vstavka-programmnogo-koda-v-temukommentarii
Самое дубовое решение - добавить в нужном месте: if(millis() > 300000) while(1);
void setup() { pinMode(13, OUTPUT); pinMode(12, OUTPUT); } void loop() { digitalWrite(13, HIGH); // Запуск двигателя "Вперед" delay(20000); // Время работы вперед, 20 секунд digitalWrite(13, LOW); // Остановка двигателя delay(1000); // Пауза для выработки инерции механикой привода digitalWrite(12, HIGH); // Запуск двигателя "Назад" delay(20000); // Время работы назад, 20 секунд digitalWrite(12, LOW); // Остановка двигателя delay(1000); // Пауза для выработки инерции механикой привода }Исправился
Сами по себе они работают, а остановить цикл не получается. Подскажите пожалуйста, как написать для этого код.
#define STOP_T (5*60*1000) //5 минут void loop() { //ваш код сюда if (millis()>STOP_T) { while (1){} } }Сейчас попробую
я то подумал что у него это все останавливается через 5 минут, а оказывается это так надо сделать ))
Сами по себе они работают, а остановить цикл не получается. Подскажите пожалуйста, как написать для этого код.
#define STOP_T (5*60*1000) //5 минут void loop() { //ваш код сюда if (millis()>STOP_T) { while (1){} } }догадается что нет инициализации?
#define STOP_T (5*60*1000) //5 минут void setup() { pinMode(13, OUTPUT); pinMode(12, OUTPUT); } void loop() { digitalWrite(13, HIGH); // Запуск двигателя "Вперед" delay(20000); // Время работы вперед, 20 секунд digitalWrite(13, LOW); // Остановка двигателя delay(1000); // Пауза для выработки инерции механикой привода digitalWrite(12, HIGH); // Запуск двигателя "Назад" delay(20000); // Время работы назад, 20 секунд digitalWrite(12, LOW); // Остановка двигателя delay(1000); // Пауза для выработки инерции механикой привода if (millis()>STOP_T) { while (1){} } }А вот останавливаться не хочет.... Может все дело в том, что пробую не на железе, а на симуляторе, но ведь запускается....
догадался))
ну и как работает?
с учетом ваших делайев, это надо править
хотя если точность не важна, забей..
догадается что нет инициализации?
Инициализации чего? Переменных нету.
догадается что нет инициализации?
Инициализации чего? Переменных нету.
пинов, епта
с учетом ваших делайев, это надо править
Если миксер должен выключится через 5 минут после включения, то зачем править?
А вот это волшебное слово MILLIS я не должен в качестве переменной прописать?
догадается что нет инициализации?
Инициализации чего? Переменных нету.
пинов, епта
Так у ТС инициализация пинов с самого начала же была прописана.
А вот это волшебное слово MILLIS я не должен в качестве переменной прописать?
millis() это встроенная функция. http://arduino.ru/Reference/Millis
догадается что нет инициализации?
Инициализации чего? Переменных нету.
пинов, епта
Так у ТС инициализация пинов с самого начала же была прописана.
он оказался продвинутый ))) а то залил твой код с правкой только лооп и - не работает!
#define STOP_T (5*60*1000) //5 минут void setup() { pinMode(13, OUTPUT); pinMode(12, OUTPUT); } void loop() { digitalWrite(13, HIGH); // Запуск двигателя "Вперед" delay(20000); // Время работы вперед, 20 секунд digitalWrite(13, LOW); // Остановка двигателя delay(1000); // Пауза для выработки инерции механикой привода digitalWrite(12, HIGH); // Запуск двигателя "Назад" delay(20000); // Время работы назад, 20 секунд digitalWrite(12, LOW); // Остановка двигателя delay(1000); // Пауза для выработки инерции механикой привода if (millis()>STOP_T) { while (1){} } }А вот останавливаться не хочет.... Может все дело в том, что пробую не на железе, а на симуляторе, но ведь запускается....
ну вот
а 5 минут прошло?
Добавил к своему коду то, что посоветовали, это сюда и выложил
На опробование я изменил "время пробега" с 5*60*1000 на 1*60*1000
и что, как понимаешь что "не останавливается"?
На опробование я изменил "время пробега" с 5*60*1000 на 1*60*1000
Ну там, да, малость больше 5 минут будет крутить.
#define STOP_T (5*60*1000UL) //5 минут
Допишите UL
Если не хотите, чтобы пинали ногами, то код вставлять только так. Иначе, удем пинать.
Возьмите всё добро из функции lopp, и вставьте в setup семь раз. А loop оставьте пустым. Будет крутить 4 минуты 54 секунды и останавливаться. Вам же это надо?
Возьмите всё добро из функции lopp, и вставьте в setup семь раз. А loop оставьте пустым. Будет крутить 4 минуты 54 секунды и останавливаться.
Все гениальное - просто! ;)
Не вероятно! Заработало! Огромное спасибо! А что такое UL?
#define STOP_T (5*60*1000UL) //5 минут
Допишите UL
красава!!! я пропустил
Господа, всем огромное спасибо! Посмотрел, подумал... Наверное теперь озадачусь привязкой сюда ШИМ и сооответственно, ключей на полевиках. От полной дин рейки таймеров уйти и при этом оставить клацающие какие то там железяки, имея ардуино... Не Айс. Так что, надолго не прощаюсь... :)
Понял. Как то умножает по другому. Три часа ночи, вряд ли уже вникну, что и к чему...
надолго не прощаюсь... :)
И не надо.
Можно еще посмеяться. Не вижу Ваших сообщений, пока не выйду в корень форума, в свою тему..
F5 дави, это ж не чат тебе какой то.
Век живи, век учись и дураком помрешь.
да..., видно совсем зеленый, но смышленый))
на ночь зубрить до посинения
https://arduino-technology.ru/coding/language/datatype/
завтра скажешь на что можно заменить UL, в твоем случае))
Спасибо! Буду разбираться по мере поступивших задач.
Думаю, что на LONG
Думаю, что на LONG
Не угадал!
Вам же сказали
завтра скажешь
Думал так и сделать. Это моя первая, но не последняя самоделка на ардуино. По этому, буду пытаться делать хоть как то по человечьи :)
Думаю, что на LONG
Не угадал!
Вам же сказали
завтра скажешь
да ладно Евгений, угадал (почти), но завтра еще один вариант обязательно !! ))
int FRWD=12; int REV=13; int Start_Butt=11; byte counter=0; byte count=0; bool forvard=true; bool _Stop=false; unsigned int _timer; void setup() { pinMode(FRWD, OUTPUT); pinMode(REV, OUTPUT); pinMode(Start_Butt, INPUT_PULLUP); } void work() {count++; if(count>(_Stop?2:40)) {if(_Stop) {_Stop=false; digitalWrite((forvard?FRWD:REV),HIGH); forvard=!forvard; count=0; } else {counter++; digitalWrite(REV,LOW); digitalWrite(FRWD,LOW); _Stop=true; count=0; } } } void loop() { if (millis()-_timer>=500&&counter<=15) {_timer=millis(); work(); } if(counter>15&&!digitalRead(Start_Butt)) {counter=0; _Stop=false; forvard=false; } }эт че такое было, даже без "объяснений"???
эт че такое было, даже без "объяснений"???
Это было Crtl+C и Ctrl+V, логично же! А чепятать - не царское дело, пальчики еще устанут )))
Если не хотите, чтобы пинали ногами, то код вставлять только так. Иначе, удем пинать.
Возьмите всё добро из функции lopp, и вставьте в setup семь раз. А loop оставьте пустым. Будет крутить 4 минуты 54 секунды и останавливаться. Вам же это надо?
Не надо ничего вставлять 7 раз. Нужно добавить пустую функцию loop(), а функцию lopp() вызывать из setup в цикле 7 раз.
Добрейшего!
Перерыл туеву хучу всего, а кроме unsignet long ничего не нашел
вызывать из setup в цикле 7 раз.
Мне казалось, что семь раз нажать Ctrl+V легче, чем искать видосик с объяснением как это "вызывать в цикле". Может, и ошибаюсь.
Если бы на этом все и закончилось... :) Дурная голова рукам покоя не дает. Начал прилаживать туда всякие кнопочки, ШИМики и пр. украшательства. А если при этом "начальный вариант" кода получился покомпактнее, оно лучше.
Тогда 7 раз вызвать без цикла.
Если бы на этом все и закончилось... :) Дурная голова рукам покоя не дает. Начал прилаживать туда всякие кнопочки, ШИМики и пр. украшательства. А если при этом "начальный вариант" кода получился покомпактнее, оно лучше.
"всякие кнопочки, ШИМики и пр. украшательства" - это принципиально другая задача. добавить эти функции в программу не получится, нужно писать с нуля новую, без delay().
Доброго вечера!
Решил, ради спортивного интереса, запустить написанный Вами скетч. Сначала программа долго ругалась на всевозможные точки с запятой, скобки и пр. мелочь. Расставил, ругаться перестала. Но все равно, не работает. Оба светодиода горят и все тут. Может подскажите, в чем дело? Интересно же..