Определить, какая кнопка была нажата первой? - PullRequest
1 голос
/ 06 июня 2019

Я пытаюсь написать простую программу, которая определяет, какая из моих 2 кнопок была нажата первой. Хотя я думаю, что код написан правильно, вывод не соответствует ожиданиям.

Я использую простой массив целых чисел для записи «мест размещения», кнопки которых были нажаты первой и второй, как вы можете видеть ниже.

void setup() {
  Serial.begin(9600);
  pinMode(5, INPUT);
  pinMode(7, INPUT);
  pinMode(8, INPUT);
}

int location = 0;
int placement[2] = {99, 99}; 

bool pressed = false;

void loop() {

  if (digitalRead(5) == HIGH)
  {
    Serial.println("RESET BUTTON IS PRESSED");
    placement[0] = 99;
    placement[1] = 99;
    pressed = false;
    location = 0;
  }

  if (digitalRead(7) == HIGH)
  {
    if (placement[location] == 99)
    {
      placement[location] = 7;
      location++;
      pressed = true;
    }
  }

  if (digitalRead(8) == HIGH)
  {
    if (placement[location] == 99)
    {
      placement[location] = 8;
      location++;
      pressed = true;
    }
  }

  if (pressed == true)
  {
    String text = String(location) + ". place: button n. " +     String(placement[location]);
    Serial.println(text);
    pressed = false;
  }

}

То, что я ожидаю от программы после одновременного нажатия двух кнопок, представляет собой простой вывод в консоли:

  1. место = кнопка n. 8
  2. место = кнопка n. 7

Если нажата только одна кнопка, то я ожидаю, что в консоли будет напечатана только одна строка. Однако, даже если я нажму только одну кнопку, консоль напечатает 2 строки, например:

enter image description here

Кто-нибудь знает, что может быть причиной этого? Я впервые программирую таким «цикличным» способом, поэтому, если это какая-то ошибка новичка, мне очень жаль. Спасибо всем, кто отвечает и кто находит время, чтобы прочитать это, я действительно ценю это.

1 Ответ

0 голосов
/ 06 июня 2019

String(placement[location]) печатает после того, как вы уже увеличили местоположение на единицу.Таким образом, вы получаете placement[1] и placement[2] (что находится за пределами массива), поэтому отображаются 99 и 0.

...