arduino - 从处理到ardunio的整数像素数组到位打包字符串
问题描述
我有一个连接到 Arduino 的 100 个 LED 灯带。我想使用处理编程语言从 png 图像创建二进制图像。黑色像素为 1,其他为 0。我希望二进制图像等于原始图像。这个二进制图像将被逐行发送到 arduino。这是因为我使用readString
而不是readByte
在我的 arduino 代码中。
出现问题是因为二进制图像由 10000 个整数 1 和 0 组成。我想将它们打包成更大的消息,其中 8 个像素每个占用一个字节中的一位。然后我想将这些打包的字节发送到我的 arduino 以提高效率。
我真的很想使用 arduino String 来包含我的数据行。
解决方案
下面是一些 Arduino (C++) 代码,它将输入中包含的一字符和零字符打包String
到输出String
中。它通过为每 8 个通过的单位将一个新字符推入输出并在输入中的当前字符为 时在正确的位置String
对 a 进行 OR-ing 来实现这一点。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
和模运算。
您不应该将二进制数据放在 aString
中, astd::vector
更适合于此,并且清楚地表明向量的内容不是字符而是位。
推荐阅读
- java - 如何在 Vert.x 文件系统中读取和解析 .xlsx 文件
- sql - 为什么我尝试获取名称时功能不起作用?PL/SQL
- sql-server - 在 SQL Server 中的特定文件组上创建表?
- c# - C# Dependency Injection - 注入接口,将相同的接口作为参数
- vba - 在 VBa 中选择动态单元格
- puppet - Puppet 给出错误:“非法关系操作数,不能与 Undef 值形成关系。”
- python - Django 配置出现 ODBC 错误 - “为连接字符串属性‘加密’指定的值无效”
- android - 如何在 Xamarin Forms 中将一页更改为另一页时消除眨眼?
- r - 如何更改ggplot2中的图例文本
- javascript - 带有多选下拉菜单的 JavaScript 过滤器元素