Wild gunman как добавить фальстарт

Тема в разделе "Схемотехника, компоненты, модули", создана пользователем otis, 27 апр 2020.

  1. otis

    otis Гик

    Код (C++):
    // пин с пищалкой
    #define BUZZER_PIN   9
    // количество игроков-ковбоев
    #define PLAYER_COUNT 2
    // библиотека для работы I²C
    #include "Wire.h"
    // библиотека для работы со светодиодной матрицей
    #include "TroykaLedMatrix.h"
    // создаём объект matrix для работы с матрицей
    TroykaLedMatrix matrix;
    // вместо перечисления всех пинов по-одному, мы объявляем пару списков:
    // один с номерами пинов с кнопками, другой — со светодиодами
    int buttonPins[PLAYER_COUNT] = {A3, A0};
    int switchPin1 = A3 == 0;
    int switchPin2 = A0 == 0;
    int ledPins[PLAYER_COUNT] = {2, 4};
    const uint8_t IMAGE1[] { 0x5554545050404000,
      0x3f21212121212121,
      0x3f212d2121212121,
      0x3f212d212d212121,
      0x3f212d212d212d21,
      0x3f212d2d2d212121,
      0x3f212d2d2d2d2d2d,
      0x00040a1120408000,
      0x081c3e7f1c1c1c1c,
      0x0010307fff7f3010,
      0x1c1c1c1c7f3e1c08,
      0x00080cfefffe0c08,};

    const uint8_t IMAGE2[] {0x5554545050404000,
      0x3f21212121212121,
      0x3f212d2121212121,
      0x3f212d212d212121,
      0x3f212d212d212d21,
      0x3f212d2d2d212121,
      0x3f212d2d2d2d2d2d,
      0x00040a1120408000,
      0x081c3e7f1c1c1c1c,
      0x0010307fff7f3010,
      0x0010307fff7f3010,
      0x1c1c1c1c7f3e1c08,
      0x00080cfefffe0c08,};                        
    void setup()
    {
      // начало работы с матрицей
      matrix.begin();
      // очищаем матрицу
      matrix.clear();
      // устанавливаем шрифт
      matrix.selectFont(FONT_8X8_BASIC);
     
      pinMode(BUZZER_PIN, OUTPUT);
      for (int player = 0; player < PLAYER_COUNT; ++player) {
        // при помощи квадратных скобок получают значение в массиве
        // под указанным в них номером. Нумерация начинается с нуля
        pinMode(ledPins[player], OUTPUT);
        pinMode(buttonPins[player], INPUT_PULLUP);
      }
    }
    void loop()
    {
      // выводим поочерёдно слово «Amperka»
      matrix.drawSymbol('3');
      delay(1000);
      matrix.drawSymbol('2');
      delay(1000);
      matrix.drawSymbol('0');
      delay(1000);
      // очищаем матрицу
      matrix.clear();
      delay(1000);
      if(digitalRead(buttonPins) == HIGH) {matrix.drafSymbol(IMAGE1);
      matrixclear(IMAGE1);
    }
      // даём сигнал «пли!», выждав случайное время от 2 до 7 сек
      delay(random(2000, 7000));
      tone(BUZZER_PIN, 3000, 250); // 3 килогерца, 250 миллисекунд
      for (int player = 0; ; player = (player+1) % PLAYER_COUNT) {
        // если игрок номер «player» нажал кнопку...
        if (!digitalRead(buttonPins[player])) {
          // ...включаем его светодиод и сигнал победы на 1 сек
          digitalWrite(ledPins[player], HIGH);
          tone(BUZZER_PIN, 4000, 1000);
          delay(1000);
          digitalWrite(ledPins[player], LOW);
          // есть победитель! Выходим из цикла
          break;
        }
      }
    }
    Сделал для племянника эту игрушку. Для наглядности добавил отчет. Но "мелкий ХАКНУЛ игру" . Он зажимает кнопку. и после сигнала "Пли" автоматом выигрывает. Хочу добавит контроль состояния кнопок. если кнопка нажата то на экране стрелка показывает что кнопку нажали раньше. Как только отпустил кнопку перезапуск игры.
     
  2. Tomasina

    Tomasina Сушитель лампочек Модератор

    Это что? :eek:

    Код (C++):

      delay(random(2000, 7000));
      tone(BUZZER_PIN, 3000, 250); // 3 килогерца, 250 миллисекунд
      while((digitalRead(switchPin1) && (digitalRead(switchPin1)); //ждем пока не будут отпущены обе кнопки
      //while((!digitalRead(switchPin1) && (!digitalRead(switchPin1)); // или так. Надо проверить :)
      for (int player = 0; ; player = (player + 1) % PLAYER_COUNT)
      {
     
    Последнее редактирование: 27 апр 2020
  3. otis

    otis Гик

    Ну я хотел создать переменные и через переменную смотреть за состоянием порта. И через эти же переменные выводить стрелки на матрицу. ЕСЛИ переменная поменяла состояние (нажата кнопка) ТО ресуем картину.
     
  4. Tomasina

    Tomasina Сушитель лампочек Модератор

    Компилятор такое пропустит (синтаксис не нарушен), но результат будет не тот, что вы ожидаете.
     
  5. otis

    otis Гик

    Увы компилятор пишет что ему не нравиться в
    Код (C++):
    while((!digitalRead(switchPin1) && (!digitalRead(switchPin1));
    Пока читаем книжку.
     
  6. Не хватает скобок
     
  7. parovoZZ

    parovoZZ Гуру

    а смысл этой записи какой? Два раза проверять одно и тоже?
     
  8. Tomasina

    Tomasina Сушитель лампочек Модератор

    switchPin2 второе ;)
     
  9. otis

    otis Гик

    Код (C++):
      tone(BUZZER_PIN, 3000, 250); // 3 килогерца, 250 миллисекунд
    while((!digitalRead(switchPin1)) && ((!digitalRead(switchPin2));
    Если пишу в код строку while то компилятор ругается на строку tone -before '(' token
     
  10. Tomasina

    Tomasina Сушитель лампочек Модератор

    Код (C++):
    while((!digitalRead(switchPin1) && (!digitalRead(switchPin2)));
     
     
  11. otis

    otis Гик

    Код (C++):
      // даём сигнал «пли!», выждав случайное время от 2 до 7 сек
      delay(random(2000, 7000));
      tone(BUZZER_PIN, 3000, 250); // 3 килогерца, 250 миллисекунд
    while((!digitalRead(switchPin1) && (!digitalRead(switchPin2)));
    Все равно ругаемся на строку тонне " or type conversion before "(" token
     
  12. Tomasina

    Tomasina Сушитель лампочек Модератор

    Код (C++):
      while(!digitalRead(switchPin1) && !digitalRead(switchPin2));
     
    :rolleyes:
     
  13. otis

    otis Гик

    Тоже самое. Ошибка как постом выше
     
  14. Tomasina

    Tomasina Сушитель лампочек Модератор

    у меня компилируется.
     
  15. otis

    otis Гик

    Значить у меня где-то ошибка в другом месте. Будем искать.
     
  16. parovoZZ

    parovoZZ Гуру

    поставь уже нормальную IDE, а этот блокнот выкинь.
     
  17. otis

    otis Гик

    Код (C++):
    while(!digitalRead(switchPin1) && !digitalRead(switchPin2));
    Нашел ошибку . Исправил. (была лишняя скобка в LOOP) Код с компилировал но скетч вообще перестал работать. На ФБ для реле ПР200 это написал за 10 минут. А на сии второй день.
     
  18. otis

    otis Гик

    А что значить нормальная IDE?
     
  19. otis

    otis Гик

    Так и не понял как работает while. Как я понял из описания программа не пойдет дальше пока вырождение while не будет выполнено.
    А можно сделать так. Сделать две bool переменные с именами key1& key2. Состояние этих переменных равны состоянию клавиш(buttonPin). Если клавишу (buttonPin)нажали то выводим на экран "картинку". Если клавиша не нажать то ждём команду "пли".
     
  20. parovoZZ

    parovoZZ Гуру

    значит, ещё раз почитай учебник. Без этих основ в программировании делать нечего.
     
    Daniil нравится это.