Електроника и Електротехника | Electronics and Electrical Engineering > Аналогово управление | Analog Control
Arduino за стрелки
Mixy:
--- Цитат на: mitko0888 link=topic=4987.msg110862#msg110862 date=1519721204 ---С едно бутонче да превключваш стрелката - може да стане, и кодът е точно за такова включване. Аз съм написъл че "на мен ми е сложно".
--- Край на цитат ---
Така е - всичко е въпрос на програмиране и удобство. Не е задължително бутоните да са "вързани" към положенията/посоките на стрелките (2 бутона за 2 положения), защото при тройна или английска стрелка ще има два мотора с 4 положения и съответно ще трябват 4 бутона, което води до усложнения по таблото и повече заети входове в контролера. 1 бутон върши чудесна работа като просто някъде в програмата (в променлива или масив) се помни текущото положение (в права или крива, условно 0 или 1) за съответната стрелка и всяко следващо натискане обръща мотора и съответно сменя стойността в променливата. За английска стрелка съответно положенията ще са 0, 1, 2 и 3. За всяко следващо положение ще се превключват два мотора и стойността на променливата ще се увеличава, а при достигане на положение 4 се прави преход към 0 и все сначале. Може дори да се ползват бутони не за стрелки, а за нагласяне на маршрути по съответните коловози. Примерно за 10 коловоза ще има 10 бутона и всяко натискане ще превключва съответните стрелки в съответните позиции. А при желание, може всичко да става и само с 1 бутон - всяко натискане редува маршрут за всеки следващ коловоз, но това вече е извратено, дори и за мен ;D
Тук естествено съм спестил, че трябва да се отчита и липсата на положение (моментът в който сервото върти и е "някъде по средата", както казва Митко), защото това води до усложнения при реденето на маршрути, а именно дали всички стрелки от маршрута да се превключват едновременно (повече стрелки => по-голяма консумация) или една след друга (повече стрелки => повече време за установяване) и как да бъде разпределено това в програмата със съответните проверки и прехващане на всички възможни грешки и изключения. Но както казах и в началото, всичко е въпрос на (правилно) програмиране и (търсено) удобство ;)
mitko0888:
Хубаво е, ако може, да има и малка прилика с действителността ;D
svetljjjo:
една идея ако искате от мен
щом ви трябват много пинове и много бутони може да пробвате това
ардуино има аналогови входове
аналоговите входове могат да четат стойност на напрежението от 0 до 5 волта като за тоя диапазон изарват стойност на променливата от 0 до 1024 .
Та идеята е следната последователно вързани съпротивления от + захранване към маса примерно 10 броя по 1ком
между всяко от тях единия край на бутона и другия край общ за всички бутони към пин 3 примерно
и с analogRead() се взима стойноста тя ще е разбична за всеки бутон но ще може да се натиска само по 1 едновремено
и като имаш стойност после с мойта любима
switch (var) {
case label1:
// statements
break;
case label2:
// statements
break;
default:
// statements
}
може и с
if (condition)
{
//statement(s)
}
ако ви е по любима. Това е само идея не съм го пробвал но съм пробвал потенциометър и ардуиното си чете както споменах по горе има го и като пример в самата програма за аналогови примери. А е твърде възможно и 20 съпротивления да се вържат по 470 ома и трябва да се види само дали при всяко натискане на един и същ бутон дава една и съща стойност ако има малки разлики
няма да е проблем да се направи диапазон с if
прпимерно нещо такова
--- Цитат ---int analogPin = 3;
int val = 0;
void setup()
{
Serial.begin(9600); // setup serial
}
void loop()
{
val = analogRead(analogPin); // read the input pin
Serial.println(val); // debug value
if (val>0 && val<10){ //код за задействане на серво }
if (val>10 && val<30){ //код за задействане на серво}
//и така нататък за всички бутони
}
}
}
--- Край на цитат ---
Най вероятно стойноста няма да е еднаква всеки път ще се различава в некъв малак диапазон щото това зависи от моментната стойност на напрежението все пак входа е доста чувствителен 1024 / 5 = 204,8 еденици на 1 волт се падат
mitko0888:
Като гледам най-сложната гърловина има 7 стрелки, които могат да се управляват с 10 бутона по "моя си" начин. 20 пина ще стигнат.
pavel75:
Искам да се похваля с напредъка.
Дали се вижда този клип?:
https://www.dropbox.com/s/9rrjgm746wd7b73/VIDEO0007.mp4?dl=0
Навигация
[0] Списък на темите
Премини на пълна версия