Передача данных по Serial
- Войдите на сайт для отправки комментариев
Вс, 12/02/2017 - 21:13
Добрый день!
Суть вопроса в передаче данных с одной платы ардуино (передатчик) к которой подключен 8-ми позиционный переключатель, на другую (приемник).
В передатчике нужно отслеживать положение переключателя и передавать его по Serial соединению на приемник, а на нем, в зависимости от положения переключателя, выполнять необходимые действия.
Прошу помочь в написании кода передатчика.
Код приемника:
void setup() { Serial.begin(9600); for (int outPin = 6; outPin < 13; outPin++) { pinMode(outPin, OUTPUT); } } void loop() { if (Serial.available() > 0) { int inByte = Serial.read(); switch (inByte) { case 'a': // 1 положение delay(500); digitalWrite(12, HIGH); delay(500); digitalWrite(9, HIGH); delay(500); digitalWrite(7, HIGH); break; case 'b': // 2 положение delay(500); digitalWrite(11, HIGH); delay(500); digitalWrite(9, HIGH); delay(500); digitalWrite(7, HIGH); break; case 'c': // 3 положение delay(500); digitalWrite(12, HIGH); delay(500); digitalWrite(8, HIGH); delay(500); digitalWrite(7, HIGH); break; case 'd': // 4 положение delay(500); digitalWrite(11, HIGH); delay(500); digitalWrite(8, HIGH); delay(500); digitalWrite(7, HIGH); break; case 'e': // 5 положение delay(500); digitalWrite(12, HIGH); delay(500); digitalWrite(10, HIGH); delay(500); digitalWrite(7, HIGH); break; case 'f': // 6 положение delay(500); digitalWrite(11, HIGH); delay(500); digitalWrite(10, HIGH); delay(500); digitalWrite(7, HIGH); break; case 'g': // 7 положение delay(500); digitalWrite(12, HIGH); delay(500); digitalWrite(9, HIGH); delay(500); digitalWrite(6, HIGH); break; case 'h': // 8 положение delay(500); digitalWrite(11, HIGH); delay(500); digitalWrite(9, HIGH); delay(500); digitalWrite(6, HIGH); break; default: // выключаем все светодиоды: for (int outPin = 6; outPin < 13; outPin++) { digitalWrite(outPin, LOW); } } } }
Код передатчика Вы не привели, поэтому по нему сказать нечего, а вот в приемнике, есть подозрение, что строки 18, 26, 34, 42, 50, 58, 66 и 74 являются лишними.
Но наверняка этого сказать нельзя, т.к. Вы не написали, что именно должны делать Ваши программы.
Передатчик определяет в каком положении находится 8-ми позиционный переключатель и отправляет в Serial. Приемник по команде выполняет включение светодиодов в определенной последовательности.
где:
х - для сброса светодиодов
a, b - включение определенной последовательности светодиодов
Проблема в том что передатчик непрерывно шлет в Serial, например, xa или xb. А нужно чтобы он это делал однократно.
Ну так введите переменную, в которой хранится последний посланный сигнал, и если состояние не меняется, ничего в порт не посылайте.
Можете мне код набросать на примере поста №2? Я в этом деле новичек, совсем недавно взялся за Ардуино.))
1. Определяете конфигурацию состояния входных пинов. В принципе достаточно одной 8-битной переменной, но если не владеете битовыми операциями, можно использовать массив из 8 булевых переменных.
2. Сравниваете новое состояние со старым, хранящемся в глобальной или статической переменной.
3. Если не равны, посылаем в последовательный порт нужные команды и обновляем значение статической переменной.
Спасибо большое! Вроде получилось...
Я, правда, еще на приемнике не проверял, но в Serial все красиво.