Тв приставка на ардуино

Как использовать плату Arduino для вывода какой-либо информации на ТВ? Оказывается есть такая библиотека TVOut ( статья на сайте >> ), которая позволяет выводить информацию на ТВ по НЧ-кабелю (тюльпан). Правда изображение будет черно-белым, однако этого будет достаточно для большинства проектов.

Вот игровая консоль, где используется данная библиотека

Создадим свою ТВ-приставку, состоящую из Arduino-платы и двухкоординатного джойстика и напишем простенькую игру.
Вот вид нашей приставки

Ознакомимся с возможностями библиотеки и напишем игру.
Страница библиотеки – http://code.google.com/p/arduino-tvout
Здесь можно скачать библиотеку и посмотреть описание функций.
Библиотека использует следующие выводы Arduino

Рассмотрим основные функции библиотеки.

Функции установки режима

Функция begin() инициализирует вывод видеосигнала (разрешение экрана по умолчанию 128×96)
Синтаксис:

  • mode – стандарт видеосигнала:
  • _PAL – режим PAL;
  • _NTSC – режим NTSC.
  • 0 – в случае удачного соединения, 4 – в случае неудачи (недостаточно памяти для буфера вывода).

Функции задержки

Функция delay() осуществляет задержку выведенного изображения.
Синтаксис:

  • ms – задержка в мс с точностью: 20 мс для PAL и 16 мс для NTSC.

Функция delay_frame() осуществляет задержку выведенного изображения.
Синтаксис:

  • frames – количество кадров для задержки..

Функция полезна для сведения к минимуму или устранения на мерцание экрана, вызванные обновлением экрана.

Функции получения параметров

Функция hres() возвращает горизонтальное разрешение экрана.
Синтаксис:

  • unsigned char – горизонтальное разрешение экрана.

Функция vres() возвращает вертикальное разрешение экрана.
Синтаксис:

  • unsigned char – вертикальное разрешение экрана.

Функция char_line() возвращает максимально возможное количество символов в одной строке при выводе текстовой информации.
Синтаксис:

  • unsigned char – количество символов.

Основные графические функции

Функция set_pixel() устанавливает цвет пикселя экрана в точке с заданными координатами.
Синтаксис:

  • x,y – координаты пикселя;
  • color – цвет пикселя:
  • 0 – черный;
  • 1 – белый;
  • 2 – инвертировать цвет.

Функция get_pixel() получает цвет пикселя экрана из точки с заданными координатами.
Синтаксис:

  • color – цвет пикселя:
  • 0 – черный;
  • 1 – белый;
  • 2 – инвертировать цвет.

Функция fill() заполняет экран заданным цветом.
Синтаксис:

  • color – цвет заполнения:
  • 0 – черный;
  • 1 – белый;
  • 2 – инвертировать цвет.

Функция clear_screen() очищает экран, заполняя заданным цветом.
Синтаксис:

  • color – цвет заполнения:
  • 0 – черный;
  • 1 – белый;
  • 2 – инвертировать цвет.

Функция invert() инвертирует содержимое экрана.
Синтаксис:

Функция shift_direction() сдвигает содержимое экрана.
Синтаксис:

  • distance – расстояние для сдвига содержимого экрана.
  • direction – направление сдвига:
  • UP=0 – вверх;
  • DOWN=1 – вниз;
  • LEFT=2 – влево;
  • RIGHT=3 – вправо.

Функция draw_line() соединяет на экране линией две точки.
Синтаксис:

  • x0,y0 – координаты первой точки;
  • x1,y1 – координаты второй точки;
  • color – цвет заполнения:
  • 0 – черный;
  • 1 – белый;
  • 2 – инвертировать цвет.

Функция draw_row() заполняет строку указанным цветом между двумя точками строки.
Синтаксис:

  • row – вертикальная координата строки;
  • x1,x2 – горизонтальный координаты точек строки;
  • color – цвет заполнения:
  • 0 – черный;
  • 1 – белый;
  • 2 – инвертировать цвет.

