Подскажите люди добрые передатчик FS1000A 315 Mgz и радиопатрон, как их подружить?

Тема в разделе "Проводная и беспроводная связь", создана пользователем СМС-ка, 13 дек 2015.

  1. СМС-ка

    СМС-ка Нуб

    Добрый день, вечер, ночер, утро :)
    Столкнулся с такой проблемкой:
    1. Имеется китайский радиопатрон на 315 Мгц [​IMG]
    под приемником микруха без маркировки. и пультик
    [​IMG]
    с микросхемой ТС369В В2804740.1.
    считал кнопки пульта на библиотеке RemoteSwitch.
    при помощи скетча:
    Код (C++):
    #include <RemoteReceiver.h>

    void setup() {
      Serial.begin(9600);

      // Initialize receiver on interrupt 0 (= digital pin 2), calls the callback "showCode"
      // after 3 identical codes have been received in a row. (thus, keep the button pressed
      // for a moment)
      //
      // See the interrupt-parameter of attachInterrupt for possible values (and pins)
      // to connect the receiver.
      RemoteReceiver::init(0, 3, showCode);//приемник вешаем на 2 пин(0 прерывание), 3-мин. количество повторов
    }

    void loop() {
    }

    // Callback function is called only when a valid code is received.
    void showCode(unsigned long receivedCode, unsigned int period) {
      // Note: interrupts are disabled. You can re-enable them if needed.

      // Print the received code.
      Serial.print("Code: ");
      Serial.print(receivedCode);
      Serial.print(", period duration: ");
      Serial.print(period);
      Serial.println("us.");
    }
    получилось:
    on/off 24bit protocol 1 / 511704 242us ( плавающие от 238, 239, 240, 241)
    sleep 24bit protocol 1 / 511686 241us (плавающие от 238, 239, 241, 242, 271,)
    залил скетч на ардуино уно,
    скетч:
    Код (C++):

    #include <RemoteTransmitter.h>
    unsigned int period = 242;  //period duration
    unsigned long codeA;         //code
    unsigned long transmitCodeA = 511704;

    const int  Button1 = 4;
    int   buttonState1 = 0;

    void setup() {
      Serial.begin(9600);
    //формируем код отправки
      codeA = transmitCodeA & 0xFFFFF;
      codeA |= (unsigned long)period << 23;
      codeA |= 3L << 20;

      pinMode(Button1, INPUT);
    }


    void loop() {

      buttonState1 = digitalRead(Button1);
      if ((buttonState1 == HIGH)){
          RemoteTransmitter::sendTelegram(codeA,3);
      }
      if ((buttonState1 == LOW))
      {
      }

      Serial.print("Code: ");
      Serial.print(transmitCodeA);

      Serial.print(", period duration: ");
      Serial.print(period);

      Serial.print("Button: ");
      Serial.print(buttonState1);
    delay(10);
    }
     
    Ну в итоге ситуацию такая: родной пульт работает на приличном расстоянии, с ардуины - максимум 20 см. Припаивал антены от 10 до 50 см, результаты не поменялись. Решил поэкспериментировать - перепаял на радио патроне приемник на покупной, вот такой:
    [​IMG]
    тока на 315 Мгц соответственно. В итоге с ардуины работает на ура и без всяких антенн, а вот с пульта родного максимум 20 см.
    Ну думаю наверное приемник или передатчик косячный. Взял другое устройство (на 433 Мгц), вот такое:
    [​IMG]
    Конечно считал кнопки, все настроил и.... ну опять также петрушка - работа в пределах 20 см максимум.

    Пробовал и на RSCWitch , получались такие данные:
    on/off Decimal: 6116800 (24Bit) Binary: 010111010101010111000000 Tri-State: FF1FFFFF1000 PulseLength: 243 microseconds Protocol: 1
    Raw data: 7536,228,744,720,248,228,744,712,256,712,260,708,260,228,744,712,256,228,744,712,256,228,744,708,260,228,744,708,260,228,744,708,264,704,260,712,260,224,744,228,744,224,744,228,744,224,744,228,744,

    Скетч отправки:
    Код (C++):

    #include <RCSwitch.h>

    RCSwitch mySwitch = RCSwitch();

    void setup() {

    Serial.begin(9600);

    mySwitch.enableTransmit(10);

    mySwitch.setPulseLength(242);

    // Optional set protocol (default is 1, will work for most outlets)
    mySwitch.setProtocol(1);

    // Optional set number of transmission repetitions.
    mySwitch.setRepeatTransmit(10);

    }

    void loop() {

    /* See Example: TypeA_WithDIPSwitches */
    mySwitch.switchOn("11000", "10000"); [B][U][I]Так и не понял откуда это берется? группа и тип???[/I][/U][/B]
    delay(700);
    mySwitch.switchOff("11000", "10000");
    delay(700);

    /* Same switch as above, but using decimal code */
    mySwitch.send(6116800, 24);
    delay(700);
    mySwitch.send(511704, 24); [B][I][U]Попробовал и такой код отправить [/U][/I][/B]
    delay(700);

    /* Same switch as above, but using binary code */
    mySwitch.send("010111010101010111000000");
    delay(700);
    mySwitch.send("010111010101010111000000");
    delay(700);

    /* Same switch as above, but tri-state code */
    mySwitch.sendTriState("FF1FFFFF1000");
    delay(700);
    mySwitch.sendTriState("FF1FFFFF1000a");
    delay(700);

    delay(10000);
    }
    Ну в итоге ни к чему путевому меня это не привело :( Ну вроде куда проще отсканировать коды пульта и отправить их?! А вот не тут то было.
    Вот калькулятор частот: http://www.csgnetwork.com/freqwavelengthcalc.html
    Кто что подскажет?

    И еще вопрос: Почему при чтении кнопок duration получается 242, а при отправке 356, хотя ей четко указано что 242???
     
    Последнее редактирование: 16 дек 2015