Почему сложный? по мне так вполне подходящий... 1) как-раз под кодевижен (коим ТС пользуется) - меньше проблем с открытием 2) проект весь в комплекте, и компилится - как ТС и просил 3) я явно указал, где искать КА... и как его можно применить плюс некоторые блоки (которые бы мешались) вынесены в отдельные файлы 4) вроде код неплохо комментирован... согласен, что акцент сделан не на этом (в основном тут я делил время чтобы и датчик работал, и интерфейс не заедал, и экран не мерцал - к этому я очень притязателен) но и тема КА, считаю, раскрыта достаточно (если будет надо - пусть сам делает более разветвленные чепочки).
_________________ Для тех, кто не учил магию мир полон физики Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
Ему меню сейчас как серпом по яйцам, нужно что-то легкое. На примере работы устройства, управления чем-либо. Лично я сейчас репу чешу, что выложить, либо коммерческие, либо сложные проекты...
_________________ Для тех, кто не учил магию мир полон физики Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
Я ждал вашего ответа. И недаром говорил. Скажите, что действительно вам нужно. Но, даже то, что вы просите, не так просто. Дребезг механических контактов учитываем? Что такое дребезг знаем? В программировании самое важное - это взаимодействие программных модулей. А автоматном программировании это краеугольный камень. Взаимодействие. Опрос входов, тем более, если есть дребезг. Дальше, как осуществляем взаимодействие? События, сообщения, флаги, переменные, переменные состояния других конечных автоматов. Следите за этим сообщением, я сюда буду добавлять. Кстати, проекты пишу в IAR. Адаптировать для других компиляторов сами будете. В AVR-Studio ублюдочная реализация работы с FLASH и EEPROM. А у меня активное использование таблиц и так далее, которые расположены во FLASH.
Пример. Для ознакомления. Из проекта электрокара. Двигатель. Стоп, разгон, работа, торможение. Спойлер
case PROC_DEVICE_WAIT_RUN: // Ожидание запуска. if (event) { switch (GetKeyCode ()) { case 1<<KEY_RIGHT: // Установка направления "Вправо". led_right_on (); // Включение светодиода "Вправо" direction = DIRECTION_RIGHT; break;
case 1<<KEY_LEFT: // Установка направления "Влево". led_left_on (); // Включение светодиода "Влево" direction = DIRECTION_LEFT; break;
default: return; }
Set_Proc_Motor_Acceleration_1 (); // то установка модуля мотора на режим разгона.
case PROC_DEVICE_RUN: if (event && GetKeyCode () == 0) // Если кнопка отжата. { Set_Proc_Motor_Braking (); // то установка модуля мотора на режим торможения и последующий стоп. _proc_device = PROC_DEVICE_WAIT_STOP; } break;
case PROC_DEVICE_WAIT_STOP: if (motor_mode == MOTOR_STOP) // Если модуль двигателя встал в режим стоп, то { _proc_device = PROC_DEVICE_WAIT_RUN; // Установка на ожидание включения. return; }
if (event) // Если нажата кнопка "Вправо или влево". { u08 a = DIRECTION_STOP;
switch (GetKeyCode ()) { case 1<<KEY_RIGHT: // Установка направления "Вправо". a = DIRECTION_RIGHT; break;
case 1<<KEY_LEFT: // Установка направления "Влево". a = DIRECTION_LEFT; break;
default: return; }
if (direction_last == a) { Set_Proc_Motor_Acceleration_2 (); // то установка модуля мотора на режим разгона. _proc_device = PROC_DEVICE_RUN; } } break; }
case PROC_STOP_SENSOR_NOT_CHANGE: if (a != stop_sensor_prev) { stop_sensor_prev = a; set_soft_timer (ST_PROC_STOP_SENSOR, 40, 0); _proc_stop_sensor = PROC_STOP_SENSOR_CHANGE; } break;
case PROC_STOP_SENSOR_CHANGE: if (handle_soft_timer (ST_PROC_STOP_SENSOR)) { if (a == stop_sensor_prev) { if (a) stop_sensor_buf = true; else stop_sensor_buf = false; }
Добавлено after 5 hours 31 minute 6 seconds: Пример с двумя датчиками. Алгоритм - Ждем нажатия кнопки Старт. Включается двигатель вперед. Когда доедет до датчика 2, реверс. Когда достигнет датчика 1, цикл начинается сначала. То есть ждем нажатия кнопки Старт. Проект написан в IAR, в папке файл для симуляции в AVR-Studio. Кнопка старт PB0. Датчик 1 PB1, Датчик 2 PB2. Двигатель вперед PD0, назад PD1.
Demiurg, пересобрал я ваш проект в winavr, вот видеоСпойлерне стал разбираться с wdt, закомментировал эти строки. По чему через DDRD идет управление двигателями или это какая-то особенность?
Я так полагаю что торможения тут нетСпойлер
Код:
case PROC_DEVICE_MOTOR_FORWARD: // if (Get_Sensors () & (1<<SENSOR_2_BIT)) if (Check_Sensor_2_On ()) { motor_forward_off (); motor_back_on (); _proc_device = PROC_DEVICE_MOTOR_BACK; } break;
Код:
motor_forward_off (); motor_back_on ();
не есть хорошо для двигателя, а если еще и с редуктором...Ну что я могу сказать: все обернуто в красивую оболочку, весь алгоритм в в функции proc_device(). Готовый проект, пример. Вот что и было нужно.
Разгон, торможение я дал вам в виде примера. Нет времени разбираться. Железа на руках нет. В протеусе не работаю.
Добавлено after 14 minutes 56 seconds: Дело не в обертках. Инкапсуляция, минимизация правки. Все определено в одном месте. Писанины много, но это окупается в дальнейшем.
Заголовок сообщения: Re: Помогите пожалуйста с кодом С#
Добавлено: Вт авг 04, 2020 00:51:05
Открыл глаза
Зарегистрирован: Вт сен 10, 2019 16:18:33 Сообщений: 64
Рейтинг сообщения:0
Ребят вопрос количестао case может быть безграничным?и использование одной переменной?а то возникают проблемы,пишу кейс уже 35 и условие не применяется,приходится второй раз дублировать кейс и тогда норм,но это вроде как ге правильно,в железе кстати не правильно работает,лживый протеус получается?
switch (_kbd_drv) { case KBD_DRV_INIT: kbd_drv_init (); break; case KBD_DRV_NOCHANGE: kbd_drv_nochange (); break; case KBD_DRV_CHANGE: kbd_drv_change (); break; case KBD_DRV_HOLD_REPEAT: kbd_drv_hold_repeat (); break; } } //==================
Способ 2. Индексный переход. Создается таблица с указателями на функции-обработчики состояний. Индексом служит переменная-состояние. Спойлер
Код:
_proc_device.h
//************************************************************************ //************************ Главный автомат ******************************* //************************************************************************
//================== STATE (PROC_DEVICE_INIT, proc_device_init) STATE (PROC_DEVICE_WEIGHT_MODE, proc_device_weight_mode) STATE (PROC_DEVICE_DOSER_IDLE_MODE, proc_device_doser_idle_mode) STATE (PROC_DEVICE_DOSER_MODE, proc_device_doser_mode) STATE (PROC_DEVICE_IDLE, proc_device_idle) STATE (PROC_DEVICE_EMERG_MODE, proc_device_emerg_mode) //==================
Demiurg, думаю и эту "технологию" можно освоить, вот видеоСпойлер для наглядности 5 секунд поставил на остановку двигателя, дым-насос в котельной еще дольше останавливается.
Заголовок сообщения: Re: Помогите пожалуйста с кодом С#
Добавлено: Ср авг 05, 2020 09:29:55
Открыл глаза
Зарегистрирован: Вт сен 10, 2019 16:18:33 Сообщений: 64
Рейтинг сообщения:0
Ребят тупенький вопрос от меня,как всегда,решил из кодвижена перейдти в авр студио,все таки он заточен под аврки и при переделке столкнулся с мелкими траблами,в кодвижене я пишу его диалектом: PORTC.0=1;PORTC.2=0;PORTC.3=0;PORTC.4=0; это я применяю как блокировку,требуемый в 1 другие пины в ноле,мало ли чего,как эта запись будет выглядеть на чистом си?побитовыми сдвигами или есть способы другие?покрасивше,в авр студио первый раз,на все мои дэфайны он ругается за что были удалены(((
Вообще погуглите. Столько раз это написано. А то еще объяснять про снятие/установку/переключение отдельных битов через чтение-модификацию-запись и логические операции в очередной раз - ну совсем букварь писать.
не уверен, что написал грамматически правильно, но КВАВР эти команды трактует именно так (без чтение->модификация->запись, а за одно действие, по крайней мере там, где это возможно)
_________________ Для тех, кто не учил магию мир полон физики Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения