Помогите с ретранслятором на 433 Мгц

Сергей Р
Offline
Зарегистрирован: 19.02.2016

Всем привет, подскажите пожалуйста, будет ли работать такой скетч в качестве ретранслятора радиопередачи на 433Мгц? Или поправьте пожалуйста что не так в коде. Дело в том, что из помещения через стену, сигнал пульта плохо доходит на улицу до шлагбаума. Думаю ретранслятор с антенкой 17см должен достать через стену.

[code]

#include <RCSwitch.h>
RCSwitch mySwitch = RCSwitch();
int led = 13;

void setup() {
  mySwitch.enableReceive(0);  // приёмник на 2
  mySwitch.enableTransmit(5); //передатчик на 5 
  pinMode(led, OUTPUT);
  pinMode(led, HIGH);
}
void loop() {
 
  unsigned long recive = mySwitch.getReceivedValue();
  if (mySwitch.available())
  {

    int value = mySwitch.getReceivedValue();
    if (value == 0) {

    }
    else {
      if (recive == 1234567, 24 )
      {
        //передаём
        digitalWrite(led, LOW );
        mySwitch.send(1234567, 24);

      }
    }
    mySwitch.resetAvailable();
  }
}
[/code]

 

5N62V
Offline
Зарегистрирован: 25.02.2016

А эта строчка что делает?

if (recive == 1234567, 24 )

Ну и 15 и 16 строки в странном порядке стоят.

Ну а еще надо обратить внимание на частотный разнос приемника и передатчика, либо же разносить прием/передача  по времени, причем в Вашем случае прерывания во время передачи надо запрещать.

Сергей Р
Offline
Зарегистрирован: 19.02.2016

Спасибо за поддержку, код исправил, частоту разнёс. Думаю должно работать. А как запретить на время прерывание, если на одной частоте? Через flag?

[code]

#include <RCSwitch.h>
RCSwitch mySwitch = RCSwitch();
int led = 13;

void setup() {
  mySwitch.enableReceive(0);  // приёмник на 2pin частота на 315Мгц
  mySwitch.enableTransmit(5); //передатчик на 5 pin частота на 433Мгц
  pinMode(led, OUTPUT);
  pinMode(led, HIGH);
}

void loop() {

  if (mySwitch.available())
  {
    unsigned long recive = mySwitch.getReceivedValue();
    int value = mySwitch.getReceivedValue();
    if (value == 0) { } // обработка:не верный формат данных
    else {
      if (value == 1234567, 24 )
      {
        digitalWrite(led, LOW );
        mySwitch.send(1234567, 24);//передаём
      }
    }
    mySwitch.resetAvailable();
  }
}
[/code]

 

5N62V
Offline
Зарегистрирован: 25.02.2016

я почему спросил про ту строчку, я ни разу не встречал, чтоб так писали.  Операторы, знаю, разделять запятыми можно, а  тут что - не понятно. Но компилятор не ругается.

Чтоб запретить прерывания на момент передачи можно сделать так:

cli();
функция передачи;
небольшая задержка, т.к. передача это не мгновенный процесс
sei();

 

Сергей Р
Offline
Зарегистрирован: 19.02.2016

Не помню где взял этот кусок  if (recive ==

Туда поставил запрет прерывания? ))

[code]

#include <RCSwitch.h>
RCSwitch mySwitch = RCSwitch();
int led = 13;

void setup() {
  mySwitch.enableReceive(0);  // приёмник на 2pin частота на 433Мгц
  mySwitch.enableTransmit(5); //передатчик на 5 pin частота на 433Мгц
  pinMode(led, OUTPUT);
  pinMode(led, HIGH);
}

void loop() {

  if (mySwitch.available())
  {
    unsigned long recive = mySwitch.getReceivedValue();
    int value = mySwitch.getReceivedValue();
    if (value == 0) { } // обработка:не верный формат данных
    else {
      if (value == 1234567, 24 )
      {
         digitalWrite(led, LOW );
cli();
  mySwitch.send(1234567, 24);//передаём
   delay(2000);
sei();

      }
    }
    mySwitch.resetAvailable();
  }
}
[/code]

 

b707
Offline
Зарегистрирован: 26.05.2017

Сергей Р пишет:

Не помню где взял этот кусок  if (recive ==

Сергей, если вы еще не поняли, то насчет "этой строчки" это был не вопрос, а намек - в ней написан бред. Работать оно не будет (во всяком случае не так, как вы ожидаете)

Сергей Р
Offline
Зарегистрирован: 19.02.2016

Да, спасибо, я потом понял что это моя не внимательность )) Спасибо вам за помощь и подсказку.

5N62V
Offline
Зарегистрирован: 25.02.2016

Сергей Р пишет:

