|
0 / 0 / 0
Регистрация: 10.10.2019
Сообщений: 28
|
|||||||||||
Как максимально просто обойтись без delay? Не вовремя срабатывает одна функция02.03.2020, 19:35. Показов 4244. Ответов 53
Приветствую всех! Кратко опишу задачу, а затем проблему, которая возникает при попытке её реализации на Arduino. Я делаю макет лифта, а в данный момент привод дверей лифта.
Двери лифта работают по следующему сценарию: 1) Нажатие кнопки вызова 2) Открытие мотором (при помощи специальной отводки) замков на дверях кабины и этаже (замедленное вращение) 3) Открытие мотором самой двери на нормальной скорости (более быстрой чем при открытии замков), до тех пор пока дверь не наедет на концевик (при нажатии на который прекращается подача питания на мотор) 4) Ожидание двери открытой 5 секунд 5) Закрытие двери на нормальной скорости 6) Закрытие дверных замков (резкий рывок с более сильной подачей напряжения) и дожатие двери до концевика с последующим прекращением подачи питания на мотор 7) В случае попадания препятствия в дверной проём - открыть дверь И вот с пунктом №7 возникают проблемы. Я использую механические концевики, по нажатию на которые откоючается питание при открытии или закрытии двери. Функция фотореверса (обратного открытия двери при попадении в дверной проём препятствия) у меня реализована с помощью лазерного модуля, который светит на фоторезистор. Если луч попадает на фоторезистор - ничего не происходит. Если луч на него перестаёт попадать - выполнить открытие двери. Сначала всё работало, но после добавления в код разных скоростей вращения мотора (для плавного открытия и резкого закрытия дверных замков), прошивка перестала реагировать на пересечение лазерного луча. Методом проб выявил что это связано с функцией delay в строчке №46. Когда я убираю её, прошивка реагирует на пресечение лазерного луча. Приведу ниже свой код:
И ещё второй вопрос: как сделать так чтобы программа отсчитывала через сколько секунд после начала закрытия двери был пересечён лазерный луч с последующим открытием двери? Это нужно мне для того чтобы мотор дожал дверь до механического концевика большим усилием. Например дверь закрывается 2,4 сек. И допустим когда дверь уже на половину закрылась (т.е. прошло 1,2 сек) программа запомнила что прошло 1,2 сек и затем открывала дверь на нормальной скорости 1,2 сек (или любое другое время, которое пройдёт с момента начала закрытия двери до пересечение лазерного луча) и по прошествию этого времени подала на мотор большее напряжение для полноценного нажатие двери на механический концевик.
0
|
|||||||||||
| 02.03.2020, 19:35 | |
|
Ответы с готовыми решениями:
53
Функция abs и как обойтись без нее Аналог цикла FOR без delay() с millis() не срабатывает корректно Имеет ли значение функция eof, или можно обойтись без нее? |
|
518 / 410 / 188
Регистрация: 08.04.2013
Сообщений: 1,751
|
||||||
| 04.03.2020, 13:54 | ||||||
|
Разбираем код, комментарии
Правильное решение переключение системы в определенные состояния и анализ через switch case
0
|
||||||
|
Тутошний я
|
|
| 04.03.2020, 13:57 | |
|
Daminskii, delay это програмная задержка. пока она не закончится остальной код работать не будет.
но программу может прервать аппаратное прерывание. почему не повесить датчик лазера на INT?
0
|
|
|
518 / 410 / 188
Регистрация: 08.04.2013
Сообщений: 1,751
|
||||||
| 04.03.2020, 14:11 | ||||||
|
И не надо страшиться кода
0
|
||||||
|
0 / 0 / 0
Регистрация: 10.10.2019
Сообщений: 28
|
|||
| 04.03.2020, 14:18 [ТС] | |||
|
0
|
|||
|
518 / 410 / 188
Регистрация: 08.04.2013
Сообщений: 1,751
|
|
| 04.03.2020, 14:35 | |
|
Avazart, Язык программирования устройств Ардуино основан на C/C++, в коде ТС и моем пока вроде ничего нет только из с++ (классы, шаблоны) ТС в классах пока вроде и не разбирается
0
|
|
|
0 / 0 / 0
Регистрация: 10.10.2019
Сообщений: 28
|
||
| 04.03.2020, 14:39 [ТС] | ||
|
0
|
||
|
|
|||
| 04.03.2020, 14:44 | |||
|
Добавлено через 1 минуту
0
|
|||
|
0 / 0 / 0
Регистрация: 10.10.2019
Сообщений: 28
|
|||||||
| 04.03.2020, 14:45 [ТС] | |||||||
0
|
|||||||
|
518 / 410 / 188
Регистрация: 08.04.2013
Сообщений: 1,751
|
||||||
| 04.03.2020, 14:47 | ||||||
|
Daminskii,
вот 2 способа реализации одна в вашем стиле вторая с millis() которая сработает точно
1
|
||||||
|
0 / 0 / 0
Регистрация: 10.10.2019
Сообщений: 28
|
||
| 04.03.2020, 14:48 [ТС] | ||
|
0
|
||
|
518 / 410 / 188
Регистрация: 08.04.2013
Сообщений: 1,751
|
||
| 04.03.2020, 15:37 | ||
|
1
|
||
|
0 / 0 / 0
Регистрация: 10.10.2019
Сообщений: 28
|
|
| 04.03.2020, 15:38 [ТС] | |
|
0
|
|
|
518 / 410 / 188
Регистрация: 08.04.2013
Сообщений: 1,751
|
|
| 04.03.2020, 16:07 | |
|
посмотрите пост 14. Это функция, которую запускаем в соответствующем состоянии, т.е case е
0
|
|
|
483 / 275 / 57
Регистрация: 08.10.2015
Сообщений: 1,190
|
|||
| 04.03.2020, 16:58 | |||
|
Возможно, что вопрос глупый, сигнал при освещении датчика это LOW или у там инверсия и на выходе HIGH?
Вопрос в связи с
0
|
|||
|
0 / 0 / 0
Регистрация: 10.10.2019
Сообщений: 28
|
||
| 04.03.2020, 18:01 [ТС] | ||
|
0
|
||
| 04.03.2020, 18:01 | |
|
Помогаю со студенческими работами здесь
40
Кофемашина Miele CVA 645-2, не вовремя срабатывает дозатор Как максимально просто сохранить настройки программы в файл Как обойтись без x Как обойтись без x Как можно максимально просто и быстро реализовать команды в консоли? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Debian 13: Установка Lazarus QT5
ВитГо 09.05.2026
Эта инструкция моя компиляция инструкций volvo
https:/ / www. cyberforum. ru/ blogs/ 203668/ 10753. html
и его же старой инструкции по установке Lazarus с gtk2. . .
|
Нейросеть на алгоритме "эстафета хвоста" как перспектива.
Hrethgir 06.05.2026
На десерт, когда запущу сервер.
Статья тут https:/ / habr. com/ ru/ articles/ 1030914/ . Автор я сам, нейросеть только помогает в вопросах которые мне не известны - не знаю людей которые знали-бы. . .
|
Асинхронный приём данных из COM-порта
Argus19 01.05.2026
Асинхронный приём данных из COM-порта
Купил на aliexpress термопринтер QR701. Он оказался странным. Поключил к Arduino Nano. Был очень удивлён. Наотрез отказывается печатать русские буквы. Чтобы. . .
|
попытка написать игровой сервер на C++
pyirrlicht 29.04.2026
попытка написать игровой сервер на плюсах с открытым бесконечным миром.
возможно получится прикрутить интерпретатор питон для кастомизации игровой логики.
что есть на текущий момент:. . .
|
|
Контроль уникальности выбранного документа-основания при изменении реквизита
Maks 28.04.2026
Алгоритм из решения ниже разработан на примере нетипового документа "ЗаявкаНаРемонтСпецтехники", разработанного в КА2.
Задача: уведомлять пользователя, если указанная заявка (документ-основание). . .
|
Благородство как наказание
Maks 24.04.2026
У хорошего человека отношения с женщинами всегда складываются трудно. А я человек хороший. Заявляю без тени смущения, потому что гордиться тут нечем. От хорошего человека ждут соответствующего. . .
|
Валидация и контроль данных табличной части документа перед записью
Maks 22.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в КА2.
Задача: контроль и валидация данных табличной части документа перед записью с учетом регламента компании. . .
|
Отчёт о затраченных материалах за определенный период с макетом печатной формы
Maks 21.04.2026
Отчёт из решения ниже размещён в конфигурации КА2.
Задача: разработка отчёта по затраченным материалам за определённый период, с возможностью вывода печатной формы отчёта с шапкой и подвалом.
В. . .
|