Почему в смайлике есть дополнительный пиксель для подсветки Grove LCD RGB от Seeed Studio?

lcd

Во время тестирования примера CustomCharacter.ino для подсветки Grove LCD RGB от Seeed Studio на плате Arduino 101 над глазом смайлика появляется дополнительный пиксель, и смайлик также сдвигается на один ряд вниз. (смотрите прикрепленное изображение чуть ниже, с некоторыми изменениями вручную в библиотеке, пытаясь устранить проблему)

Example of the problem

На самом деле, в зависимости от порядка присвоения символов, смайлик, наконец, отображается правильно, например, в следующем минимальном рабочем примере, где два назначения createChar() поменялись местами (1 перед 0), и оба смайлика отображаются правильно:

#include <Wire.h>
#include "rgb_lcd.h"

rgb_lcd lcd;

byte smiley[8] = {
    0b00000,
    0b00000,
    0b01010,
    0b00000,
    0b00000,
    0b10001,
    0b01110,
    0b00000
};

void setup() 
{
    lcd.begin(16, 2);
    lcd.createChar(1, smiley);
    lcd.createChar(0, smiley);
    lcd.setCursor(0, 0);
    lcd.write((unsigned char)0);
    lcd.write(1);
}

void loop() {}

Если я случайно помещу lcd.createChar(0, смайлик); обратно перед lcd.createChar(1, смайлик);, ошибка (сдвиг в строках пикселей + дополнительный активированный пиксель) возникает снова для второго смайлика.

Может ли кто-нибудь объяснить, почему это происходит на самом деле, и, надеюсь, дать какой-нибудь способ исправить дисплей?

, 👍0

Обсуждение

Над заданным вами шаблоном есть дополнительная строка пикселей, а последняя строка отсутствует. Похоже, у вас есть одноразовая ошибка в вашем коде., @the busybee

@thebusybee: Действительно! Я не заметил этого факта. Я не мог сказать, почему этот самостоятельный символ не отображается должным образом. Например, я проверил символ "хмурый" в том же месте, и он отображается правильно., @Olivier

Если показанный код воспроизводит проблему (отображение не соответствует коду), то я бы сказал, что библиотека неисправна. Их код инициализации кажется мне неправильным. Возможно, вы захотите это исправить, провести кое-какие исследования., @the busybee

ОК. Функция setup (), показанная здесь, является моей адаптацией одной оригинальной функции в `CustomCharacter.ino'., @Olivier

Ну, я имею в виду rgb_lcd::begin(). Такие дисплеи, совместимые с HD44780, должны быть сначала инициализированы в 8-битный режим. Но кажется, что метод этого не делает. Однако, поскольку ЖК-дисплей, по-видимому, инициализирован, это не имеет никаких последствий. Но это говорит о качестве библиотеки. -- Метод rgb_lcd::createChar() выглядит нормально. -- Я бы попытался пойти на один уровень глубже и обойти библиотеку, используя I2C напрямую, чтобы получить максимальный контроль. -- Что показывает дисплей с вашей упрощенной программой, в обоих случаях: 0 перед 1 и 1 перед 0? Оба смайлика правильные или неправильные?, @the busybee

При "порядке 1/0" для rgb_lcd::createChar () оба смайлика отображаются правильно. Принимая во внимание, что при "заказе 0/1" отображается второй с проблемами, обнаруженными ранее., @Olivier

Это странно. Следующий шаг, который я бы предпринял, - вставить несколько отладочных сообщений по последовательной строке, просто чтобы посмотреть, как rgb_lcd::createChar() выполняет свою работу правильно. Не могли бы вы попробовать это? -- В качестве альтернативы, я бы заглянул в сгенерированный ассемблерный код, просто чтобы убедиться, что он правильный. Но для этого нужен определенный опыт. -- О, и, пожалуйста, [отредактируйте] свой вопрос, чтобы ** добавить ** новую информацию. Новые посетители не обязательно будут читать комментарии здесь., @the busybee