Електроника и Електротехника | Electronics and Electrical Engineering > Аналогово управление | Analog Control

Arduino за стрелки

<< < (20/38) > >>

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] Списък на темите

[#] Следваща страница

[*] Предходна страница

Премини на пълна версия