Функция draw_column() заполняет строку указанным цветом между двумя точками столбца.
Синтаксис:

  • column – горизонтальная координата столбца;
  • y1,y2 – вертикальные координаты точек столбца;
  • color – цвет заполнения:
  • 0 – черный;
  • 1 – белый;
  • 2 – инвертировать цвет.

Функция draw_rect() рисует на экране прямоугольник.
Синтаксис:

  • x,y – координаты левой верхней точки;
  • w,h – ширина и высота рисуемого прямоугольника;
  • color – цвет границ прямоугольника:
  • 0 – черный;
  • 1 – белый;
  • 2 – инвертировать цвет.
  • fillcolor – цвет заполнения прямоугольника:
  • 0 – черный;
  • 1 – белый;
  • 2 – инвертировать цвет.

Функция draw_circle() рисует на экране круг.
Синтаксис:

  • TVOut.draw_ circle(x,y,r,color);
  • TVOut.draw_ circle(x,y,r,color,fillcolor);
  • x,y – координаты центра круга;
  • r – радиус круга;
  • color – цвет границ круга:
  • 0 – черный;
  • 1 – белый;
  • 2 – инвертировать цвет.
  • fillcolor – цвет заполнения круга:
  • 0 – черный;
  • 1 – белый;
  • 2 – инвертировать цвет.

Функция bitmap() выводит на экран растровое изображение.
Синтаксис:

  • x,y – координаты левого верхнего угла точки вывода;
  • bmp – указатель на массив памяти, где хранится картинка;
  • w,h – ширина, высота выводимого изображения;

Ниже рассмотрим процесс создания кода выводимых растровых изображений.

Функции вывода текстовой информации

Для применения функций вывода текстовой информации требуетя подключение файлов с включенными в библиотеку или пользовательскими шрифтами. Для подключения пользовательского набора шрифтов необходимо в скетче подключить заголовочный файл:
#include
В состав библиотеки включены следующие наборы шрифтов:

Функция select_font() выбирает шрифт для вывода текстовой информации.
Синтаксис:

  • font – шрифт, подключенный в скетче.

Функция print_char() выводит символ на экран.
Синтаксис:

  • x,y – позиция на экране для вывода символа;
  • char – символ из текущего шрифта.

Функция set_cursor() устанавливает позицию курсора для вывода текстовой информации на экран.
Синтаксис:

  • x,y – координаты для курсора.

Функция print() выводит на экран строку, символ или число.
Синтаксис:

  • TVOut.print(x,y,string);
  • TVOut.print(x,y,char,base);
  • TVOut.print(x,y,int,base).
  • x,y – координаты курсора.
  • base – формат вывода:
  • BYTE = 0;
  • DEC = 10 (default);
  • HEX = 16.

Функция println() выводит на экран строку, символ или число и в конце символ перевода строки:
Синтаксис:

  • TVOut.println(x,y,string);
  • TVOut.println(x,y,char,base);
  • TVOut.println(x,y,int,base).
  • x,y – координаты курсора.
  • base – формат вывода:
  • BYTE = 0;
  • DEC = 10 (default);
  • HEX = 16.

Функции вывода аудио

Функции вывода звука позволяют отправлять на телевизор через аудиовыход сигнал определенной частоты.
Функция tone() выдает аудиосигнал определенной частоты.
Синтаксис:

  • frequency – частота аудиосигнала;
  • duration – длительность сигнала.

Функция noTone() прекращает выдачу аудиосигнала.
Синтаксис:

Создание собственных шрифтов

Рассмотрим процесс создания пользовательских шрифтов для библиотеки TVOut.

Библиотека позволяет создавать собственные шрифты.
Существуют два вида шрифтов – фиксированной и переменной ширины. Для шрифтов фиксированной ширины первые три байта массива содержат данные о ширине символа (4), высоте символа (6) и первый печатный символ (32) . Затем идут данные для каждого последующего символа.

Для шрифтов переменной ширины в описании каждого символа первый байт определяет ширину данного символа.

Создадим пользовательский шрифт myfont1. Для пользовательского шрифта myfont1 в папке TVOutfonts создаем 2 файла: myfont1.h и myfont1.cpp.
Вот содержимое файла myfont1.h

Теперь для использования библиотекой TVOut нашего пользовательского шрифта myfont1 в скетче необходимо подключить файл

Создание графических примитивов.

Читайте также:  Что хранится в микросхеме конфигурационной памяти компьютера

Библиотека TVOut позволяет загружать на экран растровые изображения. Рассмотрим создание кода для загрузки растрового изображения функцией bitmap() библиотеки TVOut.

Сначала необходимо создать 1 битное (двухцветное изображение), например в графическом редакторе Paint.

Затем нам понадобится программа Image2Code, которая сконвертирует из нашего изображения код. Программу можно скачать по адресу http://sourceforge.net/projects/image2code/files/. Это версия для операционной системы Windows. Скачиваем, запускаем.

Нажимаем на кнопку Convert и получаем массив.

Далее создаем 2 файла. Первый c расширением .h, например MyBitmap1.h.

Далее создаем файл MyBitmap1.cpp , в него (в поле данных массива unsigned char MyBitmap1[]) копируем данные конвертации, убирая символы "<" и ">", и вставляя в начале ширину и высоту изображения в пикселах.

Сохраняем файлы MyBitmap1.h и myBitmap.cpp в директории нашего скетча. Для вывода нашего изображения на экран телевизора вызываем функцию TVOut.bitmap():

C библиотекой ознакомились, собрана игровая консоль – теперь можно приступать к написанию игры.

Вступление

При свете дня, а затем и во сне, возникла у меня идея создания собственной регламентированной тв-приставки. Собственно, тут-то открылся передо мной богатый и насыщенный мир радиотехники. Так как ранее я не имел дела с серьезной разработкой электроники, мой выбор пал на более простой вариант — Arduino и ее самая распространенная модель — Uno.

1. Разобраться с библиотекой
2. Спаять плату видео вывода
3. Написать код
4. Вырезать корпус

Финальная внешняя составляющая не особо важна в случае с подобными проектами.

Шаг 1. Разбираемся, что к чему

После нескольких десятков минут отчаянного гугления пришел к выводу, что создать приставку даже типа Денди у меня не получится. Ну, что тут делать, раз взялся, буду доводить дело до конца.

На сайте, посвященному проектам на Ардуино и вообще радиоэлектронике в целом (не реклама) нашел статью о подобной затее. Было решено использовать библиотеку TVout, так как приставка тв-шная. Для ее установки и работы пришлось немного пошаманить.

Функции установки режима

Функция begin() инициализирует вывод видеосигнала (разрешение экрана по умолчанию 128×96).
Синтаксис:
TVOut.begin(mode);
TVOut.begin(mode, x, y);

Параметры:
mode – стандарт видеосигнала:
_PAL – режим PAL;
_NTSC – режим NTSC.
Возвращаемое значение:
0 – в случае удачного соединения, 4 – в случае неудачи (недостаточно памяти для буфера вывода).

Функции задержки

Функция delay() осуществляет задержку выведенного изображения.
Синтаксис:

ms – задержка в мс с точностью: 20 мс для PAL и 16 мс для NTSC.

Функция delay_frame() осуществляет задержку выведенного изображения.
Синтаксис:

frames – количество кадров для задержки…
Функция полезна для сведения к минимуму или устранения на мерцание экрана, вызванные обновлением экрана.

Функции получения параметров

Функция hres() возвращает горизонтальное разрешение экрана.
Синтаксис:

нет.
Возвращаемое значение:

unsigned char – горизонтальное разрешение экрана.

Функция vres() возвращает вертикальное разрешение экрана.
Синтаксис:

нет.
Возвращаемое значение:

unsigned char – вертикальное разрешение экрана.

Функция char_line() возвращает максимально возможное количество символов в одной строке при выводе текстовой информации.
Синтаксис:

TVOut. char_line();
Параметры:

нет.
Возвращаемое значение:

unsigned char – количество символов.

Основные графические функции

Функция set_pixel() устанавливает цвет пикселя экрана в точке с заданными координатами.
Синтаксис:

x,y – координаты пикселя;
color – цвет пикселя:
0 – черный;
1 – белый;
2 – инвертировать цвет.
Функция get_pixel() получает цвет пикселя экрана из точки с заданными координатами.
Синтаксис:

x,y – координаты пикселя.
Возвращаемое значение:

color – цвет пикселя:
0 – черный;
1 – белый;
2 – инвертировать цвет.
Функция fill() заполняет экран заданным цветом.
Синтаксис:

color – цвет заполнения:
0 – черный;
1 – белый;
2 – инвертировать цвет.
Функция clear_screen() очищает экран, заполняя заданным цветом.
Синтаксис:

color – цвет заполнения:
0 – черный;
1 – белый;
2 – инвертировать цвет.

Функция invert() инвертирует содержимое экрана.
Синтаксис:

нет.
Функция shift_direction() сдвигает содержимое экрана.
Синтаксис:

TVOut.shift_direction(distance, direction);
Параметры:

distance – расстояние для сдвига содержимого экрана.
direction – направление сдвига:
UP=0 – вверх;
DOWN=1 – вниз;
LEFT=2 – влево;
RIGHT=3 – вправо.

Функция draw_line() соединяет на экране линией две точки.
Синтаксис:

x0,y0 – координаты первой точки;
x1,y1 – координаты второй точки;
color – цвет заполнения:
0 – черный;
1 – белый;
2 – инвертировать цвет.
Функция draw_row() заполняет строку указанным цветом между двумя точками строки.
Синтаксис:

row – вертикальная координата строки;
x1,x2 – горизонтальный координаты точек строки;
color – цвет заполнения:
0 – черный;
1 – белый;
2 – инвертировать цвет.
Функция draw_column() заполняет строку указанным цветом между двумя точками столбца.
Синтаксис:

column – горизонтальная координата столбца;
y1,y2 – вертикальные координаты точек столбца;
color – цвет заполнения:
0 – черный;
1 – белый;
2 – инвертировать цвет.
Функция draw_rect() рисует на экране прямоугольник.
Синтаксис:

TVOut.draw_rect(x,y,w,h,color);
TVOut.draw_rect(x,y,w,h,color,fillcolor);

Параметры:

x,y – координаты левой верхней точки;
w,h – ширина и высота рисуемого прямоугольника;
color – цвет границ прямоугольника:
0 – черный;
1 – белый;
2 – инвертировать цвет.
fillcolor – цвет заполнения прямоугольника:
0 – черный;
1 – белый;
2 – инвертировать цвет.
Функция draw_circle() рисует на экране круг.
Синтаксис:

TVOut.draw_ circle(x,y,r,color);
TVOut.draw_ circle(x,y,r,color,fillcolor);

Параметры:

x,y – координаты центра круга;
r – радиус круга;
color – цвет границ круга:
0 – черный;
1 – белый;
2 – инвертировать цвет.
fillcolor – цвет заполнения круга:
0 – черный;
1 – белый;
2 – инвертировать цвет.
Функция bitmap() выводит на экран растровое изображение.
Синтаксис:

x,y – координаты левого верхнего угла точки вывода;
bmp – указатель на массив памяти, где хранится картинка;
w,h – ширина, высота выводимого изображения;
Ниже рассмотрим процесс создания кода выводимых растровых изображений.

Функции вывода текстовой информации

Для применения функций вывода текстовой информации требуетя подключение файлов с включенными в библиотеку или пользовательскими шрифтами. Для подключения пользовательского набора шрифтов необходимо в скетче подключить заголовочный файл:
#include
В состав библиотеки включены следующие наборы шрифтов:

font4x6;
font6x8;
font8x8;
font8x8ext.
Функция select_font() выбирает шрифт для вывода текстовой информации.
Синтаксис:

font – шрифт, подключенный в скетче.

Функция print_char() выводит символ на экран.
Синтаксис:

x,y – позиция на экране для вывода символа;
char – символ из текущего шрифта.

