Как передать значение переменной из одного arduino в другой - PullRequest
0 голосов
/ 30 апреля 2019

Я настраиваю интерфейс с сенсорным экраном для управления шаговым двигателем на машине для литья под давлением, которую я создаю. Мне удалось управлять большинством переключателей / кнопок с помощью кнопок, но я хочу попробовать использовать сенсорный экран, чтобы выбрать значение как для скорости вращения двигателя, так и для числа оборотов, которые двигатель должен выполнить. Нет необходимости в функции инициирования или направления, так как они управляются Master Arduino с помощью кнопок.

Что я пытаюсь сделать:

  1. Master: значение запроса переменной "CV_Num_Rotations_Output", хранящейся в подчиненном устройстве
  2. Slave: отправить значение
  3. Мастер: запись значения в "CV_Num_Rotations"

  4. Мастер: значение запроса переменной "CV_Speed_Rotations_Output", хранящейся в подчиненном устройстве

  5. Slave: отправить значение
  6. Мастер: запись полученного значения в "CV_Speed_rotations"

Изучив типы данных, которые могут передаваться через I2C, я понял, что отправлять числа с плавающей точкой нелегко, поэтому я преобразовал две переменные в целые числа, которые впоследствии будут интерпретированы мастером.

Я также поэкспериментировал с идеей использования struct для хранения значений, но, поскольку я просто передаю числа и уже записал функции преобразования, я бы предпочел просто перезаписать переменные их новыми значениями. как только Раб отправляет их.

Сейчас я использую int для двух переменных на Master / Slave:

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);
}

Slave 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);
}

Поскольку мастер имеет начальные значения '1' для двух переменных CV_Rotation, распечатка должна измениться с 1 -> 5 и 1 -> 10 соответственно.

Мои результаты: я ничего не получаю. На Serial Monitor ничего не печатается ...

Пожалуйста, помогите. Я не могу поверить, насколько сложно выполнить такую ​​простую операцию, как передать значение переменной ...

Заранее спасибо

...