Как полностью очистить все от 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);
        }
      }
    }
  }
}

Есть идеи? Спасибо за чтение.

, 👍1

Обсуждение

Вы могли бы просто сделать " setCursor(0,0);`, напечатать шестнадцать пробелов и повторить это для второй строки... Но я уверен, что есть лучший способ., @Python Schlange

Я недостаточно внимательно изучил ваш скетч. Но возможно ли, что экран действительно очищается с помощью " lcd.clear()`. "Игра окончена" видна менее 150 миллисекунд, а затем другой код в функции цикла снова перезаписывает ее с помощью стикмена. 150 мс-это очень короткое время. Не могли бы вы, пожалуйста, изменить "задержка(150)" после очистки, скажем, на " задержка(3000);". Чтобы убедиться, верна ли моя догадка?, @Peter Paul Kiefer

Вам нужно проводить различие между тем, кто активно играет в игру, и тем, что игра закончена. Вам действительно нужно реализовать *конечный автомат*., @Majenko

вы должны создать условие для записи объектов, если игра закончена, то не рисуйте объекты, иначе рисуйте объекты. или после того, как ваша игра закончится, создайте бесконечный цикл и нажмите кнопку для прерывания цикла., @Tanatorn Boonprasert