arduino RF433Mhz

максим1984
Offline
Зарегистрирован: 10.03.2014

Ребята помогите , нужен пример скетча для управления пинами ардуины (вкл.выкл) с радио брелка,

Коды и период с брелка считал с помощъю библиотеки RemoteSwitch:

 код 1 кнопки 18060 период 348, 

код 2 кнопки 18062 период 348.

задача такова . при нажатии 1-ой кнопки на пин13 появляется  +5в

при нажатии 2-ой кнопки напряжение пропадает .

 

 

 

Andrey_Y_Ostanovsky
Offline
Зарегистрирован: 03.12.2012

Это что-то типа "помигать светодиодом" при наступлении условия "18060"? Где у Вас появляется этот "код кнопки" - там его и ловите...

максим1984
Offline
Зарегистрирован: 10.03.2014
я код узнаю с помощъю вот этого скетча
 
 
#include <RemoteReceiver.h>
// Connect the receiver to digital pin 2.-пин 2.это вход для Радиоприёмника
void setup() {
  Serial.begin(9600);  
  RemoteReceiver::init(0, 3, showCode);
}
void loop() {
}
void showCode(unsigned long receivedCode, unsigned int period) {  
  Serial.print("Code: ");
  Serial.print(receivedCode);
  Serial.print(", period duration: ");
  Serial.print(period);
  Serial.println("us.");
}
Andrey_Y_Ostanovsky
Offline
Зарегистрирован: 03.12.2012

Мне кажется, что функцию showCode надо запускать не один раз при старте (setup), а периодически с интервалом в несколько секунд (loop), а там уже обрабатывать условие

if (receivedCode == 18060) { Serial.println("18060 Found!"); "моргаем светодиодом";}

максим1984
Offline
Зарегистрирован: 10.03.2014

Андрей  можно по подробней, как это все должно выглядеть,

я в железе отлично соображаю а вот в программировании подчти 0.

Andrey_Y_Ostanovsky
Offline
Зарегистрирован: 03.12.2012

https://github.com/jccprj/RemoteSwitch-arduino-library/blob/master/examp...

Вот здесь в примерах надо покопаться, как правильно вызывать функцию... Хотя, судя по комментариям, попавшимся в интернете, при инициализации приемника взводится прерывание, которое потом и надо обрабатывать в теле программы:

//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);

Таким образом функция showCode вызывается самостоятельно, при наступлении события, хотя, по всем канонам, "медленные" операции внутри прерывания делать не рекомендуется.

В качестве проверки я бы заменил Serial.print(receivedCode); на условие, которое я привел выше, дописав туда команду на включение светодиода.

максим1984
Offline
Зарегистрирован: 10.03.2014

Спасибо. буду пробовать 

artm
Offline
Зарегистрирован: 12.04.2015

Удалось ли Вам решить задачу или найти пример скетча?

X-Dron
Offline
Зарегистрирован: 24.01.2015

А что еще остались вопросы? Помоему, все уже разжевано. У Осипова на ютубе много материалов по беспроводному управлению.
Включить/выключить лампочку (реле) с пульта можно вообще без ардуино. Есть обучаемые беспроводные реле.

artm
Offline
Зарегистрирован: 12.04.2015

У меня задача такая же, как была в вашем вопросе, один в один. И именно такого решения я не нашел. Осипова перерыл, там нашел варианты ардуино+готовые розетки в различных вариациях. А так, чтобы готовый пульт+ардуино(с ресивером 433 и реле) не нашел.
Если вдруг попадется и ткнете пальцем - буду благодарен.
Про беспроводные реле обучаемые первый раз слышу, сейчас погуглю такую тему.
Спасибо!

X-Dron
Offline
Зарегистрирован: 24.01.2015

http://ru.aliexpress.com/wholesale?catId=0&initiative_id=SB_201504120445...

Если, все-таки, хотите на arduino, то коды кнопок в студию. Код 10 строк максимум.

artm
Offline
Зарегистрирован: 12.04.2015

