Форум по Роботика

Контролери => Ардуино (Arduino) => Темата е започната от: saint в Февруари 22, 2014, 11:42:42 pm

Титла: Три бутона и лед- помощ
Публикувано от: saint в Февруари 22, 2014, 11:42:42 pm
здравейте,
и аз нагазих яко с ардуино.
Започнах един проект- не комерсиален е :-)
БИхте ли ми помогнали за нещо , което ме побърка :

Три бутона Б1, Б2, Б3

задачката:

1.
- Ако Б1 и Б2 са натиснати - диода свети
- ако Б1, Б2 и Б3 са натиснати - диода гасне и остава загаснал, докато не се натиснат отново Б1 и Б2

2.
- Ако Б1 и Б2 са натиснати - диода свети
- ако Б1, Б2 и
натиснем Б3 три пъти  - диода гасне и остава загаснал, докато не се натиснат отново Б1 и Б2

Четох за идеята със статуси, може ли примерен код за да се понауча?
за 2. ще ми свърши ли работа?
или тогава трябва да вкарам стойност  (ако А= 3 пъти натиснат бутон тогава леда гасне?)

благодаря ви


Титла: Re: Три бутона и лед- помощ
Публикувано от: saint в Февруари 23, 2014, 01:04:56 pm
Ако въведа променлива, която се променя от натискането на бутона, след това я нулирам със загасването на диода?
Титла: Re: Три бутона и лед- помощ
Публикувано от: saint в Февруари 23, 2014, 09:19:25 pm
Добре де, никой ли не иска да помогне?
Титла: Re: Три бутона и лед- помощ
Публикувано от: Tsoni в Февруари 24, 2014, 09:26:13 pm
Здрасти.Тука малко бавно се получават отговори.Та: за идеята - можеш да ползваш променлива тип bool, която ще приема само true  и false.
Тъй бутоните си ги свързал предполагам правилно ето ти код за първата задача като приемем че като са натиснати идват 5 волта в пина и пиновете са съответно digital 1,2,3 :

if (digitalRead(1) == HIGH && digitalRead(2) == HIGH) // ако си натиснал двата бутона едновременно
{
   if (digitalRead(3) == HIGH) // проверява дали и 3тия е натиснат
      {
          digitalWrite(тук е пина на светодиода, LOW); // ако е натиснат и той заедно с тях гасне светодиода
      }
   else  // в противен случай(ако са натиснати само 1 и 2 без 3)
        {
           digitalWrite(тук е номера на пина на диода, HIGH);  // светва светодиода(може да ти трябва съпротивление пред него)
        }
}

Предполагам имаш setup() {} и loop() {}    (длъжен съм да спомена, в случай че не знаеш)
пробвай кода,който се слага в loop() {тук пишеш кода} и кажи какво става
Поздрави!
Титла: Re: Три бутона и лед- помощ
Публикувано от: bateAz в Февруари 24, 2014, 10:30:13 pm
Tsоni, имаш от мен добър 4 1/2 за решението. Що толкова - ми щото все пак предлагаш някакво решение. А защо не е повече:
1. Показаното НЕ отговаря на условието ( приемаме, че то е коректно, ама аз се съмнявам ): "и остава загаснал, докато не се натиснат отново Б1 и Б2" При твоето решение ще остане загаснал само докато Б3 е натиснат. Липсва обработка на събитието "натискане". Т.е. налага се да помниш кога са били отпуснати, за да разбереш кога се натискат ОТНОВО двата бутона.
2. Въпреки, че ще работи коректно, не намирам идеята за loop за добра. Няма да навлизам в подробности, оставям на тебе тълкуването.
   А иначе ме кефиш, давай така!
Титла: Re: Три бутона и лед- помощ
Публикувано от: Tsoni в Февруари 25, 2014, 01:40:11 pm
Тук идеята в моето предложение е че светодиода запазва последното  си състояние и мисля че кода е напълно коректен.
Ако човека вече иска да свети само докато са задържани 1 и 2, то  вече е друга работа.
И какво за идеята за луупа - просто споменах, в случай че не знае.  :)
Титла: Re: Три бутона и лед- помощ
Публикувано от: saint в Февруари 25, 2014, 03:14:19 pm
int ledPin = 12;            // pin za svetodioda
int BB1 = 2;    //SELEKTOR MAN
int BB2 = 3;   //SPUSUK
int BB3 = 4;     // BROIA4
int inPin4 = 5;
int inPin5 = 6;
int inPin6 = 7;
                                   // pin za otchitane na pokazaniyata ot butona
int val = 0;           // promenliva za pokazaniyata ot vhodniya pin

void setup() {
  pinMode(ledPin, OUTPUT);     // deklarira pina na svetodioda kato izhod
  pinMode(BB1, INPUT);
 pinMode(BB2, INPUT);
 pinMode(BB3, INPUT);
pinMode(inPin4, INPUT);
pinMode(inPin5, INPUT);
pinMode(inPin6, INPUT);    // deklarira pina na butona kato vhod
}

