Я настраиваю интерфейс с сенсорным экраном для управления шаговым двигателем на машине для литья под давлением, которую я создаю. Мне удалось управлять большинством переключателей / кнопок с помощью кнопок, но я хочу попробовать использовать сенсорный экран, чтобы выбрать значение как для скорости вращения двигателя, так и для числа оборотов, которые двигатель должен выполнить. Нет необходимости в функции инициирования или направления, так как они управляются Master Arduino с помощью кнопок.
Что я пытаюсь сделать:
- Master: значение запроса переменной "CV_Num_Rotations_Output", хранящейся в подчиненном устройстве
- Slave: отправить значение
Мастер: запись значения в "CV_Num_Rotations"
Мастер: значение запроса переменной "CV_Speed_Rotations_Output", хранящейся в подчиненном устройстве
- Slave: отправить значение
- Мастер: запись полученного значения в "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 ничего не печатается ...
Пожалуйста, помогите. Я не могу поверить, насколько сложно выполнить такую простую операцию, как передать значение переменной ...
Заранее спасибо