如何将整数从Arduino传输到另一个Arduino?

问题描述 投票:-1回答:2

所以我必须编写一个使用颜色检测器识别颜色的代码。因为调色板仅限于6种颜色,所以我可以另存为Integer(红色为0,绿色也为1)。现在我在将整数从处理检测器的Arduino转移到我必须在上面编写代码的Arduino时遇到了问题。我尝试使用模拟(A0)引脚,但每次尝试传输任何东西时,最终只能得到19-20。是否存在从0-5传输整数的解决方案?在此先感谢

arduino arduino-uno
2个回答
0
投票

序列号是最通用的,因为您可以由众多合作伙伴测试/模拟/使用它。在这里,您可以将可能的值编码为人类可读的字符{'0'..'5'}或{'R','G','B','C','M','Y'}或您喜欢的任何内容。

最终,I2C是一种更好的串行通信方式。


当然,如果模拟信号更多的是关于状态而不是事件,那么它可以分为6个明显可区分的区域。您需要电子设备(低通滤波器)将AnalogWrite PWM转换为模拟常数值。最后,您必须分别处理状态转换。

(嗯,听起来很复杂,不是吗:))


0
投票

使用模拟不是一个好的解决方案。您应该使用“串行连接”。它只需要两条电缆-不需要其他电子设备-并且代码非常简单(请参见下文)。如果只想传输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上使用与上述相同的代码。

© www.soinside.com 2019 - 2024. All rights reserved.