два приемника 433/315 на одну ардуино

Тема в разделе "Проводная и беспроводная связь", создана пользователем RRR111, 14 окт 2017.

  1. RRR111

    RRR111 Нерд

    Доброго времени суток!
    Есть желание подключить сразу два приемника по частоте (315 и 433 одновременно) к одной плате ардуино. Пробовал подключить просто их параллельно, но видимо, так не хватает им на двоих питания или один канал связи (2 пин) не может поддерживать сразу два приемника, хотя информацию передаю только по одной частоте (отправляю код с другой ардуины на одной из этих частот). Решил попробовать более хитрый метод, один приемник 433 подключить к 5V ардуино, 2 пин (передача данных), земля, второй приемник 315: 7пин (питание), 3 пин(передача данных), земля. Но тоже не работает (перестает принимать данные, если отключить от шинки передачи данных, например, откинуть 3 пин и передавать информацию по частоте 433 тогда прием данных сразу продолжается, как только подключить третий пин, а передачу данных оставить как и прежде только по 433, то прием данных сразу прерывается).
    Для этого вот такой скетч использую
    Код (C++):

    #include <RCSwitch.h>

    RCSwitch mySwitch = RCSwitch();
    RCSwitch mySwitch1 = RCSwitch();
    void setup() {
    pinMode (7, OUTPUT); //задаем что 7 пин - это выход
    digitalWrite (7, HIGH); //делаем 7 пин в качестве питания второго по частоте приемника
      Serial.begin(9600);
      mySwitch.enableReceive(0);  // 2ПИН для приемника
    mySwitch1.enableReceive(1);   // 3ПИН для второго приемника
    }

    void loop() {
      if (mySwitch.available()) {
     
        int value = mySwitch.getReceivedValue();
     
        if (value == 0) {
          Serial.print("Unknown encoding");
        } else {
          Serial.print("Received ");
          Serial.print( mySwitch.getReceivedValue() );
          Serial.print(" / ");
          Serial.print( mySwitch.getReceivedBitlength() );
          Serial.print("bit ");
          Serial.print("Protocol: ");
          Serial.println( mySwitch.getReceivedProtocol() );
        }

        mySwitch.resetAvailable();
      }



      if (mySwitch1.available()) {
     
        int value = mySwitch1.getReceivedValue();
     
        if (value == 1) {
          Serial.print("Unknown encoding");
        } else {
          Serial.print("Received ");
          Serial.print( mySwitch1.getReceivedValue() );
          Serial.print(" / ");
          Serial.print( mySwitch1.getReceivedBitlength() );
          Serial.print("bit ");
          Serial.print("Protocol: ");
          Serial.println( mySwitch1.getReceivedProtocol() );
        }

        mySwitch1.resetAvailable();
      }
    }
     
    Можно ли как-то подключить и подружить сразу два приемника с одной ардуиной?
    ПС. передатчики тупо параллелятся и нормально работают при этом.
     
    Последнее редактирование: 14 окт 2017
  2. brokly

    brokly Гик

    Видимо ваши приемники имеют низкую избирательность. Иными словами они принимают на основной частоте, но и на не своей частоте иногда срабатывают. Поэтому у вас прерывания от "неправильного" приемника мешают правильно обработать данные от правильного приемника. Не думаю, что возможно разрешить эту коллизию, пока вы пользуете библиотеки. Естественно это версия, которая требует проверки.
    А вот про питание модуля я не понял... Вы его пытаетесь запитать с ноги настроеной на выход ? Нет, такое конечно иногда делают, но в вашем случае, мне кажется выход слабоват для такого финта.
     
    Последнее редактирование: 23 окт 2017