Skip to content

Commit

Permalink
Update README.md
Browse files Browse the repository at this point in the history
  • Loading branch information
Levitsky-Ilya authored Oct 12, 2019
1 parent 51941c4 commit 4081211
Showing 1 changed file with 51 additions and 11 deletions.
62 changes: 51 additions & 11 deletions labs/BMP to sprite conversion/README.md
Original file line number Diff line number Diff line change
@@ -1,19 +1,59 @@
## Задание 12 "i2c_oled_display"
## BMP to sprite conversion

### Подключение дисплея
### Мотивация

<p align="center">
<img width="600" src="https://github.com/edosedgar/stm32f0_ARM/wiki/oled.jpg" alt="oled.jpg"/>
<p align="center"> Рис. 1. Схема подключения дисплея <p align="center">
Когда появляется *черно-белый дисплей*, появляется множество идей как его можно использовать. Кто выводит серые *картинки*, скачанные или нарисованные самостоятельно, кто пишет удобный *интерфейс* для взаимодействия с МК, а кто создаёт *анимацию или игры*. В последнем случае различные создаются облики персонажей и объектов. И один из способ вывести такого персонажа на экран - нарисовать его по пикселям. Это способ достичь результат, но не самый быстрый и удобный способ.

### Инициализация I2C
Пользование дисплеем с помощью МК **воодушевляет** на создание проектов. Поэтому реализация любой графической задумки должна быть **быстрой и удобной**. Иначе интерес пропадает. Причём потраченные временные ресурсы должны сводится к минимуму, обьём написанного кода не должнен выливаться за пределы памяти МК, а исполнение по возможности быстрое. Предсталенный здесь *гибкий инструмент* **BMP to sprite conversion** пригодится для реализации всевозможных идей. Начиная от создания небольших обьектов, персонажей и заканчивая большими движущимися фонами, вроде пронасящегося мимо космического пространства.

### Инициализация SSD1306
### О программе

### Базовые функции
Инструмент **BMP to sprite conversion** позволяет перевести рисунок из файла типа BMP в С код и дальше на дисплей. Состоит интрумент из двух частей. Первая часть - программа для преобразования BMP файла в код. Вторая часть - функции для вывода риуснка на экран. Эти функции включены в библиотеку управления дисплеем `oled_display`.

### Игра «Жизнь» (Conway's Game of Life)
Правила, по которым работает преобразование, можно найти в мануале "BMP to sprite converter"

### Отрисовка черно-белых картинок
### Быстрый старт
1. Создайте картинку в формате BMP с *8 битной глубиной цвета*. Задайте имя картинке такое же, как имя самого спрайта. Нарисуйте небольшой пиксель-арт – *спрайт* – ту картинку, которую вы хотите вывести на экран. Картинка может быть трех «цветов»: белый, черный и прозрачный. Прозрачным будет считаться любой цвет кроме черного и белого. Сохраните картинку в отдельной папке, в которой больше нет других файлов.

### Дизеринг
2. Запустите bmp2arr программу, указав в качестве аргумента путь к папке. В результате получится файл формата С, в котором содержится вся информация о вашем спрайте. Вторым аргументом к программе можно (но не обязательно) указать желаемое имя для создаваемого С файла.
3. Поместите сгенерированный файл в папку с вашим проектом. Убедитесь, что в проекте вы также используете `oled_display.c` и `oled_display.h` *с поддержкой рисования спрайтов*.

4. Нарисуем созданный спрайт на экране. В начале создадим переменную типа Sprite. Затем проинициализируем ее именно теми данными, которые хранятся в сгенерированном ранее файле. Перед этим портируем соответствующую функцию инициализации из того файла (extern).
```C
#include “oled_display.h”
<…>
extern void init_dino_sprite(Sprite *sprite);
Sprite dino;
init_dino_sprite(&dino);
```
5. Используем функцию рисования спрайта draw_sprite. Укажем аргументы: переменную типа `Sprite`, номер костюма (пока 0), координаты `x` и `y` на экране, считая от верхнего левого угла экрана до верхнего левого угла исходной картинки BMP. Опции оставим 0.
```C
int16_t x = 10; int16_t y = 10;
draw_sprite(dino, 0, x, y, 0);
```

6. Запускаем и любуемся!
Это был краткий экскурс, как рисовать спрайты. Далее идут тонкости, описанные в мануале.

### Испытай себя

1. Нарисуйте динозаврика

2. Сделайте много одинаковых спрайтов, используя одну картинку.

3. Используйте костюмы: Сделайте экран загрузки или анимацию пламени.

4. Используйте отражения: Сделайте пакмана, перемещающего вправо-влево. Затем добавьте костюмов с движением вверх-вниз.

5. Добавьте фон, нарисованный своими руками.

6. Сделайте сразу несколько разных спрайтов - с костюмами или без.

7. Вашего персонажа не всегда видно на любом фоне? Используйте опции вроде `DRAW_BLACK_INVERT`.

8. Проверка на коллизию: пусть фон - лабиринт! Белый пакман коснулся белой стенки? - вернулся в начало.

9. Сделайте мини-игру, используя по полной новый функционал!

10. Функционала не хватает? Разберите весь код и улучшите/дополните его для себя! Если нововведение хорошо - оно может попасть в оригинальный код ;)

0 comments on commit 4081211

Please sign in to comment.