Функция set_cursor() устанавливает позицию курсора для вывода текстовой информации на экран.
Синтаксис:

x,y – координаты для курсора.
Функция print() выводит на экран строку, символ или число.
Синтаксис:

TVOut.print(x,y,string);
TVOut.print(x,y,char,base);
TVOut.print(x,y,int,base).

Параметры:

x,y – координаты курсора.
base – формат вывода:
BYTE = 0;
DEC = 10 (default);
HEX = 16.

Читайте также:  Смешные стихи про информатику

Функция println() выводит на экран строку, символ или число и в конце символ перевода строки:
Синтаксис:

TVOut.println(x,y,string);
TVOut.println(x,y,char,base);
TVOut.println(x,y,int,base).

Параметры:

x,y – координаты курсора.
base – формат вывода:
BYTE = 0;
DEC = 10 (default);
HEX = 16.

Функции вывода аудио

Функции вывода звука позволяют отправлять на телевизор через аудиовыход сигнал определенной частоты.
Функция tone() выдает аудиосигнал определенной частоты.
Синтаксис:

TVOut.tone(frequency,duration);
TVOut.tone(frequency).

Параметры:

frequency – частота аудиосигнала;
duration – длительность сигнала.
Функция noTone() прекращает выдачу аудиосигнала.
Синтаксис:

Шаг 2. Паяем видеовывод

В первую очередь нам нужно спаять некую плату для вывода видеосигнала через композитный av-выход (RCA). Паяем по следующей схеме:

Расположим два резистора номиналом 470 ом и 1к ом параллельно друг другу и припаяем к ним «плюс» от кабеля-тюльпана. Далее отведем от резистора в 470 ом провод в седьмой пин на Arduino, т.к. он отвечает за вывод видео (video), а от резистора в 1к ом отведем провод в девятый пин, так как он отвечает за синхронизацию (sync). А «минус» от кабеля-тюльпана в «землю» на Arduino. Подробнее тут (англ.)

Шаг 3. Пишем код (игру)

Я не буду объяснять, что да как подключать, ведь необходимую информацию, как всегда, можно найти в интернете. Я описываю то, что очень сложно найти или этого вообще нет.

Начинаем с экрана приветствия, куда без него. Но тут встревает важный вопрос, как назвать сие чудо? Я пораскинул мозгами и придумал — Shimo. Звучит неплохо, даже технологично, по-китайски, конечно, но это не беда.

Дальше вернемся к самой игре. И снова сложный вопрос: какую игру делать? Так как я рукожоп не очень старательный и усердный человек, а также новичок, решил написать Пинг-понг.

Начинаем. Чертим линию через середину экрана с помощью TV.draw_line(60,0,60,96,1);. Появляется шарик ровно в центре экрана. Напишем функцию его движения void ballmove(int vel, int angle). Устанавливаем с помощью TV.set_pixel(x,y,1);, переменные я так и назвал.

Далее перед манипуляциями с шариком прописываем обновление экрана, а точнее, чтобы шарик не «наследил» на экране, поэтому при переходе на следующую позицию нужно закрашивать черным предыдущую. Для этого нам нужно прописать перед всем остальным TV.set_pixel(x,y,0);. После всех изменений переменных координат нужно прописать уже установку позиции и небольшую задержку — TV.delay(50);. Примерно вот так должно получиться:

Теперь о самих изменениях координат. Всего восемь направлений (1-8), переменная int angle. А там уже просто, в зависимости от поворота, отнимаем или прибавляем к переменным какую-либо часть от int velocity. Я сделал так:

Теперь движения ракеток. Здесь важное уточнение — я использовал только координаты по y, так как позиции ракеток по x не изменяются. Прописываем следующую функцию void racketsmove(). Далее рисуем ракетки, переменные int yb1, int yb2, TV.draw_line(10, yb1+8, 10, yb1-8, 1); и TV.draw_line(110, yb2+8, 110, yb2-8, 1);. Обновление экрана, то есть «без следа», аналогично случаю с шариком.

