Две кнопки и вывод в Serial

Тема в разделе "Arduino & Shields", создана пользователем Ars, 20 окт 2013.

  1. Ars

    Ars Нуб

    Есть код, залитый в ардуину - на каждое нажатие кнопки должен происходить один проход цикла for и в монитор порта должен выводиться номер нажатой кнопки.

    Код (Text):

    int btnPin1 = 12;
    int btnPin2 = 4;

    int state1 = 0;
    int state2 = 0;

    int getButton() {
      int val1 = digitalRead(btnPin1);
      int val2 = digitalRead(btnPin2);

      if (val1 == HIGH && state1 == 0) {
        state1 = 1;
        return 1;
        delay(50);
      }
      else {
        if (val1 == LOW && state1 == 1) {
          state1 = 0;
        }
      }

      if (val2 == HIGH && state2 == 0) {
        state2 = 1;
        return 2;
        delay(50);
      }
      else {
        if (val2 == LOW && state2 == 1) {
          state2 = 0;
        }
      }
    }

    void setup() {
      pinMode(btnPin1, INPUT);
      pinMode(btnPin1, INPUT);

      Serial.begin(9600);

      for (int i = 0; i < 10;) {

        int b = getButton();

        if (b == 1 || b == 2) {
          Serial.print("I= ");
          Serial.print(i);
          Serial.print(" ");
          Serial.println(b);
          i++;
        }
        else {
          i = i;
        }
      }
    }

    void loop() {
    }
     
    И вывод:
    Кнопка 1 (на каждое нажатие один вывод)
    I= 0 1
    I= 1 1
    I= 2 1
    Кнопка 2 (на первое же нажатие оставшаяся часть цикла, и почему то неверно)
    I= 3 2
    I= 4 1
    I= 5 1
    I= 6 1
    I= 7 1
    I= 8 1
    I= 9 1
     
    Последнее редактирование: 20 окт 2013
  2. Megakoteyka

    Megakoteyka Оракул Модератор

    А что должна вернуть функция getButton(), когда обе кнопки отпущены?
    В чем смысл куска "else { i = i; }"?
     
  3. Ars

    Ars Нуб

    Я с программированием пока не очень дружу, так что могу допускать абсолютно дурацкие ошибки.

    Функция должна что то вернуть и в этом случае?
     
  4. Ars

    Ars Нуб

    Разобрался сам. Тему можно закрыть