Всем здрасьте. Давно горю идеей создать что-то вроде имитации бомбы из cs для страйкбола. Между делом, туда вносится еще и возможность играть в захват и удержание точки. Все детали: мониторчик, клавиатура, большиые цветные кнопки - уже приехали. Остался вопрос непосредственно в написании кода. Нужно реализовать примерно такой алгоритм: На экране отображается меню выбора игры | \/ Нажатие на соответствующую кнопку на клавиатуре переводит в меню настройки игры | \/ Отображается список настроек | \/ Нажатие на соответствующую кнопку переводит в режим числового набора, дальше сохранение и возврат обратно в список настроек ^ | \/ Нажатие на соответствующую кнопку включает игру (например захват точки) | \/ Дальше сама игра, кто зажал и подержал свою кнопку, тот захватил точку, тому капают очки что отображаются на экране. Вопрос основной, наверное, в том, что обычное чередование функций тут не прокатит, надо и отсчитывать время и пищать и в то же время ожидать нажатия кнопок и реагировать на них. Вот такой вопрос, как можно реализовать нечто подобное?
Не совсем понял при чем тут бомба, но отсчитывать время, пищать и ждать нажатия кнопки одновременно можно легко.
Я просто не понимаю как это реализовать. Если отсчитывать секунды в цикле: {i++, показать на экране i} используя задержку, то как там правильно впихнуть ожидание нажатия какой-либо кнопки?
Задержку использовать нельзя. Нужно использовать таймер. Принцип такой: при запуске запоминается колво милисекунд и в лупе постоянно сравнивается с текущим колвом милисекунд, если разница больше или равна заданной, то срабатывает условие, выполняется функция и запоминается новое колво милисекунд для дальнейшего отсчета. И таких проверок столько, сколько нужно зависящих от времени действий. Между этим в лупе еще и опрашивается нажатие кнопки. В данном примере в программе три if: отсчет таймера, пищалка и нажатие кнопки. Можно кнопку и на прерывание повесить, в этом есть свои плюсы и минусы. пс: я в контру толком не играл, опишите как себя ведет бомба, сколько удерживать для захвата и прочее
Пример с таймером понял. А можно какой-нибудь мануал по его использованию? В кс бомба как бомба, набрал код, активировала, набрал код снова - деактивировалась, не разминировал - взорвалась через время. Я хочу сделать эдакое универсальное устройство с несколькими режимами игр, таких как та же бомба, где устройство будет себя вести как только что сказал; удержание точки, когда начисляются тем, кто держит активным эту точку, а если пришел враг и перехватил точку (в данном случае зажатие спец. кнопки), то очки начинают капать ему и т.д. При этом тут хочу сделать возможность настраивать игру: изменить время срабатывания бомбы, времени, необходимого на активацию точки, кол-во миллисекунд, через которое удерживающей команде начисляется очко и все такое. Кстати говоря, вот хороший пример:
Общая часть кода выглядит примерно так: Код (Text): #define LP1 9 #define LP2 8 #define LP3 10 #define BUTTON 12 // независимые таймеры событий unsigned long timer1; unsigned long timer2; // состояние светодиодов boolean lpSet1 = 0; boolean lpSet2 = 0; void setup() { pinMode(LP1, OUTPUT); pinMode(LP2, OUTPUT); pinMode(LP3, OUTPUT); pinMode(BUTTON, INPUT_PULLUP); // начало отсчета timer1 = millis(); timer2 = timer1; } void loop() { // каждые 500мс срабатывает эта часть кода if ((millis() - timer1) >= 500) { lpSet1 = !lpSet1; digitalWrite(LP1, lpSet1); timer1 = millis(); } // каждые 100мс эта часть if ((millis() - timer2) >= 100) { lpSet2 = !lpSet2; digitalWrite(LP2, lpSet2); timer2 = millis(); } // когда нажата кнопка срабатывает эта часть if (!digitalRead(BUTTON)){ digitalWrite(LP3, HIGH); } else { digitalWrite(LP3, LOW); } }