void loop(){
 if (digitalRead(BB1) == HIGH && digitalRead(BB2) == HIGH) // ако си натиснал двата бутона едновременно
{
   if (digitalRead(BB3) == HIGH) // проверява дали и 3тия е натиснат
      {
          digitalWrite(ledPin , LOW); // ако е натиснат и той заедно с тях гасне светодиода
      }
   else  // в противен случай(ако са натиснати само 1 и 2 без 3)
        {
           digitalWrite(ledPin, HIGH);  // светва светодиода(може да ти трябва съпротивление пред него)
        }
}

къде греша?
Титла: Re: Три бутона и лед- помощ
Публикувано от: saint в Февруари 25, 2014, 03:17:08 pm
butoni:21: error: function definition does not declare parameters

това изписва
Титла: Re: Три бутона и лед- помощ
Публикувано от: Tsoni в Февруари 25, 2014, 03:56:37 pm
нямаш скоба на края на лууп-а
Титла: Re: Три бутона и лед- помощ
Публикувано от: saint в Февруари 25, 2014, 05:14:23 pm
къде да я сложа ? сори за тъпотата ми
Титла: Re: Три бутона и лед- помощ
Публикувано от: Tsoni в Февруари 25, 2014, 07:04:36 pm
void loop() { // това е отварящата
 if (digitalRead(BB1) == HIGH && digitalRead(BB2) == HIGH) // ако си натиснал двата бутона едновременно
{
   if (digitalRead(BB3) == HIGH) // проверява дали и 3тия е натиснат
      {
          digitalWrite(ledPin , LOW); // ако е натиснат и той заедно с тях гасне светодиода
      }
   else  // в противен случай(ако са натиснати само 1 и 2 без 3)
        {
           digitalWrite(ledPin, HIGH);  // светва светодиода(може да ти трябва съпротивление пред него)
        }
}


} // ето тази скоба ти липсва тя затваря горе отварящата скоба на лууп-а


Като сложиш курсора до някоя скоба, програмата ти маркира другата скоба, която затваря или отваря.Така че като сложиш горе на отварящата курсора ако не ти  маркира никоя скоба, то трябва да сложиш една :)
Титла: Re: Три бутона и лед- помощ
Публикувано от: saint в Февруари 25, 2014, 09:45:01 pm
да, сега вече го разбрах...

с този код се случва:

при натискане на BB1 i BB2 диода светва.
при натискане на BB3 загасва..

обаче :

диода остава светнат , дори, когато пусна 1 и 2.
гасне само , ако е натиснат 3

задачката ми е да накарам диода да загасне , когато се натисне 3.
диода да не свети , ако 1 и 2 не са натиснати.....

Титла: Re: Три бутона и лед- помощ
Публикувано от: Tsoni в Февруари 25, 2014, 10:05:31 pm
Значи искаш докато 1 и2 са натиснати да свети, а ако и 3 се цъкне през това време да изгасне светодиода докато не се пуснат всички бутони и 1 и 2 се натиснат отново?
Титла: Re: Три бутона и лед- помощ
Публикувано от: saint в Февруари 25, 2014, 10:43:26 pm
Да точно ;-)
Титла: Re: Три бутона и лед- помощ
Публикувано от: Tsoni в Февруари 26, 2014, 11:12:27 am
Най - отгоре ще си обявиш една променлива   bool x = FALSE;


if (digitalRead(BB1) == HIGH && digitalRead(BB2) == HIGH)
{
   if (digitalRead(BB3) == HIGH && x == FALSE) {digitalWrite(ledPin, 0); x = TRUE;}
   else {  if ( x == FALSE) digitalWrite(ledPin, 1); }
}
else {x = FALSE; digitalWrite(ledPin, 0);}

Почти съм сигурен, че ще работи.Пробвай и кажи какво става.
Титла: Re: Три бутона и лед- помощ
Публикувано от: Tsoni в Март 26, 2014, 11:35:56 am
boolean ledstate = true;
boolean m = true;
//тук си обяви пиновете на бутоните

void setup()
{
//и тук си сложи pinMode за бутоните


}


void loop()
{


if (digitalRead(BB1) == HIGH && digitalRead(BB2) == HIGH)
{
   if (m == true) {m = false; ledstate = true; digitalWrite(ledPin, ledstate;}

   if (digitalRead(BB3) == HIGH && ledstate == true) {ledstate != ledstate; digitalWrite(ledpin, ledstate);}
}

else {ledstate = false; digitalWrite(ledPin, ledstate); m = true;}


}
Титла: Re: Три бутона и лед- помощ
Публикувано от: bateAz в Март 26, 2014, 06:17:02 pm
ledstate != ledstate;
що е туй ?
Титла: Re: Три бутона и лед- помощ
Публикувано от: Tsoni в Март 26, 2014, 07:47:00 pm
Сменя се(ако е било 1 става 0, ако е 0 става 1)
Иван да каже дали този код работи са идеята със светодиода, че да продължавам да пиша.