【发布时间】:2012-10-12 15:41:51
【问题描述】:
设置
我有几百个 Sparkfun LED 像素(类似于 https://www.sparkfun.com/products/11020)连接到 Arduino Uno,并希望使用 Arduino 的内置 Serial-over-USB 连接从 PC 控制像素。
像素可单独寻址,每个像素都有 24 位颜色 (RGB)。由于我希望能够非常快速地更改每个像素的颜色,因此从 pc 到 Arduino 的数据传输必须非常高效(从 Arduino 到像素的数据进一步传输已经非常快了)。
问题
我尝试直接将所需的 RGB 值直接发送到 Arduino,但这会导致明显的延迟,例如,当我想同时打开所有 LED 时。我最小化数据量的直接想法是将可用颜色从 24 位减少到 8 位,这对于我的应用程序来说已经绰绰有余了。
如果这样做,我必须将 PC 上的 8 位值扩展为 Arduino 上的 24 位值,以设置像素上的实际颜色。这里明显的解决方案是一个调色板,它包含所有可用的 8 位值和相应的 24 位颜色。不过,我希望有一个没有调色板的解决方案,主要是出于内存空间的原因。
问题
将 8 位颜色扩展到 24 位颜色的有效方法是什么,最好是准确保留颜色信息的方法?这个任务有标准算法吗?
可能的解决方案
我正在考虑一种格式,每个 R 和 B 为 2 位,G 为 3 位。这些值将被打包成一个字节,然后传输到 Arduino,然后使用位移解包并使用map() 函数 (http://arduino.cc/en/Reference/Map)。
对这个解决方案有什么想法吗?有什么更好的方法来做到这一点?
【问题讨论】:
-
您的 2-3-2 方案实际上是一种调色板。调色板是一般的方式。问题是每张图像都有其最佳调色板,而使用一个通用调色板会显着降低显示质量。
-
如果您的图像是相对静态的,您可以预先计算最佳调色板并使用它,可能质量可以接受。
-
你用什么来通过串口驱动arduino?处理,java,还有什么?
-
我正在使用自定义 Java 应用程序,它将 Midi 信号转换为控制信号,然后发送到 arduino。我不是想显示图像,它是串上的 LED。
-
你在 Java 中使用什么库?如果您使用 rxtx,这可能对您有用:neophob.com/2011/04/serial-latency-teensy-vs-arduino