所以我必须编写一个使用颜色检测器识别颜色的代码。因为调色板仅限于6种颜色,所以我可以另存为Integer(红色为0,绿色也为1)。现在我在将整数从处理检测器的Arduino转移到我必须在上面编写代码的Arduino时遇到了问题。我尝试使用模拟(A0)引脚,但每次尝试传输任何东西时,最终只能得到19-20。是否存在从0-5传输整数的解决方案?在此先感谢
序列号是最通用的,因为您可以由众多合作伙伴测试/模拟/使用它。在这里,您可以将可能的值编码为人类可读的字符{'0'..'5'}或{'R','G','B','C','M','Y'}或您喜欢的任何内容。
最终,I2C是一种更好的串行通信方式。
当然,如果模拟信号更多的是关于状态而不是事件,那么它可以分为6个明显可区分的区域。您需要电子设备(低通滤波器)将AnalogWrite PWM转换为模拟常数值。最后,您必须分别处理状态转换。
(嗯,听起来很复杂,不是吗:))
使用模拟不是一个好的解决方案。您应该使用“串行连接”。它只需要两条电缆-不需要其他电子设备-并且代码非常简单(请参见下文)。如果只想传输0-255或更小的范围内的值(如您的情况:0-5),则可以使用“字节”类型的变量。使用Arduino的“ TX”(发送)和“ RX”(接收)引脚,可以通过串行连接轻松地传输一个或多个字节。您只需将Arduino#1的TX引脚连接到Arduino#2的“ RX”引脚-并:连接两者的GND引脚。在两者的设置代码中,您需要以相同的波特率启动串行连接,例如
void setup(){
Serial.begin(9600);
}
Arduino#1正在使用以下命令发送字节:
byte color = 0; // declare the variable "color"
color = 3; // set the variable to any value in the range [0-255]
Serial.write(color); // transmit the byte-variable "color"
Arduino#2正在接收该字节。因此,它需要不断检查新的串行数据。
void loop() {
byte data = 0;
// - check for new serial data - and respond accordingly
if (Serial.available() > 0) {
int x = Serial.read(); // The "Serial.read" command returns integer-type
data = x; //
// - now: do something with "data"
if (data == 0) {
// "red" was received ... do something ...
} else if (data == 1) {
// "green" was received ... do something ...
} else if (data == 2) {
// ... and so on, and so on ...
}
}
// ... do other tasks
}
请确保在“其他任务”中没有使用命令“延迟”,因为这将阻止您的代码及时检查序列中的新数据。以完全相同的方式,您的Arduino#2也可以将数据发送回Arduino#1。在这种情况下,您需要再增加一根电缆,将“ TX”从#2连接到#1的“ RX”,并在相应的另一个Arduino上使用与上述相同的代码。