Управление ракетками производится с кнопок. Подключаем кнопки, пины 2 и 3 — первая ракетка, 4 и 5 — вторая ракетка. Проверяем нажатие кнопок и изменяем координаты.

Вот такая функция:

Сейчас снова вернемся к ball. Теперь пропишем его коллизию и отталкивание от стен и ракеток. Функция — void ballcol(). Для этого просто проверяем его местонахождение относительно объектов, а потом и его угол. Затем этот угол изменяем на другой. С углом легко угадать.

Угол отражения равен углу падения

Можно сделать некоторые физические исключения для определенных зон ракеток.

Самое сложное позади, можете успешно вздохнуть.

На данный момент нам остается только сделать систему подсчета баллов, таймер и рестарт.

Начнем с таймера. Есть переменная секунд float ts (в ней хранится абсолютно все время), переменная int tm (количество минут, которые мы получаем из ts). Задаем значение tm операцией tm = ts/60;. И выводим значения на экран, TV.print(81,1,tm); TV.print(97,1,"."); TV.print(100,1,int(ts-(tm*60)));.

Продолжим. Функция рестарта, называем void restart(). Здесь мы возвращаем изначальные значения переменных.

Финал, система подсчета баллов, она чересчур проста. Открываем гугл и вбиваем «Правила игры в настольные теннис». Ищем, за что очки даются. Находим часть про штрафы, а дальше мы успешно находим следующее: «Очко считается выигранным, если противник не успеет отразить правильно посланный ему мяч после первого отскока». Назревает вопрос, как отсчитывать удары и прочее. А удары и не нужно отсчитывать, ведь наш пинг-понг с двухмерной графикой.

Мы спокойно находим выход из положения и, как всегда, просто проверяем координаты относительно боковых стенок. Если происходит столкновение, то начисляем балл игроку на противоположной стороне поля. Функция — void ballscount(). Когда выйдет таймер — мы сравниваем баллы первого игрока (переменная int c1) и второго игрока (переменная int c2), объявляем победителя, делаем задержку и вызываем рестарт.

Вот и все, друзья, мы полностью написали код игры. Получилось довольно забавно и можно поиграть.

Для ленивых я просто напишу весь код.

Всего 218 строк.

Шаг 4. Вырезаем корпус

Решил вырезать корпус на лазерном резаке (или фрезеровщике, я точно не знаю) из фанеры в 4mm. Нарисовал в InkScape, немного пошаманил и перевел в формат фрезеровщика.

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

Вывод

В процессе работы была создана простая игровая телевизионная игровая приставка на Arduino со стандартной игрой Ping Pong, с двумя геймпадами, в которую мы можем поиграть и даже залипать.

Как использовать плату Arduino для вывода какой-либо информации на ТВ? Оказывается есть такая библиотека TVOut ( статья на сайте >> ), которая позволяет выводить информацию на ТВ по НЧ-кабелю (тюльпан). Правда изображение будет черно-белым, однако этого будет достаточно для большинства проектов.

Вот игровая консоль, где используется данная библиотека

Создадим свою ТВ-приставку, состоящую из Arduino-платы и двухкоординатного джойстика и напишем простенькую игру.
Вот вид нашей приставки

Ознакомимся с возможностями библиотеки и напишем игру.
Страница библиотеки – http://code.google.com/p/arduino-tvout
Здесь можно скачать библиотеку и посмотреть описание функций.
Библиотека использует следующие выводы Arduino

Рассмотрим основные функции библиотеки.

Читайте также:  Советские чипсы в коробке

Функции установки режима

Функция begin() инициализирует вывод видеосигнала (разрешение экрана по умолчанию 128×96)
Синтаксис:

  • mode – стандарт видеосигнала:
  • _PAL – режим PAL;
  • _NTSC – режим NTSC.
  • 0 – в случае удачного соединения, 4 – в случае неудачи (недостаточно памяти для буфера вывода).

Функции задержки

Функция delay() осуществляет задержку выведенного изображения.
Синтаксис:

  • ms – задержка в мс с точностью: 20 мс для PAL и 16 мс для NTSC.

Функция delay_frame() осуществляет задержку выведенного изображения.
Синтаксис:

  • frames – количество кадров для задержки..

