Змейка, arduino, hx1230

Тема в разделе "Arduino & Shields", создана пользователем maxS2004, 30 мар 2021.

  1. maxS2004

    maxS2004 Гик

    Друзья, решил тут запилить змейку на arduino, под рукой был дисплей hx1230 и джойстик, все подключил, принялся за скетч и тут проблема - не могу написать переходы змейки при поворотах, мучаюсь весь день - результаты практически никакие. Что делать? Куда смотреть? Сталкивался ли кто с подобной проблемой?
    Код (C++):
    #define vrx A0
    #define vry A1
    #include "lcd1202.h"

    LCD1202 lcd(9, 7, 6, 5);  // RST, CE, din, SCK

    byte h = 10;
    byte h2 = 5;
    int course = 0;
    int x = 25;
    int y = 25;

    int x2 = x + 5;
    int y2 = y;
    void setup() {

      Serial.begin(9600);
      pinMode(vrx, INPUT);
      pinMode(vry, INPUT);

      lcd.Inicialize();  //Инициализация дисплея
      lcd.Clear_LCD();  //Очистка дисплея

    }

    void loop() {
      if (analogRead(vrx) < 510) {
        course = 0;///000
      }
      else if (analogRead(vrx) > 520) {
        course = 1;///111
      }
      else {
        course = course;
      }

      if (analogRead(vry) < 500) {
        course = 2;///222
      }
      else if (analogRead(vry) > 520) {
        course = 3;///333
      }
      else {
        course = course;
      }


      dviz();





      //  Serial.println(course);
    }

    void dviz() {

      if (course == 0) {                                    //left
        x -= 1;
        // lcd.Clear_LCD();
        lcd.fillRect(x, y, 5, 5, 1);
        lcd.fillRect(x + h, y, 5, 5, 0);
        lcd.Update();
      }
      else if (course == 1) {                                //right
        x += 1;
        //  lcd.Clear_LCD();
        lcd.fillRect(x, y, 5, 5, 1);
        lcd.fillRect(x - h, y, 5, 5, 0);
        lcd.Update();
      }
      else if (course == 2) {                                   // top
        y -= 1;
        //lcd.Clear_LCD();
        lcd.fillRect(x, y, 5, 5, 1);
        lcd.fillRect(x, y + h, 5, 5, 0);
        lcd.Update();
      }
      else if (course == 3) {
        x2 = x + 5; // down
        y2 = y;
        while (x2 != x){
        lcd.fillRect(x2, y2, 5, 5, 0);
        lcd.fillRect(x, y, 5, 5, 1);
        lcd.Update();
       
        y += 1;
        x2 -= 1;
      }
      while (course == 3) {
        lcd.fillRect(x, y, 5, 5, 1);
        lcd.fillRect(x, y - h, 5, 5, 0);
        lcd.Update();
        y += 1;
      }
      }


    else {
      lcd.Clear_LCD();
      lcd.Update();
    }
    }
    й?
     
  2. parovoZZ

    parovoZZ Гуру

    С проблемой не знания? Да каждый день. Решается проблема построением математических алгоритмов. От простого к сложному. В данном случае, если необходимо голову змейки повернуть вверх-вниз, необходимо изменять занчение по оси ординат. Вправо - влево - ось абсцисс.

    Это по правилам какого языка?