如何将变量的值从一个arduino传输到另一arduino

时间:2019-04-30 17:53:33

标签: variables arduino integer i2c serial-communication

我正在设置触摸屏界面,以控制我正在制造的微注射成型机上的步进电机。我已经能够使用按钮控件来控制大多数开关/按钮,但是我想尝试使用触摸屏为电动机转速以及电动机应完成的转数选择一个值。不需要启动或方向功能,因为这些功能是由主arduino通过按钮控制的。

我要做什么:

  1. 主站:从站中保存的变量“ CV_Num_Rotations_Output”的请求值
  2. 从站:发送值
  3. 主版:将值写入“ CV_Num_Rotations”

  4. 主站:从站中保存的变量“ CV_Speed_Rotations_Output”的请求值

  5. 从站:发送值
  6. 主站:将接收到的值写入“ CV_Speed_rotations”

在查看了可通过I2C传输的数据类型之后,我了解到发送浮点数并不容易,因此我将这两个变量转换为整数,稍后将由Master进行解释。

我也考虑过使用struct来保存值的想法,但是由于我只是传输数字并且已经编写了转换函数,所以我宁愿坚持用新值覆盖变量从站将它们发送过来。

现在我在两个主/从属服务器上都使用int作为变量:

int CV_Num_Rotations_Output = 1; // Pre-conversion value ready to be transmitted (can't be a float/decimal)
int CV_Speed_Rotations_Output = 1;

但是我愿意使用其他变量类型。

Arduino主代码:

#include <Wire.h>

int CV_Num_Rotations = 1;
int CV_Speed_Rotations = 1;
int CV_Num_Rotations_Output = 1; // Pre-conversion value ready to be transmitted (can't be a float/decimal)
int CV_Speed_Rotations_Output = 1;

void setup() {
  Serial.begin(9600);
  Wire.begin();   // Join i2c bus (address optional for master [becomes master by default])

void loop() {
  Wire.requestFrom(8,2)  // Request 2 bytes from slave device #8

  while (Wire.available()) {

    Wire.write(CV_Num_Rotations_Output);
    Wire.write(CV_Speed_Rotations_Output);
  }
  Serial.print("CV_Num_Rotations: ");
  Serial.println(CV_Num_Rotations_Output);
  Serial.print("CV_Speed_Rotations: ");
  Serial.println(CV_Speed_Rotations_Output);
  delay(150);
}

从Arduino代码:

#include <Wire.h>

int CV_Num_Rotations_Output = 5; // Values range from 1-20
int CV_Speed_Rotations_Output = 10; // Values range from 10-30

void setup() {
  Serial.begin(9600);
  Wire.begin(8);
  Wire.onRequest(requestEvent);
}

void requestEvent() {
  Wire.write(CV_Num_Rotations_Output);
  Wire.write(CV_Speed_Rotations_Output);
}

由于Master的两个CV_Rotation变量的初始值为'1',因此打印输出应分别从1-> 5和1-> 10更改。

我的结果是:我什么也没得到。什么都没有打印到串行监视器...

请帮助。我不敢相信执行这样的简单操作(例如传递变量的值)有多么困难...

提前谢谢

0 个答案:

没有答案