Функция полезна для сведения к минимуму или устранения на мерцание экрана, вызванные обновлением экрана.

Функции получения параметров

Функция hres() возвращает горизонтальное разрешение экрана.
Синтаксис:

  • unsigned char – горизонтальное разрешение экрана.

Функция vres() возвращает вертикальное разрешение экрана.
Синтаксис:

  • unsigned char – вертикальное разрешение экрана.

Функция char_line() возвращает максимально возможное количество символов в одной строке при выводе текстовой информации.
Синтаксис:

  • unsigned char – количество символов.

Основные графические функции

Функция set_pixel() устанавливает цвет пикселя экрана в точке с заданными координатами.
Синтаксис:

  • x,y – координаты пикселя;
  • color – цвет пикселя:
  • 0 – черный;
  • 1 – белый;
  • 2 – инвертировать цвет.

Функция get_pixel() получает цвет пикселя экрана из точки с заданными координатами.
Синтаксис:

  • color – цвет пикселя:
  • 0 – черный;
  • 1 – белый;
  • 2 – инвертировать цвет.

Функция fill() заполняет экран заданным цветом.
Синтаксис:

  • color – цвет заполнения:
  • 0 – черный;
  • 1 – белый;
  • 2 – инвертировать цвет.

Функция clear_screen() очищает экран, заполняя заданным цветом.
Синтаксис:

  • color – цвет заполнения:
  • 0 – черный;
  • 1 – белый;
  • 2 – инвертировать цвет.

Функция invert() инвертирует содержимое экрана.
Синтаксис:

Функция shift_direction() сдвигает содержимое экрана.
Синтаксис:

  • distance – расстояние для сдвига содержимого экрана.
  • direction – направление сдвига:
  • UP=0 – вверх;
  • DOWN=1 – вниз;
  • LEFT=2 – влево;
  • RIGHT=3 – вправо.

Функция draw_line() соединяет на экране линией две точки.
Синтаксис:

  • x0,y0 – координаты первой точки;
  • x1,y1 – координаты второй точки;
  • color – цвет заполнения:
  • 0 – черный;
  • 1 – белый;
  • 2 – инвертировать цвет.

Функция draw_row() заполняет строку указанным цветом между двумя точками строки.
Синтаксис:

  • row – вертикальная координата строки;
  • x1,x2 – горизонтальный координаты точек строки;
  • color – цвет заполнения:
  • 0 – черный;
  • 1 – белый;
  • 2 – инвертировать цвет.

Функция draw_column() заполняет строку указанным цветом между двумя точками столбца.
Синтаксис:

  • column – горизонтальная координата столбца;
  • y1,y2 – вертикальные координаты точек столбца;
  • color – цвет заполнения:
  • 0 – черный;
  • 1 – белый;
  • 2 – инвертировать цвет.

Функция draw_rect() рисует на экране прямоугольник.
Синтаксис:

  • x,y – координаты левой верхней точки;
  • w,h – ширина и высота рисуемого прямоугольника;
  • color – цвет границ прямоугольника:
  • 0 – черный;
  • 1 – белый;
  • 2 – инвертировать цвет.
  • fillcolor – цвет заполнения прямоугольника:
  • 0 – черный;
  • 1 – белый;
  • 2 – инвертировать цвет.

Функция draw_circle() рисует на экране круг.
Синтаксис:

  • TVOut.draw_ circle(x,y,r,color);
  • TVOut.draw_ circle(x,y,r,color,fillcolor);
  • x,y – координаты центра круга;
  • r – радиус круга;
  • color – цвет границ круга:
  • 0 – черный;
  • 1 – белый;
  • 2 – инвертировать цвет.
  • fillcolor – цвет заполнения круга:
  • 0 – черный;
  • 1 – белый;
  • 2 – инвертировать цвет.

Функция bitmap() выводит на экран растровое изображение.
Синтаксис:

  • x,y – координаты левого верхнего угла точки вывода;
  • bmp – указатель на массив памяти, где хранится картинка;
  • w,h – ширина, высота выводимого изображения;