Коды кнопок, считанные при помощи библиотеки <NewRemoteReceiver.h>:

Addr 11730802 unit 4 on, period: 214us.
Addr 11730802 unit 4 off, period: 214us.

В своей системе я использую вот такой пульт: http://www.nexa.se/TMT-918-Digital-Fjaerrkontroll.htm
поэтому у меня все через ардуино, я встраиваю реле с ардуиной прямо в бытовую технику.
До этого делал это все на IR пульте, но обнаружились неудобства. К тому же в этом пульте есть встроенный таймер
на 16 каналов, поэтому взял его за базу.
 

X-Dron
Offline
Зарегистрирован: 24.01.2015

Коды нужны на основе скетча из 3-го поста топика,
http://arduino.ru/forum/programmirovanie/arduino-rf433mhz#comment-64117
NewRemoteSwitch хороша, но слишкомм наворочена для данной задачи.
либа RemoteSwitch
https://github.com/jccprj/RemoteSwitch-arduino-library

 

artm
Offline
Зарегистрирован: 12.04.2015

К сожалению, только NewRemoteSwitch может прочитать коды с этого пульта. А трех-четырех кнопочные пульты, которые может прочитать RemoteSwitch меня не устраивают (((

В третьем посте расписано только получение кодов и вывод в порт. Я не программер, поэтому ищу готовое решение, как полученный код направить на исполнение управлением реле.

X-Dron
Offline
Зарегистрирован: 24.01.2015

Кто сказал, что RemoteSwitch принимает только трех-четырех кнопочные пульты?
на 5262-энкодере можно хоть 12, правда адрес устройства будет всегда одинаков.
В третьем посте 90% решения Вашей задачи. Так же как в  ShowReceivedCode.ino библиотеки NewRemoteSwitch.

 

X-Dron
Offline
Зарегистрирован: 24.01.2015
#include <NewRemoteReceiver.h>

void setup() {
  NewRemoteReceiver::init(0, 2, RCV_INT);
  pinMode(13, OUTPUT);
}

void loop() {
}

// Callback function is called only when a valid code is received.
void RCV_INT(NewRemoteCode receivedCode) {
  if (receivedCode.address == 11730802 && !receivedCode.groupBit && receivedCode.unit == 4){
    if (receivedCode.switchType == 0) digitalWrite(13, LOW); 
    if (receivedCode.switchType == 1) digitalWrite(13, HIGH);
  }
}

 

artm
Offline
Зарегистрирован: 12.04.2015

Спасибо большое, Добрый человек!!!
Все заработало как надо!

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

Short Circuit
Short Circuit аватар
Offline
Зарегистрирован: 17.05.2015

Проверял работу NewRemoteReceiver, поигрался с пультами управления, бросается необычность работы этих библиотек: они тупят.. Мне кажется, что они код своеобразно медленно обрабатывают, или оно так и есть? CRC библиотеки проверяют?

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

А Ардуина так не умеет, что наводит на мысли о плохой оптимизации приема радиопосылок в таких простых устройствах.

Кто знает в чем проблема?

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

Short Circuit пишет:

А Ардуина так не умеет, что наводит на мысли о плохой оптимизации приема радиопосылок в таких простых устройствах.

Кто знает в чем проблема?

если вы имеете в виду дешевые китайские поделки на 433Мгц... то там проблема очень проста... они для гарантированой приема-передачи орут в канал по 2-3 секунды... как вариант ардуина терпеливо слушает все до конца.... 

Short Circuit
Short Circuit аватар
Offline
Зарегистрирован: 17.05.2015

там не важно, что приемник с алли стандартный дешевый.  Этот же приемник стоит  во многих устройства и те устройства принимают даже когда расстояние 20 метров и есть сигнал+шум. Ардуиновская же библиотека принимает сигнал только если нет шума! (смотрел осцилографом), что наводит на мысли - там все далеко от совершенства. К сожалению разбираясь неплохо в железе - но пока плохо понимаю как те библиотеки работают, в программировании не силен.