Микроконтролери и електроника
http://mcu-bg.com/mcu_site/

Логика за асансьор
http://mcu-bg.com/mcu_site/viewtopic.php?f=3&t=18591
Страница 1 от 1

Автор:  koko76bj [ Вто Ное 08, 2022 9:09 am ]
Заглавие:  Логика за асансьор

Здравейте
мъча се да направя една логика за асансьор,но не са ми достатъчни знанията и не се получава.И се обръщам към вас за помощ.Измислих това,но не е добре така
Код:
void loop(){
buttonState1 = digitalRead(buttonPin1);
buttonState2 = digitalRead(buttonPin2);
buttonState3 = digitalRead(buttonPin3);

if (buttonState1 != lastButtonState1 || buttonState2 != lastButtonState2 || buttonState3 != lastButtonState3) {
if(level1 == true){
if (buttonState1 == HIGH) {
level1 = true;
level2 = false;
level3 = false;
}
if (buttonState2 == HIGH) {
level1 = false;
level2 = true;
level3 = false;
}
if (buttonState3 == HIGH) {
level1 = false;
level2 = false;
level3 = true;
}
}
else if(level2 == true){
if (buttonState1 == HIGH) {
level1 = true;
level2 = false;
level3 = false;
}
if (buttonState2 == HIGH) {
level1 = false;
level2 = true;
level3 = false;
}
if (buttonState3 == HIGH) {
level1 = false;
level2 = false;
level3 = true;
}
}

else if(level3 == true){
if (buttonState1 == HIGH) {
level1 = true;
level2 = false;
level3 = false;
}
if (buttonState2 == HIGH) {
level1 = false;
level2 = true;
level3 = false;
}
if (buttonState3 == HIGH) {
level1 = false;
level2 = false;
level3 = true;
}
}

}

lastButtonState1 = buttonState1;
lastButtonState2 = buttonState2;
lastButtonState3 = buttonState3;
}


Дойде ми идеята да направя цикъл с for и да проверявам датчиците за дадените етажи,и така да се разбере къде се намира в момента асансьора и от там да се определя в каква посока да започне въртенето на електромотора.Но не ми стигат знанията как стане.Ще се проверява датчика на всеки от 3 етажа и ще има case за всеки етаж със следене датчик за дадения етаж.Поне така си мисля че е правилно,но не знам дали е правилно така и затова се обръщам към вас за помощ.

Автор:  ike [ Вто Ное 08, 2022 3:21 pm ]
Заглавие:  Re: Логика за асансьор

Това домашно ли е?

Автор:  ToHu [ Вто Ное 08, 2022 3:45 pm ]
Заглавие:  Re: Логика за асансьор

Всякак е правилно ако работи, стейт машина е класически подход, но ако целта е само да се определи посоката и положението то за това са достатъчно няколко променливи, натиснат бутон, текущ етаж, стар етаж ако натиснат бутон >текущ етаж въртиш нагоре, ако е <текущ етаж въртиш надолу. Реално и стар етаж не е нужен ако не реализираш допълнителна логика.

Автор:  tolstolob [ Сря Ное 09, 2022 12:46 pm ]
Заглавие:  Re: Логика за асансьор

Този асансьор няма да вози нищо живо, надявам се.

Автор:  koko76bj [ Сря Ное 09, 2022 2:41 pm ]
Заглавие:  Re: Логика за асансьор

tolstolob написа:
Този асансьор няма да вози нищо живо, надявам се.

Не няма
ToHu написа:
Всякак е правилно ако работи, стейт машина е класически подход, но ако целта е само да се определи посоката и положението то за това са достатъчно няколко променливи, натиснат бутон, текущ етаж, стар етаж ако натиснат бутон >текущ етаж въртиш нагоре, ако е <текущ етаж въртиш надолу. Реално и стар етаж не е нужен ако не реализираш допълнителна логика.

И аз така си мислех,но предположих дали няма някое друго решение.
Мерси за отговорите,ще видя какво ще стане.

Автор:  ig_ivanov [ Сря Ное 09, 2022 4:53 pm ]
Заглавие:  Re: Логика за асансьор

Не помагам много, ама за управление на асансьор с три етажа са достатъчни (освен бутоните по етажите и блокирането на вратите) 5 контактора и едно реле за време.

Автор:  ToHu [ Сря Ное 09, 2022 5:05 pm ]
Заглавие:  Re: Логика за асансьор

стейт машина е класика, но на първо място трябва да определиш кои са ти стейтовете. Не може етажа на който се намираш или бутона който си натиснал да е стейта, това са входни данни. Стейтовете при теб са Асансьира е в покой , Асансьора е в движение, т.е. това са установени състояния които описват цикъла на работа. Искам да кажа , че ако имплементираш стейт машина няма нужда да и,аш стейт за всеки етаж, то не само няма нижда а и е неправилно, стейтовете трябва да са по-фундаментални. В един реален асансьор имаш 10-на стейта, като в покой, движение, авариен стоп и т.н. Някои стейтове могат да се разбият на подстейтове примерно движение може да се раздели на тръгване, движение и спиране, защото много асансьори вече тръгват и спират с по-ниска скорост, това е пример, не казвам че има нужда да са отделни състояния.

Страница 1 от 1 Часовете са според зоната UTC + 2 часа [ DST ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/