首页 > 解决方案 > 从处理到ardunio的整数像素数组到位打包字符串

问题描述

我有一个连接到 Arduino 的 100 个 LED 灯带。我想使用处理编程语言从 png 图像创建二进制图像。黑色像素为 1,其他为 0。我希望二进制图像等于原始图像。这个二进制图像将被逐行发送到 arduino。这是因为我使用readString而不是readByte在我的 arduino 代码中。

出现问题是因为二进制图像由 10000 个整数 1 和 0 组成。我想将它们打包成更大的消息,其中 8 个像素每个占用一个字节中的一位。然后我想将这些打包的字节发送到我的 arduino 以提高效率。

我真的很想使用 arduino String 来包含我的数据行。

标签: arduinoprocessingserial-communication

解决方案


下面是一些 Arduino (C++) 代码,它将输入中包含的一字符和零字符打包String到输出String中。它通过为每 8 个通过的单位将一个新字符推入输出并在输入中的当前字符为 时在正确的位置String对 a 进行 OR-ing 来实现这一点。0x01String'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模运算

您不应该将二进制数据放在 aString中, astd::vector更适合于此,并且清楚地表明向量的内容不是字符而是位。


推荐阅读