Уроки / Урок 7

Графика и анимация

Прыгающий мяч: фигуры, координаты и плавное движение.

Анимация — это быстрая смена кадров. Каждый кадр мы очищаем буфер, сдвигаем мяч и рисуем всё заново.

#include <U8g2lib.h>
#include <Wire.h>

// Встроенный экран 0.42": контроллер SSD1306, видимая область 72×40.
// Аргументы: поворот, вывод сброса (нет), SCL = GPIO6, SDA = GPIO5.
U8G2_SSD1306_72X40_ER_F_HW_I2C u8g2(U8G2_R0, U8X8_PIN_NONE, 6, 5);

const int R = 4;     // радиус мяча
int x = 20, y = 12;  // положение
int dx = 2, dy = 1;  // скорость

void setup() {
  u8g2.begin();
}

void loop() {
  x += dx;
  y += dy;
  if (x <= R + 1 || x >= 70 - R) dx = -dx;  // отскок от стенок
  if (y <= R + 1 || y >= 38 - R) dy = -dy;

  u8g2.clearBuffer();
  u8g2.drawFrame(0, 0, 72, 40);
  u8g2.drawDisc(x, y, R);
  u8g2.sendBuffer();
  delay(20);  // около 50 кадров в секунду
}

Полезные фигуры

  • drawPixel(x, y) — точка
  • drawLine(x1, y1, x2, y2) — линия
  • drawBox(x, y, w, h) / drawFrame(...) — залитый / пустой прямоугольник
  • drawDisc(x, y, r) / drawCircle(...) — круг / окружность
  • drawRBox(x, y, w, h, r) — прямоугольник со скруглёнными углами

Задание: добавьте второй мяч или сделайте так, чтобы при каждом отскоке мигал светодиод на GPIO8.