Serial Port Arduino MEga 2560 FLightgear

frankyjohn2014
Offline
Зарегистрирован: 23.05.2016

Интересует вопрос касающийся передачи данных, может кто сможет помочь....  Из  авиасимулятора 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>

 

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Ну, во-первых, программа должна как-то узнать, какой светодиод ей нужно зажигать. Другого способа сообщить ей это кроме как указать в команде, нет.

Как это сделать конкретно - 1001 способ.

Например, можно цифрами 1, 3, 5, 7 и 9 зажигать один из 5 светодиодов, а цифрами 0, 2, 4, 6 и 8 - гасить их.

Можно номер светодиода закодировать буквой, например, A1 или F0, тогда количество светодиодов, которыми можно управляит, увеличится до 26.

Можно использовать полноценные текстовые команды, например: "LED_341=OFF" и т.п.

frankyjohn2014
Offline
Зарегистрирован: 23.05.2016

Спасибо большое за ответ. Я так пробовал.
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.

frankyjohn2014
Offline
Зарегистрирован: 23.05.2016

Спасибо большое за ответ. Я так пробовал.
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.