Код (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; } } } Сделал для племянника эту игрушку. Для наглядности добавил отчет. Но "мелкий ХАКНУЛ игру" . Он зажимает кнопку. и после сигнала "Пли" автоматом выигрывает. Хочу добавит контроль состояния кнопок. если кнопка нажата то на экране стрелка показывает что кнопку нажали раньше. Как только отпустил кнопку перезапуск игры.
Это что? Код (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) {
Ну я хотел создать переменные и через переменную смотреть за состоянием порта. И через эти же переменные выводить стрелки на матрицу. ЕСЛИ переменная поменяла состояние (нажата кнопка) ТО ресуем картину.
Увы компилятор пишет что ему не нравиться в Код (C++): while((!digitalRead(switchPin1) && (!digitalRead(switchPin1)); Пока читаем книжку.
Код (C++): tone(BUZZER_PIN, 3000, 250); // 3 килогерца, 250 миллисекунд while((!digitalRead(switchPin1)) && ((!digitalRead(switchPin2)); Если пишу в код строку while то компилятор ругается на строку tone -before '(' token
Код (C++): // даём сигнал «пли!», выждав случайное время от 2 до 7 сек delay(random(2000, 7000)); tone(BUZZER_PIN, 3000, 250); // 3 килогерца, 250 миллисекунд while((!digitalRead(switchPin1) && (!digitalRead(switchPin2))); Все равно ругаемся на строку тонне " or type conversion before "(" token
Код (C++): while(!digitalRead(switchPin1) && !digitalRead(switchPin2)); Нашел ошибку . Исправил. (была лишняя скобка в LOOP) Код с компилировал но скетч вообще перестал работать. На ФБ для реле ПР200 это написал за 10 минут. А на сии второй день.
Так и не понял как работает while. Как я понял из описания программа не пойдет дальше пока вырождение while не будет выполнено. А можно сделать так. Сделать две bool переменные с именами key1& key2. Состояние этих переменных равны состоянию клавиш(buttonPin). Если клавишу (buttonPin)нажали то выводим на экран "картинку". Если клавиша не нажать то ждём команду "пли".