Ниже рассмотрим процесс создания кода выводимых растровых изображений.

Функции вывода текстовой информации

Для применения функций вывода текстовой информации требуетя подключение файлов с включенными в библиотеку или пользовательскими шрифтами. Для подключения пользовательского набора шрифтов необходимо в скетче подключить заголовочный файл:
#include
В состав библиотеки включены следующие наборы шрифтов:

Функция select_font() выбирает шрифт для вывода текстовой информации.
Синтаксис:

  • font – шрифт, подключенный в скетче.

Функция print_char() выводит символ на экран.
Синтаксис:

  • x,y – позиция на экране для вывода символа;
  • char – символ из текущего шрифта.

Функция set_cursor() устанавливает позицию курсора для вывода текстовой информации на экран.
Синтаксис:

  • x,y – координаты для курсора.

Функция print() выводит на экран строку, символ или число.
Синтаксис:

  • TVOut.print(x,y,string);
  • TVOut.print(x,y,char,base);
  • TVOut.print(x,y,int,base).
  • x,y – координаты курсора.
  • base – формат вывода:
  • BYTE = 0;
  • DEC = 10 (default);
  • HEX = 16.

Функция println() выводит на экран строку, символ или число и в конце символ перевода строки:
Синтаксис:

  • TVOut.println(x,y,string);
  • TVOut.println(x,y,char,base);
  • TVOut.println(x,y,int,base).
  • x,y – координаты курсора.
  • base – формат вывода:
  • BYTE = 0;
  • DEC = 10 (default);
  • HEX = 16.

Функции вывода аудио

Функции вывода звука позволяют отправлять на телевизор через аудиовыход сигнал определенной частоты.
Функция tone() выдает аудиосигнал определенной частоты.
Синтаксис:

  • frequency – частота аудиосигнала;
  • duration – длительность сигнала.

Функция noTone() прекращает выдачу аудиосигнала.
Синтаксис:

Создание собственных шрифтов

Рассмотрим процесс создания пользовательских шрифтов для библиотеки TVOut.

Библиотека позволяет создавать собственные шрифты.
Существуют два вида шрифтов – фиксированной и переменной ширины. Для шрифтов фиксированной ширины первые три байта массива содержат данные о ширине символа (4), высоте символа (6) и первый печатный символ (32) . Затем идут данные для каждого последующего символа.

Для шрифтов переменной ширины в описании каждого символа первый байт определяет ширину данного символа.

Создадим пользовательский шрифт myfont1. Для пользовательского шрифта myfont1 в папке TVOutfonts создаем 2 файла: myfont1.h и myfont1.cpp.
Вот содержимое файла myfont1.h

Теперь для использования библиотекой TVOut нашего пользовательского шрифта myfont1 в скетче необходимо подключить файл

Создание графических примитивов.

Библиотека TVOut позволяет загружать на экран растровые изображения. Рассмотрим создание кода для загрузки растрового изображения функцией bitmap() библиотеки TVOut.

Сначала необходимо создать 1 битное (двухцветное изображение), например в графическом редакторе Paint.

Затем нам понадобится программа Image2Code, которая сконвертирует из нашего изображения код. Программу можно скачать по адресу http://sourceforge.net/projects/image2code/files/. Это версия для операционной системы Windows. Скачиваем, запускаем.

Нажимаем на кнопку Convert и получаем массив.

Далее создаем 2 файла. Первый c расширением .h, например MyBitmap1.h.

Далее создаем файл MyBitmap1.cpp , в него (в поле данных массива unsigned char MyBitmap1[]) копируем данные конвертации, убирая символы "<" и ">", и вставляя в начале ширину и высоту изображения в пикселах.

Сохраняем файлы MyBitmap1.h и myBitmap.cpp в директории нашего скетча. Для вывода нашего изображения на экран телевизора вызываем функцию TVOut.bitmap():

C библиотекой ознакомились, собрана игровая консоль – теперь можно приступать к написанию игры.

Оцените статью
Добавить комментарий

Adblock
detector