Символы TVout не выстраиваются в линию
Я возился с библиотекой Arduino TVout и создал несколько многосимвольных плиток (не знаю, как их еще назвать). Просто для начала я создал простой X, который охватывает 4 символа, но когда я печатаю их на экране, они правильно выравниваются.
Как они должны быть выровнены:
Как они на самом деле совпадают:
Вот код, который у меня есть:
Основной файл:
#include "expressions.h"
#include <TVout.h>
TVout win;
unsigned char x = 0, y = 0;
void setup() {
win.begin(NTSC);
win.select_font(expr8x8);
}
void loop() {
win.clear_screen();
x = 2, y = 5;
print_char(0, x, y);
win.delay(1);
}
void print_char(char c, int startx, int starty) {
int tmpx = startx, tmpy = starty;
for (char i = c; i < c + 4; i++) {
win.print_char(tmpx * 8, tmpy * 8, i);
if (++tmpx == c + 2) {
tmpy++;
tmpx = startx;
}
}
}
выражения.h
#define EXPRESSIONS8x8_H
#include <avr/pgmspace.h>
extern const unsigned char expr8x8[];
выражения.cpp
#include "expressions.h"
PROGMEM const unsigned char expr8x8[] = {
8, 8, 0, // ширина, высота, начало
// сломанный
0x00, 0x00, 0x30, 0x38, 0x1c, 0x1e, 0x07, 0x03,
0x00, 0x00, 0x0c, 0x1c, 0x38, 0x70, 0xe0, 0xc0,
0x03, 0x07, 0x0e, 0x1c, 0x38, 0x38, 0x00, 0x00,
0xc0, 0xc0, 0x70, 0x38, 0x1c, 0x0c, 0x00, 0x00,
// счастливый
0x00, 0x00, 0x00, 0x00, 0x07, 0x1f, 0x38, 0x70,
0x00, 0x00, 0x00, 0x00, 0xe0, 0xf8, 0x1c, 0x0e,
0x60, 0x60, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00,
0x06, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00
};
Я что-то делаю не так? Как исправить эту ошибку/проблему?
@mhay10, 👍0
Обсуждение1 ответ
Лучший ответ:
▲ 4
Я думаю, ваша проблема в этой строке:
if (++tmpx == c + 2) {
Здесь вы смешиваете две разные вещи:
c
— это код символа, т. е. индекс глифа вexpr8x8
шрифтtmpx
– это индекс символьной ячейки (блок пикселей 8 × 8) в строка экрана
Сравнивать их не имеет смысла. И в самом деле, сравнение будет
всегда быть ложным, так как c
равно нулю, а tmpx
начинается с 2 и увеличивается
оттуда.
Я думаю, вы имели в виду следующее:
if (++tmpx == startx + 2) {
,
@Edgar Bonet
Смотрите также:
- Нужна помощь с библиотекой U8GLIB
- Использование библиотеки емкостных датчиков с мультиплексором 74HC4067
- Arduino IRremote перестает работать
- Как сгенерировать файлы .a и .so для добавления в проект arduino
- Проблема с Arduino Nano Every и радиопередачей с использованием RH_RF69.h
- Ошибка компиляции для Arduino Nano 33 BLE с библиотекой LiquidCrystal
- Помогите исправить эту ошибку: expected unqualified-id before 'if'|Arduino
- Есть ли способ автоматически удалить из библиотеки все неиспользуемые части и определения?
Меньше строк кода было бы просто иметь 4 отпечатка, по одному для каждого символа., @Majenko