Нужен зеркальный вывод текста (Матрица 32x8, Max7219)

ElDrako

✩✩✩✩✩✩✩
17 Авг 2021
5
0
Помогите, пожалуйста, с реализацией зеркального вывода текста на одну строку из 4х блоков LED 8х8.
Arduino, ESP8266, библиотека GyverMax7219.

Делаю себе в гараж табло дальномера, чтобы при заезде задом не протаранить стенку.
И, как обычно, уже когда всё отлажено и работает на столе - осталось только в корпуса запихнуть, в голову пришла мысль, что смотреть-то буду в зеркало заднего вида, поэтому стоит выводимый текст отзеркалить.
Но сам разобраться, как это сделать, не меняя библиотеки не смог. А переписывать полскетча крепко не хочется.
 

ElDrako

✩✩✩✩✩✩✩
17 Авг 2021
5
0
Это полдела. А что с необходимостью вывода справа налево сделать?
 

Сотнег

★★★★★★★
15 Янв 2020
4,366
1,494
@ElDrako,
проще всего, наверное, будет инвертировать координату ИКС в функции определения порядкового номера пикселя.
типа
C-like:
uint16_t функцияИксИгрек(uint16_t x, uint16_t y){
  x = WIDTH - x; // <- добавленная строчка
...остальное
 

ElDrako

✩✩✩✩✩✩✩
17 Авг 2021
5
0
C++:
void shiftOut(uint8_t dataPin, uint8_t clockPin, uint8_t bitOrder, uint8_t val) {
    uint8_t i;

    for(i = 0; i < 8; i++) {
        if(bitOrder == LSBFIRST)
            digitalWrite(dataPin, !!(val & (1 << i)));
        else
            digitalWrite(dataPin, !!(val & (1 << (7 - i))));

        digitalWrite(clockPin, HIGH);
        digitalWrite(clockPin, LOW);
    }
}
LSBFIRST пробовал - вообще не показывает. Обратный вариант работает изначально.
 

ElDrako

✩✩✩✩✩✩✩
17 Авг 2021
5
0

kDn

★★★★★✩✩
18 Ноя 2019
1,103
437
Делал для лампы. Естественно кроме отзеркаливания текста нужно ещё отзеркаливать направление бегущей строки. Реализацию можете поглядеть, может чем-то поможет. Если у вас без бегущей строки, а статикой - то принцип не меняется (на всякий уточняю).
 

Эдуард Анисимов

★★★★★★✩
23 Сен 2019
2,407
976
58
Марий-Эл
Что бы работать с этой микросхемой, не нужна библиотека.
Управляется она мизинцем левой ноги.
Врубается вывод не цифр, а байта, который засветит нужные сегменты. Формируете собственный, отзеркаленный знакогенератор.
Берёте цифру, которую нужно вывести. Дальше варианты.
Можно брать остаток деления на 10 и начинать набивать другую переменную. Получил остаток, приплюсовал к переменной. Если исходная цифра не равна нулю, умножаете буфер на 10 и прибавляете следующий остаток от деления. И так до конца, а потом выводите на индикатор.
 

ElDrako

✩✩✩✩✩✩✩
17 Авг 2021
5
0
Вопрос решил правкой процедуры update() в GyverMAX7219.h
Нужно заменить на этот код, если кому тоже понадобится:
C++:
// обновить
    void update(bool mirroring = false) {
        int count = 0;
        for (int k = 0; k < 8; k++) {
            beginData();
            // Нормальный вывод
            if (!mirroring) {
                for (int i = 0; i < _amount; i++) sendData(8 - k, buffer[count++]);
            } else {
            // Зеркальный вывод
                for (int i = 0; i < _amount; i++) sendData(k + 1, buffer[count++]);
            }
            endData();
        }         
    }