Serial Port Arduino MEga 2560 FLightgear
- Войдите на сайт для отправки комментариев
Интересует вопрос касающийся передачи данных, может кто сможет помочь.... Из авиасимулятора Flight gear . Передаю через последовательный порт, вот на примере светодиода. Например:В ависимуляторе, в полёте, в произвольный момент времени загорается лампа-табло, я хочу чтобы загорелся и у меня светодиод который стоит на 13 ножке. На примере одного всё получается. А как осуществить передачу на два светодиода ? То есть стоят уже 2 светодиода, на 13 и на 12 ножке,загорается сначала одна лампа в симуляторе, затем другая, программа отправляет сигнал 1 или 0, то что лампа в симуляторе горит, но если я прописываю на два у меня загораются сразу два светодиода. HELP
int incomingByte = 0; int ledPin = 13; void setup() { Serial.begin(9600); pinMode(ledPin,OUTPUT); } void loop() { if (Serial.available() > 0) { incomingByte = Serial.read(); if (incomingByte == '1') { digitalWrite(ledPin, HIGH); } if (incomingByte == '0') { digitalWrite(ledPin, LOW); } } }
В flight gear две независимые друг от друга лампочки, сначала загорается одна , затем другая, как дописать в код вторую? С одной всё получается отлично.
Вот протокол передачи данных из авиасимулятора. Запуск правого и левого двигателя поочереди.
<?xml version="1.0"?> <PropertyList> <generic> <output> <line_separator>newline</line_separator> <var_separator>newline</var_separator> <chunk> <name>arduino-digital-13</name> <type>boolean</type> <node>/mig29/instrumentation/Tablo/StartRight</node> </chunk> <chunk> <name>arduino-digital-12</name> <type>boolean</type> <node>/mig29/instrumentation/Tablo/StartLeft</node> </chunk> </output> </generic> </PropertyList>
Ну, во-первых, программа должна как-то узнать, какой светодиод ей нужно зажигать. Другого способа сообщить ей это кроме как указать в команде, нет.
Как это сделать конкретно - 1001 способ.
Например, можно цифрами 1, 3, 5, 7 и 9 зажигать один из 5 светодиодов, а цифрами 0, 2, 4, 6 и 8 - гасить их.
Можно номер светодиода закодировать буквой, например, A1 или F0, тогда количество светодиодов, которыми можно управляит, увеличится до 26.
Можно использовать полноценные текстовые команды, например: "LED_341=OFF" и т.п.
Спасибо большое за ответ. Я так пробовал.
int incomingByte = 0;
int redPin = 12;
int ledPin = 13;
void setup() {
Serial.begin(9600);
pinMode(ledPin,OUTPUT);
pinMode(redPin,OUTPUT);
}
void loop() {
if (Serial.available() > 0) {
incomingByte = Serial.read();
if (incomingByte == '1') {
digitalWrite(ledPin, HIGH);
}
if (incomingByte == '0') {
digitalWrite(ledPin, LOW);
}
if (incomingByte == '1') {
digitalWrite(redPin, HIGH);
}
if (incomingByte == '0') {
digitalWrite(redPin, LOW);
}
}
}
Примерно так. Извиняюсь пишу с телефона.
Когда симулятор передает сигнал что загорелась в программе одна лампочка , а затем другая , зажигается один и тот же светодиод , или же вместе сразу две.
Если incoming byte поменять не 1 , а 2 и через serial monitor arduino передавать вручную команды 1 и 2. Все работает правильно. Но моя авиасимуячтор отправляет наверное только 1 и 0.
Спасибо большое за ответ. Я так пробовал.
int incomingByte = 0;
int redPin = 12;
int ledPin = 13;
void setup() {
Serial.begin(9600);
pinMode(ledPin,OUTPUT);
pinMode(redPin,OUTPUT);
}
void loop() {
if (Serial.available() > 0) {
incomingByte = Serial.read();
if (incomingByte == '1') {
digitalWrite(ledPin, HIGH);
}
if (incomingByte == '0') {
digitalWrite(ledPin, LOW);
}
if (incomingByte == '1') {
digitalWrite(redPin, HIGH);
}
if (incomingByte == '0') {
digitalWrite(redPin, LOW);
}
}
}
Примерно так. Извиняюсь пишу с телефона.
Когда симулятор передает сигнал что загорелась в программе одна лампочка , а затем другая , зажигается один и тот же светодиод , или же вместе сразу две.
Если incoming byte поменять не 1 , а 2 и через serial monitor arduino передавать вручную команды 1 и 2. Все работает правильно. Но мой авиасимулятор отправляет наверное только 1 и 0.