如何将一个整数从一个 Arduino 转移到另一个 Arduino?
How to transfer an Integer from an Arduino to another Arduino?
所以我必须编写一个使用颜色检测器识别颜色的代码。
因为调色板仅限于 6 种颜色,所以我可以将其保存为整数(红色为 0,绿色为 1 等)。
现在我在将整数从处理检测器的 Arduino 传输到我必须在其上编写代码的 Arduino 时遇到问题。
我尝试使用模拟 (A0) 引脚,但每当我尝试传输任何东西时,我最终只得到 19-20。
是否有解决方案可以将 Integer 从 0-5 转移?
提前致谢
Serial 是最通用的,因为您可以 test/simulate/use 广泛的合作伙伴。
在这里,您可以将可能的值编码为人类可读的字符 { '0' .. '5' } 或
{'R'、'G'、'B'、'C'、'M'、'Y'} 或任何你喜欢的。
最终,I2C 是一种更好的串行通信方式。
当然,一个模拟信号可以分为 6 个清晰可辨的区域,如果它更多地是关于状态而不是关于事件的话。您需要电子设备(低通滤波器)将 analogWrite PWM 转换为模拟常数值。最终,您必须单独处理状态转换。
(哈,听起来很复杂,不是吗:))
使用模拟不是一个好的解决方案。你应该使用"Serial Connection"。它只需要两根电缆——不需要其他电子设备——而且代码非常简单(见下文)。
如果您只想传输 0-255 或更小范围内的值(如您的情况:0-5),您可以使用 "byte" 类型变量。使用 Arduinos 的 "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
}
确保在 "other tasks" 中您没有使用命令 "delay",因为这会阻止您的代码及时检查序列中的新数据。
以完全相同的方式,您的 Arduino #2 也可以将数据发送回 Arduino #1。在这种情况下,您再添加一根电缆将 "TX" 从 #2 连接到 #1 的 "RX",并在各自的其他 Arduino 上使用与上述相同的代码。
所以我必须编写一个使用颜色检测器识别颜色的代码。 因为调色板仅限于 6 种颜色,所以我可以将其保存为整数(红色为 0,绿色为 1 等)。 现在我在将整数从处理检测器的 Arduino 传输到我必须在其上编写代码的 Arduino 时遇到问题。 我尝试使用模拟 (A0) 引脚,但每当我尝试传输任何东西时,我最终只得到 19-20。 是否有解决方案可以将 Integer 从 0-5 转移? 提前致谢
Serial 是最通用的,因为您可以 test/simulate/use 广泛的合作伙伴。 在这里,您可以将可能的值编码为人类可读的字符 { '0' .. '5' } 或 {'R'、'G'、'B'、'C'、'M'、'Y'} 或任何你喜欢的。
最终,I2C 是一种更好的串行通信方式。
当然,一个模拟信号可以分为 6 个清晰可辨的区域,如果它更多地是关于状态而不是关于事件的话。您需要电子设备(低通滤波器)将 analogWrite PWM 转换为模拟常数值。最终,您必须单独处理状态转换。
(哈,听起来很复杂,不是吗:))
使用模拟不是一个好的解决方案。你应该使用"Serial Connection"。它只需要两根电缆——不需要其他电子设备——而且代码非常简单(见下文)。
如果您只想传输 0-255 或更小范围内的值(如您的情况:0-5),您可以使用 "byte" 类型变量。使用 Arduinos 的 "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
}
确保在 "other tasks" 中您没有使用命令 "delay",因为这会阻止您的代码及时检查序列中的新数据。 以完全相同的方式,您的 Arduino #2 也可以将数据发送回 Arduino #1。在这种情况下,您再添加一根电缆将 "TX" 从 #2 连接到 #1 的 "RX",并在各自的其他 Arduino 上使用与上述相同的代码。