Здавствуйте В программировании я не соображаю особо) Но была поставлена задача реализовать управление сервоприводными шаровыми кранами(2 проводные) ардуиной Суть кода не буду объяснять, ну там и понятно в принципе... То что у меня не получилось сделать - таймер отключения сигнала через 5-6 сек.(в if, для того что бы кран не сгорел когда он заклинит по какой ни будь причине), автоматическое проворачивание крана время от времени для предотвращения его "закисания" Подскажите ка это сделать, может кто делал подобное, киньте пример Мое чудо:
Код:
const int kran = 3; const int bak = 4; int nasos = 13; int kran_open = 12; int kran_close = 11; int bak_open = 10; int bak_close = 9;
в ардуино есть функции, отвечающие за время millis(), например. при приходе команды сохраняем в переменную текущее время, а когда пройдет нужное время (когда millis станет больше нашей переменной на нужную величину) сбрасываем команду
_________________ Просто не учи физику в школе, и вся твоя жизнь будет наполнена чудесами и волшебством Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
Получилось сделать одноразовый таймер) с помощью millis() (т.е. нажал на кнопку светодиоды на время загорелись потом потухли, вроде норм но повторное нажатие не зажигает светодиоды вообще!) Не могу понять как его по человечески сделать... Может у кого есть пример подобного? Или если не сложно покажите на моем коде например на первом if-e
а ты переменную снова обновил при приходе следующего сигнала? переменную надо использовать, потому что в саму функцию millis() ничего записать нельзя (и обнулить тоже) поэтому и нужно задавать точку отсчета, а для нахождения прошедшего времени находить разность переменной и текущего времени.
Добавлено after 6 minutes 49 seconds: даже проще - вне IFов добав строчку : если (кран1= =выключен) {начало_работы_крана1=millis()}; а для проверки : время_работы_крана1=millis() - начало_работы_крана1; т.е. если((millis() - начало_работы_крана1)> задержка_крана1) {выключить_кран1}; для второго крана аналогично
_________________ Просто не учи физику в школе, и вся твоя жизнь будет наполнена чудесами и волшебством Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ очень важен контроль процесса заряда и разряда для избегания воздействия внешнего зарядного напряжения после достижения 100% заряда. Инженеры КОМПЭЛ подготовили список таких решений от разных производителей.
Когда все "кнопки" в LOW, светодиоды горят и не тухнут, в остальных случаях все работает как надо Собрал пока макет, вместо датчиков кнопки, вместо кранов и реле светодиоды
Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре.
Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.
с делаями - тупиковый путь (в данном случае) как и с задержками на циклах - на АйтиХаппенс вроде, попадалась история о том как по вине некачественной программы в МК, случился разом пожар, потоп и вакуумный взрыв, там по вине незавершившегося цикла контроллер прозевал закрытие заслонок и компрессор всосал сарайчик, в котором сам и находился. П.С.: выложи свой "одноразовый" - разберемся
Добавлено after 12 minutes 53 seconds: нашел историю, ошибся, там только вакуумный взрыв про потопо-пожар здесь
_________________ Просто не учи физику в школе, и вся твоя жизнь будет наполнена чудесами и волшебством Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
Заголовок сообщения: Re: Таймер отключения на Ардуино
Добавлено: Вс май 28, 2017 12:17:18
Модератор
Карма: 90
Рейтинг сообщений: 1289
Зарегистрирован: Чт мар 18, 2010 23:09:57 Сообщений: 4510 Откуда: Планета Земля
Рейтинг сообщения:1 Медали: 1
Что то вообще ничего не понятно из постов ТС'а, в чём проблема, что не так, с чем боремся, ... Первый пост о времени работы крана, второй - уже о каких-то неработающих условиях, в третьем - уже до кнопок со светодиодами добрались ... Каша какая то, а не вопросы
с делаями - тупиковый путь (в данном случае) как и с задержками на циклах - на АйтиХаппенс вроде, попадалась история о том как по вине некачественной программы в МК, случился разом пожар, потоп и вакуумный взрыв, там по вине незавершившегося цикла контроллер прозевал закрытие заслонок и компрессор всосал сарайчик, в котором сам и находился. П.С.: выложи свой "одноразовый" - разберемся
Добавлено after 12 minutes 53 seconds: нашел историю, ошибся, там только вакуумный взрыв про потопо-пожар здесь
как в том анекдоте про программиста не пришедшего на работу..
Вот, для примера на одну кнопку, работает так - нажал кнопку загорелся светодиод, должен через секунду потухнуть но не тухнет)))
А зачем вы 100500 раз таймер этот в time сохраняете ? Ну как то так например (активный уровень LOW) и для кнопки по хорошему нужен бы антидребезг.
int kranState, oldkranState;
kranState = digitalRead(kran);
if ((kranState == LOW) && (oldkranState == HIGH)) // если был выключен, а теперь должен быть включен (нажали кнопку) { digitalWrite(kran_open, LOW); // включаем time = millis(); // запоминаем момент включения oldkranState == LOW; // текущее состояние вкл }
if ((millis() > (time + timer)) && (oldkranState == LOW)) // таймер натикал с момента включения timer милиссекунд и текущее состояние вкл { digitalWrite(kran_open, HIGH); // выключаем oldkranState == HIGH; // текущее состояние выкл, можно снова включать }
обратите внимание, что таймер когда нибудь переполнится и в этот момент возможны всякие бяки
_________________ "Вся военная пропаганда, все крики, ложь и ненависть исходят от людей, которые на эту войну не пойдут !" / Джордж Оруэлл / "Война - это,когда за интересы других,гибнут совершенно безвинные люди." / Уинстон Черчилль /
если таймер одной размерности с хранящей точку старта переменной — бяки не будет точно (пока мы не соберемся отмерять промежутки, не влезающие в эту размерность).
_________________ Просто не учи физику в школе, и вся твоя жизнь будет наполнена чудесами и волшебством Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
void loop() { int kranState, oldkranState; kranState = digitalRead(kran);
if ((kranState == HIGH) && (oldkranState == LOW)) // если был выключен, а теперь должен быть включен (нажали кнопку) { digitalWrite(kran_open, HIGH); // включаем time = millis(); // запоминаем момент включения oldkranState == HIGH; // текущее состояние вкл }
if ((millis() > (time + timer)) && (oldkranState == HIGH)) // таймер натикал с момента включения timer милиссекунд и текущее состояние вкл { digitalWrite(kran_open, LOW); // выключаем oldkranState == LOW; // текущее состояние выкл, можно снова включать }
}
вклчаю кран он работает, жду 1 сек должен отключится но не отключается...
Заголовок сообщения: Re: Таймер отключения на Ардуино
Добавлено: Вс июн 04, 2017 10:34:08
Модератор
Карма: 90
Рейтинг сообщений: 1289
Зарегистрирован: Чт мар 18, 2010 23:09:57 Сообщений: 4510 Откуда: Планета Земля
Рейтинг сообщения:1 Медали: 1
Срочно читать книги по языку, на котором пишите ! Конкретно - переменные, их области видимости и время жизни. Обычно, эта тема в самом начале книг. Иначе так и будете методом тыка программы писать и по каждой мелочи бегать на форум.
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 30
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения