Целочисленный пиксельный массив в битовую упакованную строку из обработки в ardunio - PullRequest
0 голосов
/ 26 июня 2019

У меня есть светодиодная лента со 100 светодиодами, подключенными к Arduino.Я хочу использовать язык программирования обработки для создания двоичного изображения из изображения PNG.1 для черных пикселей и 0 для другого.Я хочу, чтобы двоичное изображение было равно исходному изображению.Это двоичное изображение должно быть отправлено в Arduino строка за строкой.Это потому, что я использую readString, а не readByte в своем коде Arduino.

Проблема возникает из-за того, что двоичное изображение состоит из 10000 целых и нулей.Я хочу упаковать их в большие сообщения, в которых по 8 пикселей занимают один бит в одном байте.Затем я хочу отправить эти упакованные байты на мой Arduino, чтобы быть более эффективным.

Я действительно хочу использовать строку Arduino для хранения моих строк данных.

1 Ответ

0 голосов
/ 26 июня 2019

Ниже приведен код Arduino (C ++), который упаковывает один и ноль символов, содержащихся во входных данных String, в выходные данные String.Он делает это, вставляя новый символ в вывод String для каждых 8 пройденных единиц и ИЛИ - 0x01 в нужном месте, когда текущий символ на входе String равен '1'.

String packPixels(String input) {
    String out;
    for(int i=0; i<input.length; i++) {
        if(i % 8 == 0) { 
            out += 0x00;
        }

        if(input[i] == '1') {
            out[out.length-1] |= 1 << i % 8;
        }

    }

    return out
}

(ps этот код должен быть в состоянии использоваться с минимальными усилиями при обработке)

Использование будет выглядеть так:

Serial.write(packPixels(pixels));

Вы должны посмотреть на std::vector и операция по модулю .

Не следует помещать двоичные данные в String, для этого лучше подходит std::vector, и он четко сообщает, чтосодержимое вектора составляет не символов, а биты.

...