UART TTL терминал на Nano + LCD5110
- Войдите на сайт для отправки комментариев
Вс, 28/06/2015 - 11:46
Всего доброго дня. Принимайте в ряды :)
Имею ардуино нано и экранчик 5110. Собрал себе UART-терминал, заменил TinyFont на SmallFont и тут все строки побежали. Скажите, как это можно исправить?
С ардуино не работал, но терминал привлек своей простотой и крайней необходимостью. При шрифте TinyFont все очень мелко и колв-во символов на строке = 21, а строк = 8. Заменил на SmallFont и получил 14 и 5 соответственно. Но смещение строк (ScreenShift) идет с задержкой в 7строк. Т.е. когда печатается уже 6-12 строки, ранние строки не идут вверх, а потом скачок.
Который день бьюсь, ничего не получается. Буду признателен, если кто откликнется.
#include <LCD5110_Graph.h> // Подключение библиотеки LCD5110_Graph
LCD5110 myGLCD(8,9,10,11,12); // SCLK, DN(MOSI), D/C, RST, SCE
extern uint8_t TinyFont[]; // Будет использоваться внешний шрифт TinyFont
char screen[168];
int currentPosition=0;
//--------------------------------
void setup()
{
Serial.begin(9600);
myGLCD.InitLCD(); // Инициализация дисплея
myGLCD.setFont(TinyFont); // Установка шрифта
myGLCD.print("Terminal v1.1 ", CENTER, 0);
myGLCD.print("by mini-tech.com.ua", CENTER, 6);
myGLCD.update(); // Обновление содержимого дисплея
delay (3000);
myGLCD.clrScr();
}
//--------------------------------
void loop()
{
byte incomeByte;
while (Serial.available()>0) // Если в буфере Serial порта есть доступные даные
{
incomeByte=Serial.read(); // Считывание байта в переменную incomeByte
switch (incomeByte)
{
case '\n':{
while ((currentPosition+1)%14 != 1){
screen[currentPosition]=' ';
currentPosition++;}
break;}
case '\r':{
while ((currentPosition+1)%14 != 1){
currentPosition--;
screen[currentPosition]=' ';}
break;}
default:
screen[currentPosition]=char(incomeByte); // Преобразование полученного байта в тип char
currentPosition++; // и его помещение в массив screen. Переход на след. позицию
}
if (currentPosition > 167){ // Если экран заполнен
screenShift(); // Вызов функции сдвига экрана вверх на одну строку
currentPosition=147;} // Перемещение в начало последней строки
}
screenPrint(screen); // Вызов функции вывода данных на дисплей
}
//--------------------------------
void screenPrint(char displayMatrix[168]) // Функция вывода данных на дисплей
{
char line[21]; // Строка экрана
int i, j;
for(i=0; i<5; i++){ // Цикл для строк
for(j=0; j<21; j++){ // Цикл для символов
line[j]=displayMatrix[i*14+j];} // Наполнение текущей строки
myGLCD.print(line, 0, i*10); // Печать строки в буффер дисплея
myGLCD.update();} // Обновление содержимого дисплея
}
//--------------------------------
void screenShift()// Функция сдвига содержимого дисплея на одну строку вверх
{
for (int i=0; i<147; i++){ // Каждый символ по очереди копируется на ту же
screen[i]=screen[i+14];} // позицию в верхней строке
for (int i=147; i<168; i++){ // Последняя строка
screen[i]=' ';} // заполняется пробелами
}
Я так понял, никому это не интересно и никто не желает помочь новичку.