RCSwitch и светодиод

bmbhs
Offline
Зарегистрирован: 23.11.2016

Пытаюсь освоить библиотеку RCSwitch. Подключил передатчик. На приёмнике стоит светодиод, который должен загораться на секунду и гаснуть, когда приходит 1. Вроде всё работает, да только светодиод светит далеко не в полную силу. Я не могу понять в чём дело. Искал похожее в интернете, но там одна и тоже, и код одинаковый. В чём может быть проблема? ЗЫ есть у кого ссылки на описание команд из этой библиотеки??? Передатчик

#include <RCSwitch.h>

RCSwitch mySwitch = RCSwitch();

int a = 1;

void setup(){
  mySwitch.enableTransmit(10);
  Serial.begin(9600);
}

void loop(){
  sendRC(a);
  Serial.print(a);
  delay(3000);
}

void sendRC(unsigned long code){
  mySwitch.send(code,20);
}

 

Приемник

 

#include <RCSwitch.h>

RCSwitch mySwitch = RCSwitch();

int a = 0;
int led = 5;

void setup(){
  Serial.begin(9600);
  mySwitch.enableReceive(0);
}

void loop(){
  if (mySwitch.available()){
    int a = mySwitch.getReceivedValue();
    Serial.print(a);
    if (a == 1){
      digitalWrite(led,1);
      delay(1000);
      digitalWrite(led,0);
    }
  }
  mySwitch.resetAvailable();
}

 

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

Нужно сконфигурировать порт как выход - pinMode(led, OUTPUT);

bmbhs
Offline
Зарегистрирован: 23.11.2016

Спасибо. Разобрался с этой нелепой ошибкой.

А как мне передать сразу несколько переменных?? Я думаю, что нужно прописать несколько функций на передачу каждой переменной с маленькой задержкой, например, delay(5);?

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

Что за библиотеку Вы используете, не знаю, но если она написана правильно, небольшое количество переменных должно быть можно послать без пауз.

Посмотрите, обычно в подобных библиотеках используют буфер. Соответственно, можно единовременно отправить столько переменных, сколько помещается в буфере.

bmbhs
Offline
Зарегистрирован: 23.11.2016

Библиотека RCSwitch. В интернете одни и теже примеры и описание не могу найти

Perdimonocle
Offline
Зарегистрирован: 19.10.2012

Меня тоже интересует как передать сразу несколько переменных, используя библиотеку RCSwitch?

 

Perdimonocle
Offline
Зарегистрирован: 19.10.2012

Мне нужно передать параметры двух датчиков. Одновременно.

Есть вариант значения преобразовать в строки; эти строки объединить через разделитель, например, пробел; передать, а при получении строку по разделителю разделить и получившиеся строки преобразовать в число...

Хотелось бы что-то попроще.

Оговорюсь сразу: библиотеку менять нельзя...

sadman41
Offline
Зарегистрирован: 19.10.2016

Какие значения принимают числа, которые вы хотите передать?

Perdimonocle
Offline
Зарегистрирован: 19.10.2012

от -255 до +255

sadman41
Offline
Зарегистрирован: 19.10.2016

Вот вам вариант: берете четырехбайтовое число, в первые два байта пихаете значение первой метрики, в другие - второй. Передаете число... на принимающей стороне разбираете. Сделать можно через union.

Perdimonocle
Offline
Зарегистрирован: 19.10.2012

Не велика разница: или строку передавать, или по битово запихнуть значения в число...

Хотелось бы как-то поизящнее...

sadman41
Offline
Зарегистрирован: 19.10.2016

Ну вы даете. Напишите код с юнионом и сравните с формированием-разбором строки. Потом расскажете - велика разница или нет.

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

Perdimonocle пишет:
Хотелось бы как-то поизящнее...
Вам предлагали изящный вариант. А Вы наверно хотите изящество в стиле Джона Сильвера.

Perdimonocle
Offline
Зарегистрирован: 19.10.2012

Да,  согласен с union лучше получается.

А что изящного у Джона Сильвера? Если мне не изменяет память, у него была деревянная нога...

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

Perdimonocle пишет:
А что изящного у Джона Сильвера? Если мне не изменяет память, у него была деревянная нога...
Многие считают изяществом иметь вместо ноги - костыль. Ну вкусы у людей разные.