如何将一个整数从一个 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 上使用与上述相同的代码。