Как полностью очистить все от arduino и напечатать что-то новое?
Я в процессе создания игры stickman rush, пока не попаду в ошибку, на которой я застрял. Я хочу сделать заявление if, которое гласит: "Если крупье и объект находятся в одном и том же месте, очистите все и распечатайте"." Но когда я это делаю, объект все еще там. Я попытался использовать "lcd.clear ()", но это, кажется, ни на что не влияет. Есть ли другой способ исправить это?
Код:
#include <LiquidCrystal.h>
LiquidCrystal lcd(2, 3, 4, 5, 6, 7);
byte customChar[] = {
B01110,
B01110,
B01110,
B00100,
B01110,
B10101,
B00100,
B01010
};
byte gameObstical[] = {
B11111,
B11111,
B11111,
B11111,
B11111,
B11111,
B11111,
B11111
};
int vX = A0;
int vY = A1;
int sw = 8;
int xPosition = 0;
int yPosition = 0;
int SW_state = 0;
int mapX = 0;
int mapY = 0;
int screenWidth = 16;
int screenHeight = 2;
void setup() {
Serial.begin(9600);
pinMode(vX, INPUT);
pinMode(vY, INPUT);
pinMode(sw, INPUT_PULLUP);
lcd.begin(16, 2);
lcd.createChar(0, customChar);
lcd.home();
lcd.write(byte(0));
lcd.createChar(1, gameObstical);
}
void loop() {
int stickManPosition = 0;
int obsticalPosition = 0;
int stickManRow = 0;
int obsticalRow = 0;
int obsticalPosition2 = 0;
int obsticalRow2 = 0;
for (obsticalPosition = 15; obsticalPosition >= 0; obsticalPosition--) {
lcd.setCursor(obsticalPosition, obsticalRow);
lcd.write(byte(1));
lcd.print(" ");
delay(150);
xPosition = analogRead(vX);
yPosition = analogRead(vY);
SW_state = digitalRead(sw);
mapX = map(xPosition, 20, 1003, -500, 500);
Serial.println("-----------");
Serial.println(mapX);
Serial.println(SW_state);
Serial.println("-----------");
if (mapX > 200) {
lcd.clear();
lcd.setCursor(stickManPosition, stickManRow);
lcd.write(byte(0));
} else if (mapX < -200) {
stickManRow = 1;
lcd.clear();
lcd.setCursor(stickManPosition, stickManRow);
lcd.write(byte(0));
}
if (stickManPosition == obsticalPosition) {
if (stickManRow == obsticalRow) {
lcd.clear()
lcd.print("Game Over...");
delay(150);
}
if (obsticalPosition == 12) {
for (obsticalPosition2 = 11; obsticalPosition2 >= 0; obsticalPosition2--) {
obsticalRow2 = 1;
lcd.setCursor(obsticalPosition2, obsticalRow2);
lcd.write(byte(1));
lcd.print(" ");
delay(150);
}
}
}
}
}
Есть идеи? Спасибо за чтение.
@KoolKids, 👍1
Обсуждение0
Смотрите также:
- Как запрограммировать кнопку джойстика, чтобы сбросить все?
- Как устранить сообщение об ошибке "assignment of function 'void digitalWrite (uint8_t, uint_8)"?
- Получить массив символов с помощью модуля SIM900
- ЖКИ питается больше необходимого тока
- ЖК-дисплей с I2C не распознается esp32
- Нет функции сопоставления для вызова 'DS3231 (const uint8_t &, const uint8_t &)
- Считывание данных нескольких датчиков из текстового файла, расположенного на SD-карте в Arduino/ESP32
- Преобразовать байтовый текстовый файл в массив
Вы могли бы просто сделать " setCursor(0,0);`, напечатать шестнадцать пробелов и повторить это для второй строки... Но я уверен, что есть лучший способ., @Python Schlange
Я недостаточно внимательно изучил ваш скетч. Но возможно ли, что экран действительно очищается с помощью " lcd.clear()`. "Игра окончена" видна менее 150 миллисекунд, а затем другой код в функции цикла снова перезаписывает ее с помощью стикмена. 150 мс-это очень короткое время. Не могли бы вы, пожалуйста, изменить "задержка(150)" после очистки, скажем, на " задержка(3000);". Чтобы убедиться, верна ли моя догадка?, @Peter Paul Kiefer
Вам нужно проводить различие между тем, кто активно играет в игру, и тем, что игра закончена. Вам действительно нужно реализовать *конечный автомат*., @Majenko
вы должны создать условие для записи объектов, если игра закончена, то не рисуйте объекты, иначе рисуйте объекты. или после того, как ваша игра закончится, создайте бесконечный цикл и нажмите кнопку для прерывания цикла., @Tanatorn Boonprasert