Не помню где взял этот кусок  if (recive ==

Туда поставил запрет прерывания? ))

Туда :) Только задержка 2сек - это как-то жирно :)))  Я конечно не знаю что у Вас там за передавайчики используются, но , имхо, и 20мсек должно хватить.

Сергей Р
Offline
Зарегистрирован: 19.02.2016

Типа такого, ну да, с такой задержкой он и сам забудет что далал )))))

https://ru.aliexpress.com/item/1pair-2pcs-433mhz-rf-transmitter-and-rece...

 

 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Сергей Р пишет:

Да, спасибо, я потом понял что это моя не внимательность )) Спасибо вам за помощь и подсказку.

А откуда Вы знаете, как он ожидает?

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

5N62V пишет:

я почему спросил про ту строчку, я ни разу не встречал, чтоб так писали.  Операторы, знаю, разделять запятыми можно, а  тут что - не понятно. Но компилятор не ругается.

Почему не ругается? Предупреждение по идее должен выдать. Они у Вас в IDE выключены? Включите - полезно.

А вообще, конструкция вполне законная, только бессмысленная. 100% эквивалентна

if (recive == 24 )

5N62V
Offline
Зарегистрирован: 25.02.2016

ЕвгенийП пишет:

100% эквивалентна

if (recive == 24 )

а не if(24); ? Не совсем понятно каким образом 24 к переменной recive относится в том выражении?

Сергей Р
Offline
Зарегистрирован: 19.02.2016

В IDE всё включено. Ошибок небыло. Я слизал код , потом исправил под себя, а эту строчку как то пропустил, да и другое не так воткнул )). Проверить на железе небыло возможности.

Сергей Р
Offline
Зарегистрирован: 19.02.2016

1234567 код., 24 это bit. А про задержку. это шутка, пользователь пульта быстрей забудет что нажал )) Тут другой вопрос. Не могу отканировать пульт на 433 от шлагбаума. Другие пульты пожалуйста, даже doorhan отсканировал, а тут Итальянский попался, производитель уверяет что 443мгц. Может не в скетче а в железе искать ответ?

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Сергей Р пишет:
В IDE всё включено. Ошибок небыло. Я слизал код , потом исправил под себя, а эту строчку как то пропустил, да и другое не так воткнул )). Проверить на железе небыло возможности.

Значит не всё. Было бы всё, было бы сообщение

warning: left operand of comma operator has no effect [-Wunused-value]

По умолчанию (из коробки) предупреждения в IDE выключены. Если Вы их специально не включали, значит - не включено.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

5N62V пишет:

а не if(24); ? Не совсем понятно каким образом 24 к переменной recive относится в том выражении?

Да, конечно, виноват, бес попутал.

 

Сергей Р
Offline
Зарегистрирован: 19.02.2016

Проверю. Спасибо за совет. Нужная опция.

5N62V
Offline
Зарегистрирован: 25.02.2016

Сергей Р пишет:
1234567 код., 24 это bit. А про задержку. это шутка, пользователь пульта быстрей забудет что нажал )) Тут другой вопрос. Не могу отканировать пульт на 433 от шлагбаума. Другие пульты пожалуйста, даже doorhan отсканировал, а тут Итальянский попался, производитель уверяет что 443мгц. Может не в скетче а в железе искать ответ?

Ну, Сергей, мы можем поговорить только о том, что видим. Вот код - видим, обсуждаем кто во что гаразд. А пульт, сорри.... :)

Сергей Р
Offline
Зарегистрирован: 19.02.2016

ЕвгенийП пишет:

Сергей Р пишет:
В IDE всё включено. Ошибок небыло. Я слизал код , потом исправил под себя, а эту строчку как то пропустил, да и другое не так воткнул )). Проверить на железе небыло возможности.

Значит не всё. Было бы всё, было бы сообщение

warning: left operand of comma operator has no effect [-Wunused-value]

По умолчанию (из коробки) предупреждения в IDE выключены. Если Вы их специально не включали, значит - не включено.

Я тут про ошибки в IDE. Не правильный скетч ошибок не даёт. Где посмотреть? Вот мой скрин.

Сергей Р
Offline
Зарегистрирован: 19.02.2016

Сергей Р
Offline
Зарегистрирован: 19.02.2016

И ещё, я  бы создал тему относительно скетчам скана кодов для разных пультов. Разные пульты, разные скетчи и библиотеки, разные приёмники.

Как говорится, частота 433Мгц даже в африке не 433Мгц.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Сергей Р,

зачем Вы выложили скрин с настроками, если сами на него даже не смотрели?

А если смотрели, то неужели 7-ая строка в которой выбрано "Сообщения компилятора: Ничего" Вас не насторожила? Выберите там "всё" и будете получать много полезной ругани (предупреждений)