Автор Тема: Три бутона и лед- помощ  (Прочетена 22514 пъти)

saint

  • Новодошъл
  • *****
  • Публикации: 8
    • Профил
Три бутона и лед- помощ
« -: Февруари 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 пъти натиснат бутон тогава леда гасне?)

благодаря ви



saint

  • Новодошъл
  • *****
  • Публикации: 8
    • Профил
Re: Три бутона и лед- помощ
« Отговор #1 -: Февруари 23, 2014, 01:04:56 pm »
Ако въведа променлива, която се променя от натискането на бутона, след това я нулирам със загасването на диода?

saint

  • Новодошъл
  • *****
  • Публикации: 8
    • Профил
Re: Три бутона и лед- помощ
« Отговор #2 -: Февруари 23, 2014, 09:19:25 pm »
Добре де, никой ли не иска да помогне?

Tsoni

  • Вече знае какво е робот!
  • *****
  • Публикации: 88
    • Профил
Re: Три бутона и лед- помощ
« Отговор #3 -: Февруари 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() {тук пишеш кода} и кажи какво става
Поздрави!
Цони Витков 17 г. МГ \"Гео Милев\" Плевен

bateAz

  • Зомбиран Роботостроител
  • *****
  • Публикации: 187
    • Профил
Re: Три бутона и лед- помощ
« Отговор #4 -: Февруари 24, 2014, 10:30:13 pm »
Tsоni, имаш от мен добър 4 1/2 за решението. Що толкова - ми щото все пак предлагаш някакво решение. А защо не е повече:
1. Показаното НЕ отговаря на условието ( приемаме, че то е коректно, ама аз се съмнявам ): "и остава загаснал, докато не се натиснат отново Б1 и Б2" При твоето решение ще остане загаснал само докато Б3 е натиснат. Липсва обработка на събитието "натискане". Т.е. налага се да помниш кога са били отпуснати, за да разбереш кога се натискат ОТНОВО двата бутона.
2. Въпреки, че ще работи коректно, не намирам идеята за loop за добра. Няма да навлизам в подробности, оставям на тебе тълкуването.
   А иначе ме кефиш, давай така!
Не може да не може

Венцислав Караджов, 61 год.

Tsoni

  • Вече знае какво е робот!
  • *****
  • Публикации: 88
    • Профил
Re: Три бутона и лед- помощ
« Отговор #5 -: Февруари 25, 2014, 01:40:11 pm »
Тук идеята в моето предложение е че светодиода запазва последното  си състояние и мисля че кода е напълно коректен.
Ако човека вече иска да свети само докато са задържани 1 и 2, то  вече е друга работа.
И какво за идеята за луупа - просто споменах, в случай че не знае.  :)
Цони Витков 17 г. МГ \"Гео Милев\" Плевен

saint

  • Новодошъл
  • *****
  • Публикации: 8
    • Профил
Re: Три бутона и лед- помощ
« Отговор #6 -: Февруари 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);  // светва светодиода(може да ти трябва съпротивление пред него)
        }
}

къде греша?

saint

  • Новодошъл
  • *****
  • Публикации: 8
    • Профил
Re: Три бутона и лед- помощ
« Отговор #7 -: Февруари 25, 2014, 03:17:08 pm »
butoni:21: error: function definition does not declare parameters

това изписва

Tsoni

  • Вече знае какво е робот!
  • *****
  • Публикации: 88
    • Профил
Re: Три бутона и лед- помощ
« Отговор #8 -: Февруари 25, 2014, 03:56:37 pm »
нямаш скоба на края на лууп-а
Цони Витков 17 г. МГ \"Гео Милев\" Плевен

saint

  • Новодошъл
  • *****
  • Публикации: 8
    • Профил
Re: Три бутона и лед- помощ
« Отговор #9 -: Февруари 25, 2014, 05:14:23 pm »
къде да я сложа ? сори за тъпотата ми

Tsoni

  • Вече знае какво е робот!
  • *****
  • Публикации: 88
    • Профил
Re: Три бутона и лед- помощ
« Отговор #10 -: Февруари 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);  // светва светодиода(може да ти трябва съпротивление пред него)
        }
}


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


Като сложиш курсора до някоя скоба, програмата ти маркира другата скоба, която затваря или отваря.Така че като сложиш горе на отварящата курсора ако не ти  маркира никоя скоба, то трябва да сложиш една :)
Цони Витков 17 г. МГ \"Гео Милев\" Плевен

saint

  • Новодошъл
  • *****
  • Публикации: 8
    • Профил
Re: Три бутона и лед- помощ
« Отговор #11 -: Февруари 25, 2014, 09:45:01 pm »
да, сега вече го разбрах...

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

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

обаче :

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

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


Tsoni

  • Вече знае какво е робот!
  • *****
  • Публикации: 88
    • Профил
Re: Три бутона и лед- помощ
« Отговор #12 -: Февруари 25, 2014, 10:05:31 pm »
Значи искаш докато 1 и2 са натиснати да свети, а ако и 3 се цъкне през това време да изгасне светодиода докато не се пуснат всички бутони и 1 и 2 се натиснат отново?
Цони Витков 17 г. МГ \"Гео Милев\" Плевен

saint

  • Новодошъл
  • *****
  • Публикации: 8
    • Профил
Re: Три бутона и лед- помощ
« Отговор #13 -: Февруари 25, 2014, 10:43:26 pm »
Да точно ;-)

Tsoni

  • Вече знае какво е робот!
  • *****
  • Публикации: 88
    • Профил
Re: Три бутона и лед- помощ
« Отговор #14 -: Февруари 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);}

Почти съм сигурен, че ще работи.Пробвай и кажи какво става.
« Последна редакция: Февруари 26, 2014, 06:02:34 pm от Tsoni »
Цони Витков 17 г. МГ \"Гео Милев\" Плевен