Здравствуте. задача включать светодиоды на принимающей плате( Платы соединены с помощю RS 485). У меня получается толко один диод включать .Этот Код для двух принимающих. у меня один принимающии. Как прописать кнопки чтобы разные команды давали, например 1 кнопка для 1 светодиода команда ,для 2 ого вторая.
Вот передающий скетч:
byte BUT[2] = {9, 8}; // пины кнопок
byte LED[2] = {13, 12}; // пины светодиодов
#define IN_OUT 6 // переключатель прием-отправка
byte MSG_IN[4];
byte MSG_OUT[4] = {0x10, 0, 0, 0x20}; // шаблон сообщения: 0 - начальный, 1 - адрес сателлита, 2 - команда, 3 - конечный
void setup() {
for (byte i = 0; i < 2; i++) {
pinMode(BUT[i], INPUT_PULLUP);
pinMode(LED[i], OUTPUT);
}
pinMode(IN_OUT, OUTPUT);
digitalWrite(IN_OUT, LOW);
Serial.begin(9600);
}
void loop() {
post(); // периодическая отправка команд на ведомые
if (Serial.available()) { // прием команд от ведомых
// delay(1);
for (byte i = 0; i < 3; i++) MSG_IN[i] = MSG_IN[i + 1];
MSG_IN[3] = Serial.read();
if (MSG_IN[0] == 0x10 && MSG_IN[3] == 0x20) { // пришло полное сообщение
digitalWrite(LED[MSG_IN[1]], !MSG_IN[2]); // выполняем, передаем на светодиод соответствующий адресу состояние пришедшее в команде
}
}
}
void post() {
static unsigned long timerT;
static byte msg_num = 0;
if (timerT > millis() - 100) return; // отправляем последовательно каждые 100 мс
MSG_OUT[1] = msg_num;
MSG_OUT[2] = digitalRead(BUT[msg_num]);
msg_num = !msg_num;
digitalWrite(IN_OUT, HIGH); // включаем отправку
for (byte i = 0; i < 4; i++) { // отправляем 4 байта сообщения
Serial.write(MSG_OUT[i]);
}
delay(5); // ожидаем пока уйдет команда до того, как переключить отправку на прием
digitalWrite(IN_OUT, LOW); // переключаемся на прием
timerT = millis();
}
Принимающий :
byte BUT = 2; // пин кнопки
byte LED = 12; // пин светодиода
#define IN_OUT 6 // переключатель прием-отправка
#define ADR 0 // адрес ведомого (для первого ведомого 0, для второго 1)!
byte MSG_IN[4];
byte MSG_OUT[4] = {0x10, ADR, 0, 0x20}; // шаблон сообщения: 0 - начальный, 1 - адрес сателлита, 2 - команда, 3 - конечный
void setup() {
pinMode(BUT, INPUT_PULLUP);
pinMode(LED, OUTPUT);
pinMode(IN_OUT, OUTPUT);
digitalWrite(IN_OUT, LOW);
Serial.begin(9600);
}
void loop() {
if (Serial.available()) {
// delay(1);
for (byte i = 0; i < 3; i++) MSG_IN[i] = MSG_IN[i + 1];
MSG_IN[3] = Serial.read();
if (MSG_IN[0] == 0x10 && MSG_IN[1] == ADR && MSG_IN[3] == 0x20) { // пришло полное сообщение именно нам!
digitalWrite(LED, !MSG_IN[2]); // выполняем, устанавливаем в светодиод состояние пришедшее почтой
MSG_OUT[2] = digitalRead(BUT);
delay(5); // ждем пока главный переключится на прием
digitalWrite(IN_OUT, HIGH); // включаем передачу
for (byte i = 0; i < 4; i++) { // передаем
Serial.write(MSG_OUT[i]);
}
delay(5); // ждем пока уйдет сообщение
digitalWrite(IN_OUT, LOW); // переключаем на прием
}
}
}