«Создание гаджетов на Arduino» Тема: Игра на Arduino «Охотник»
Домашнее задание: Игра на Arduino
Доработайте код программы, который написали на занятии.
Чтобы игра была динамичнее, добавьте условие, чтобы от переменной score каждый раз отнималась 1 единица. Добавьте
соответствующее условие в функцию playGame(). Пока score>0,
отнимайте от переменной единицу с каждым обходом цикла.
Добавьте пьезоэлемент и напишите такой код, чтобы после нажатия кнопки воспроизводилась мелодия победы или
проигрыша. Определенная мелодия должна воспроизводиться в зависимости от того, успел ли игрок нажать кнопку,
когда загорелся красный светодиод.
код в который надо добавить команды :
#include
#define LED_RED 0
#define LED_BLUE1 6
#define LED_BLUE2 7
#define LED_BLUE3 8
#define LED_BLUE4 9
#define LED_BLUE5 10
#define BUTTON_PIN 13
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
int myPins[] = {LED_RED, LED_BLUE1, LED_BLUE2,
LED_BLUE3, LED_BLUE4, LED_BLUE5};
int pin = 0; // random choose for turn on led
int millisec = 500;
int gameStatus = 0;
int score = 0;
int a = 1;
void setup() {
lcd.begin(16, 2);
pinMode(BUTTON_PIN, INPUT_PULLUP);
for (int i = 0; i < (sizeof(myPins) /
sizeof(myPins[0]));
i++) {
pinMode(myPins[i], OUTPUT);
digitalWrite(myPins[i], LOW);
}
}
void loop() {
switch (gameStatus) {
case 0:
playGame();
break;
case 1:
playerWin();
break;
case 2:
playerLose();
break;
}
}
void LCDstart() {
lcd.display();
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("SCORE:");
lcd.setCursor(7, 0);
lcd.print(score);
}
void playGame() {
LCDstart();
pin = random((sizeof(myPins) / sizeof(myPins[0])));
digitalWrite(myPins[pin], HIGH);
if (digitalRead(BUTTON_PIN)) {
if (myPins[pin] == LED_RED) {
gameStatus = 1;
}
else {
gameStatus = 2;
}
}
delay(millisec);
digitalWrite(myPins[pin], LOW);
}
void playerWin() {
gameStatus = 0;
score += 10000 % millisec;
if (millisec > 50) {
millisec -= 20;
}
for (int i = 1; i >= 0; i--) {
for (int j = 0; j < (sizeof(myPins) /
sizeof(myPins[0])); j++) {
digitalWrite(myPins[j], i);
}
delay(600);
}
}
void playerLose() {
gameStatus = 0;
score -= 1000 / millisec;
millisec += 10;
for (int i = 1; i >= 0; i--) {
for (int j = 1; j < (sizeof(myPins) /
sizeof(myPins[0])); j++) {
digitalWrite(myPins[j], i);
}
delay(600);
}
}
1. В начале кода вам необходимо добавить библиотеку гаджетов Arduino LiquidCrystal для работы с экраном LCD. Добавьте следующую строку перед началом блока setup():
```cpp
#include
```
2. Теперь мы добавим три новые константы, представляющие пины пьезоэлемента, для воспроизведения мелодии победы или проигрыша. Добавьте следующие строки после определения пинов LED:
```cpp
#define PIEZO_PIN 13
#define BUZZER_HIGH_FREQ 400
#define BUZZER_LOW_FREQ 200
```
3. Инициализируйте пьезоэлемент в блоке setup(). Добавьте следующие строки после инициализации экрана LCD:
```cpp
pinMode(PIEZO_PIN, OUTPUT);
digitalWrite(PIEZO_PIN, LOW);
```
4. В функции playGame() после цикла if (digitalRead(BUTTON_PIN)) добавьте следующие строки кода для воспроизведения мелодии победы или проигрыша:
```cpp
if (myPins[pin] == LED_RED) {
gameStatus = 1;
tone(PIEZO_PIN, BUZZER_HIGH_FREQ, 1000);
} else {
gameStatus = 2;
tone(PIEZO_PIN, BUZZER_LOW_FREQ, 1000);
}
```
5. В функции playerWin() добавьте условие, чтобы от переменной score каждый раз отнималась 1 единица. Добавьте следующую строку после определения переменной i во внутреннем цикле:
```cpp
if (score > 0) {
score--;
}
```
Итак, при выполнении домашнего задания вы должны получить следующий код:
```cpp
#include
#define LED_RED 0
#define LED_BLUE1 6
#define LED_BLUE2 7
#define LED_BLUE3 8
#define LED_BLUE4 9
#define LED_BLUE5 10
#define BUTTON_PIN 13
#define PIEZO_PIN 12
#define BUZZER_HIGH_FREQ 2000
#define BUZZER_LOW_FREQ 1000
LiquidCrystal lcd(4, 5, 11, 10, 9, 8);
int myPins[] = {LED_RED, LED_BLUE1, LED_BLUE2, LED_BLUE3, LED_BLUE4, LED_BLUE5};
int pin = 0;
int millisec = 500;
int gameStatus = 0;
int score = 0;
void setup() {
lcd.begin(16, 2);
pinMode(PIEZO_PIN, OUTPUT);
digitalWrite(PIEZO_PIN, LOW);
pinMode(BUTTON_PIN, INPUT_PULLUP);
for (int i = 0; i < (sizeof(myPins) / sizeof(myPins[0])); i++) {
pinMode(myPins[i], OUTPUT);
digitalWrite(myPins[i], LOW);
}
}
void loop() {
switch (gameStatus) {
case 0:
playGame();
break;
case 1:
playerWin();
break;
case 2:
playerLose();
break;
}
}
void LCDstart() {
lcd.display();
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("SCORE:");
lcd.setCursor(7, 0);
lcd.print(score);
}
void playGame() {
LCDstart();
pin = random((sizeof(myPins) / sizeof(myPins[0])));
digitalWrite(myPins[pin], HIGH);
if (digitalRead(BUTTON_PIN)) {
if (myPins[pin] == LED_RED) {
gameStatus = 1;
tone(PIEZO_PIN, BUZZER_HIGH_FREQ, 1000);
} else {
gameStatus = 2;
tone(PIEZO_PIN, BUZZER_LOW_FREQ, 1000);
}
}
delay(millisec);
digitalWrite(myPins[pin], LOW);
}
void playerWin() {
gameStatus = 0;
if (score > 0) {
score--;
}
if (millisec > 50) {
millisec -= 20;
}
for (int i = 1; i >= 0; i--) {
for (int j = 0; j < (sizeof(myPins) / sizeof(myPins[0])); j++) {
digitalWrite(myPins[j], i);
}
delay(600);
}
}
void playerLose() {
gameStatus = 0;
score -= 1000 / millisec;
millisec += 10;
for (int i = 1; i >= 0; i--) {
for (int j = 1; j < (sizeof(myPins) / sizeof(myPins[0])); j++) {
digitalWrite(myPins[j], i);
}
delay(600);
}
}
```
Надеюсь, это поможет вам решить задачу и лучше понять принципы программирования на Arduino. Если у вас возникнут дополнительные вопросы, не стесняйтесь задавать их. Удачи!
что это?прикол или как???