Автоматизация открывания двери
- Войдите на сайт для отправки комментариев
Втр, 28/12/2021 - 13:56
Здравствуйте дорогие форумчане.
Хочу поделиться с Вами идеей автоматизацией для открывания двери.
Выкладываю алгоритм. Дополнение, изменения логики, написания кода только приветствуется!
/* Алгоритм. Входы: SB1 – концевик NO SB2 – концевик NO Start – кнопка NO встроенная в энкодер CS – сигнал датчика тока с G224В21А24v21 ENC – энкодер OLED - дисплей I2C Выходы: PWM - ШИМ сигнал для G224В21А24v21 LED - сигнальная светодиодная лампа DIR - сигнал высокого уровня для G224В21А24v21 ________________________________________________________ 1). ГЛАВНЫЙ ЦИКЛ. Если при подаче питания, концевик "SB1" - нормально замкнут, а "SB2" - нормально разомкнут, то переходим в РЕЖИМ ОТКРЫТИЯ. Если концевик " SB1" - нормально разомкнут, а "SB2" - нормально замкнут, то переходим в РЕЖИМ ЗАКРЫТИЯ. Если по какой-то причине не один концевик не замкнут, то на OLED дисплей выводим надпись "ОШИБКА! НАЖМИ КНОПКУ START". Если нажали и отпустили кнопку "Start", то переходим в "АВАРИЙНЫЙ РЕЖИМ, а при удержании кнопки "Start" более чем пяти секунд, то переходим в "СЕРВИСНОЕ МЕНЮ". 2). СЕРВИСНОЕ МЕНЮ. "sb1" – 1 или 0 (просмотр состояния). "sb2" – 1 или 0 (просмотр состояния). "CS" – 0…1023 (изменения значения уставки срабатывания датчика тока). "PWM_SPEED" – 0…10000мс (изменения время работы PWM за один старт). "SPEED_PWM1" – 0…1000мс (изменения скорости заполнения ШИМ от 0% до 20%). "SPEED_PWM2" – 0…10000мс (изменения скорости заполнения ШИМ от 20% до 100%). "SPEED_PWM3" – 0…1000мс (изменения скорости заполнения ШИМ от 100% до 20%). "DIR" – 1 или 0 (инверсия сигнала высокого уровня). 3). АВАРИЙНЫЙ РЕЖИМ. Отображаем на OLED дисплее "АВАРИЙНЫЙ РЕЖИМ". Опрашиваем кнопку "Start", и как только её нажали и отпустили, включаем только "SPEED_PWM1" и мигаем светодиодом "LED" с частотой 1с. Как только сработал "SB1", то отключаем "SPEED_PWM1", и "LED", а на OLED дисплей выводим надпись "ЗАКРЫТО". Если не сработал "SB1", или был превышен ток уставки "CS", или вышел лимит времени работы "PWM_SPEED", то отключаем "SPEED_PWM1", мигаем "LED" с частотой 0,5с., и на OLED дисплей выводим надпись "ОШИБКА ПРИВОДА". 4). РЕЖИМ ОТКРЫТИЯ. На OLED дисплей выводим надпись "ЗАКРЫТО" Если нажали и отпустили кнопку "Start", то на OLED дисплей выводим надпись "ВНИМАНИЕ ДВЕРИ ОТКРЫВАЮТСЯ", включаем сигнал высокого уровня "DIR", последовательно SPEED_PWM1, SPEED_PWM2, SPEED_PWM3 и мигаем "LED" с частотой 1с. Как только сработал "SB2", то отключаем "SPEED_PWM3", "LED", "DIR", и на OLED дисплей выводим надпись "ОТКРЫТО". Если не сработал "SB2", или было превышение тока уставки "CS", то отключаем "SPEED_PWM3", "LED", и переходим в "АВАРИЙНЫЙ РЕЖИМ". Если не сработал "SB2", и вышел лимит времени работы "PWM_SPEED", то отключаем "SPEED_PWM3", мигаем "LED" с частотой 0,5с., и на OLED дисплей выводим надпись "ОШИБКА ПРИВОДА". 5). РЕЖИМ ЗАКРЫТИЯ. На OLED дисплей выводим надпись "ОТКРЫТО". Если нажали и отпустили кнопку "Start", то на OLED дисплей выводим надпись "ВНИМАНИЕ ДВЕРИ ЗАКРЫВАЮТСЯ", включаем последовательно SPEED_PWM1, SPEED_PWM2, SPEED_PWM3, и мигаем "LED" с частотой 1с. Как только сработал "SB1", то отключаем "SPEED_PWM3", "LED", и на OLED дисплей выводим надпись "ЗАКРЫТО". Если не сработал "SB1", или было превышение тока уставки "CS", то отключаем "SPEED_PWM3", "LED", и переходим в "АВАРИЙНЫЙ РЕЖИМ". Если не сработал "SB1", и вышел лимит времени работы "PWM_SPEED", то отключаем "SPEED_PWM3", мигаем "LED" с частотой 0,5с., и на OLED дисплей выводим надпись "ОШИБКА ПРИВОДА". */
Офигеть. Прям мощно задвинул! Все двери твои!
Хочу поделиться
Спасибо
написания кода только приветствуется!
Не вопрос! Вы пишите, а я поприветствую!
Здравствуйте дорогие форумчане.
Хочу поделиться с Вами идеей автоматизацией для открывания двери.
Я бы тут такими идеями аккуратнее разбрасывался. Народ на форуме ушлый - украдут!
Жуть какая-то... Igoreck, алгоритм не бывает сам по себе, есть алгоритм решения какой-либо задачи. Поэтому прежде чем "выкладывать алгоритм" неплохо было бы сформулировать задачу, которую он должен будет решить. Сейчас задачи нет - обсуждать нечего. Как сказать, правильный алгоритм или нет, если не знать - что он делать-то должен?
Но всё-таки немного по тексту. Это не алгоритм. Ошибка типичная - вместо алгоритма у Вас то и дело лезет попытка его программной реализации, да и с терминологией беда. Ну что за "сработал SB1", "включаем только SPEED_PWM1"? Как понять, что здесь происходит? В алгоритме должны быть состояния двери (открыта, закрыта, приоткрыта), действия, которые устройство может совершить (открыть дверь, закрыть дверь), действия, которые может совершить человек (постучать, нажать кнопку) и т.д. Никаких переменных, пинов, шимов и прочего быть не должно.