Nrf24l01+

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

Casper17 пишет:

Факт в том что работает. Может в библиотеке как-то програмно заменяется... И если не переназначать, то как можно реализовать правильно?

факт в том что SPI нельзя никуда переназначить... 

вы видимо не читали внимательно что у вас вообще за дисплей....

Casper17
Offline
Зарегистрирован: 21.06.2013

Подскажите где скачать библиотеку nRF24L01. Раз тут рекомендуют rf24 и nRF24L01.

maksim
Offline
Зарегистрирован: 12.02.2012

Casper17 пишет:

Проблемма решилась путем изменения пинов miso и mosi у LCD на любые другие, в моем случае на 43, 44. И все заработало))

LiquidCrystal lcd(43, 44, 5, 4, 3, 2);

Casper17 пишет:

Факт в том что работает. Может в библиотеке как-то програмно заменяется... И если не переназначать, то как можно реализовать правильно?

На что вам было написано:

maksim пишет:

Casper17 пишет:

*   RS(MISO), E(MOSI), DB4, DB5, DB6, DB7
*/
LiquidCrystal lcd(50, 51, 5, 4, 3, 2);

И как результат ничего не работает.

SPI: 50 (MISO), 51 (MOSI), 52 (SCK), 53 (SS). 

И кстати, а где мануал?

Если не ясно - то расшифровываю - выводы RS и Е дисплея подключены к тем же выводам что и MISO,  MOSI, которые уже заняты SPI для работы с nRF24L01. По этой причине и не работает.

 

Puhlyaviy пишет:

я так понял что дисплей тоже на SPI

Puhlyaviy пишет:

какая у вас клева SPI раз и на другие пины переназначил... вот бы мне где такую найти...

Не правильно поняли, это обычный дисплей с 4-битной шиной и может работать на любых выводах.

Casper17
Offline
Зарегистрирован: 21.06.2013

С Уны

#include <SPI.h>
#include "RF24.h"
RF24 radio(8, 7);

const uint64_t pipes[2] = {0xF0F0F0F000LL, 0xF0F0F0F0FFLL};
// адреса каналов приема и передачи
float data=0;

int thermoPin = 0;
float th_raw;
double th;

void setup(){
  Serial.begin(9600);
  radio.begin(); 
   radio.setPayloadSize(32); 
  radio.setDataRate(RF24_250KBPS);
  radio.setChannel(10);
  radio.setRetries(15,15);
  radio.openWritingPipe(pipes[0]);
  radio.openReadingPipe(1, pipes[1]);
  radio.startListening();
  
}

void loop(){
  th_raw = analogRead(thermoPin);
    float voltage = (5.0 / 1024.0 * analogRead(thermoPin));
    th = -1481.96 + sqrt(2.1962*pow(10,6)+((1.8639-voltage)/(3.88*pow(10,-6))));
    Serial.print( th );
    Serial.println(" C");
   radio.stopListening();
    data=th;
   radio.write(&data, 32);
    radio.startListening();
  
  
    delay(1000);
}

На Мегу

/* Подключаем библиотеку для работы с LCD */
#include <LiquidCrystal.h>
/* Создаём объект LCD-дисплея, используя конструктор класса LiquidCrystal
* с 6ю аргументами. Библиотека по количеству аргументов сама определит,
* что нужно использовать 4-битный интерфейс.
* Указываем, к каким пинам Arduino подключены выводы дисплея:
*   RS(MISO), E(MOSI), DB4, DB5, DB6, DB7
*/
LiquidCrystal lcd(38, 39, 5, 4, 3, 2);

#include <SPI.h>

#include "RF24.h"
RF24 radio(8, 7);

const uint64_t pipes[2] = {0xF0F0F0F000LL, 0xF0F0F0F0FFLL}; // адреса каналов приема и передачи
float data=0;
int flag=0;
int a=1;
int b=0;
void setup(){
  
  
  Serial.begin(9600);
  pinMode(13, OUTPUT);
  
  /* Инициализируем дисплей: 2 строки по 16 символов */
 lcd.begin(16, 2);
 /* Выводим на дисплей  фразу  */
 lcd.print("Temperatura!");
 
  radio.begin();
  radio.setPayloadSize(32);  
  radio.setDataRate(RF24_250KBPS); // Скорость передачи
  radio.setChannel(10); // Номер канала от 0 до 127
  radio.setRetries(15,15); // Кол-во попыток и время между попытками
  radio.openWritingPipe(pipes[1]);  // Открываем канал передачи
  radio.openReadingPipe(1, pipes[0]); // Открываем один из 6-ти каналов приема
  radio.startListening(); // Начинаем слушать эфир
}

void loop(){
  Serial.println(a);
  Serial.println(b);
  delay(1000);
  if(digitalRead(9)==HIGH && flag==0)//если кнопка нажата    
     // и перемення flag равна 0 , то ... 
     { 
          
       digitalWrite(13,!digitalRead(13)); 
       flag=1; 
        //это нужно для того что бы с каждым нажатием кнопки 
        //происходило только одно действие 
        // плюс защита от "дребезга"  100% 
        
     } 
        
      if(digitalRead(9)==LOW&&flag==1)//если кнопка НЕ нажата 
     //и переменная flag равна - 1 ,то ... 
     { 
           
        flag=0;//обнуляем переменную flag 
     } 

  
  if(radio.available()){
    //char data[32] = "";
    
    radio.read(&data, 32);
    //Serial.println(data);
    }
    
  /* Устанавливаем курсор в 1 столбец 2й строки. Нумерация идёт с нуля,
  * первым аргументом идёт номер столбца.
  */
 lcd.setCursor(0, 1);
 
 lcd.print(data);

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

int flag=0; 

void setup()    
{ 
       
    pinMode(13, OUTPUT);         
      
        
} 

void loop() 

{ 
        
     if(digitalRead(9)==HIGH&&flag==0)//если кнопка нажата    
     // и перемення flag равна 0 , то ... 
     { 
           
       digitalWrite(13,!digitalRead(13)); 
       flag=1; 
        //это нужно для того что бы с каждым нажатием кнопки 
        //происходило только одно действие 
        // плюс защита от "дребезга"  100% 
        
     } 
        
      if(digitalRead(9)==LOW&&flag==1)//если кнопка НЕ нажата 
     //и переменная flag равна - 1 ,то ... 
     { 
           
        flag=0;//обнуляем переменную flag 
     } 
} 

На Меги работает отлично, но когда его добавляешь в код для приема тепмературы, то работать перестает. Я долго выяснял в чем проблемма и выяснилось, что в переменую flag которая изначально равна нулю, через пару секунд записываются левые значения, хотя кнопку не нажимал. Для эксперемента добавил две переменные, a=1 и b=0. И начинаю их выводить в монитор... Переменная а не изменяется, а вот переменная b начинает изменяться сама собой. 

Переменная flag то же изменяется т.к. изначально она равна 0. В следствии чего светодиод не работает! Почему так происходит? И когда закоментируешь прием данных из эфира, все начинает работать хорошо.

axill
Offline
Зарегистрирован: 05.09.2011

Puhlyaviy пишет:

факт в том что SPI нельзя никуда переназначить... 

вы видимо не читали внимательно что у вас вообще за дисплей....

не забывайте про софтверный SPI - его назначить можно на любые выводы

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

axill пишет:

Puhlyaviy пишет:

факт в том что SPI нельзя никуда переназначить... 

вы видимо не читали внимательно что у вас вообще за дисплей....

не забывайте про софтверный SPI - его назначить можно на любые выводы

канечно помню... просто это на мой взгляд костыль... оно конечно при определеном упорстве можно даже PCI эмулировать на ардуине... только смысл в чем?

axill
Offline
Зарегистрирован: 05.09.2011

Puhlyaviy пишет:

канечно помню... просто это на мой взгляд костыль... оно конечно при определеном упорстве можно даже PCI эмулировать на ардуине... только смысл в чем?

при чем здесь PCI? полно примеров проектов и библиотек с софтверным SPI - отлично работают.

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

axill пишет:

при чем здесь PCI? полно примеров проектов и библиотек с софтверным SPI - отлично работают.

дык я ж не спорю.. оно все отлично работает... ПООТДЕЛЬНОСТИ.. пока не начинаеш собирать все в кучу...

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

но есть железный SPI и на практике очень тяжело его загрузить максимально допустимым количеством устройств... нафига еще софтерный?

 

axill
Offline
Зарегистрирован: 05.09.2011

у примеру ustas приводил конкретный пример когда потребовалась софтверная реализация SPI для работы с NRF24 http://habrahabr.ru/post/171613/

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

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

axill пишет:

у примеру ustas приводил конкретный пример когда потребовалась софтверная реализация SPI для работы с NRF24 http://habrahabr.ru/post/171613/

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

uscr
Offline
Зарегистрирован: 17.08.2012

Здравствуйте! Приобрёл обсуждаемые модули, завёл их с библиотекой  RF24 - всё нравится. Дальнобойность превзошла самые смелые ожидания. Вопрос такой: полагаю, указанная библиотека позволяет получить данные о модуле. При запуске примера некая информация даже выводится. Там есть вызов:

  // Dump the configuration of the rf unit for debugging
  //

  radio.printDetails();

Делаю так же в своей программе - ничего не вижу в мониторе порта. В чём магия?

mitekg
Offline
Зарегистрирован: 14.05.2013

Прошу помощи. Туплю

залил из https://github.com/maniacbug/RF24Network

беру пример sensornet.pde

далее при старте вызывается конфигуратор нода:

https://github.com/maniacbug/RF24Network/blob/master/examples/sensornet/...

нажимаю "R" далее просит адрес, не договняю в каком формате ему его скормить.. чувствую себя идиотом.

мне нужен рутовый нод и пару сенсоров.

подскажите че я делаю не так?

Сенкс

axill
Offline
Зарегистрирован: 05.09.2011

uscr пишет:

Здравствуйте! Приобрёл обсуждаемые модули, завёл их с библиотекой  RF24 - всё нравится. Дальнобойность превзошла самые смелые ожидания. Вопрос такой: полагаю, указанная библиотека позволяет получить данные о модуле. При запуске примера некая информация даже выводится. Там есть вызов:

  // Dump the configuration of the rf unit for debugging
  //

  radio.printDetails();

Делаю так же в своей программе - ничего не вижу в мониторе порта. В чём магия?

нужно не забыть это

#include <printf.h>

и это

printf_begin();

 

mitekg
Offline
Зарегистрирован: 14.05.2013

неужели никто не запускал этот пример) ?

011 и прочее не хочет жрать..

отбой. таки разобрался!

arturmon
Offline
Зарегистрирован: 02.07.2011

а кто нибуть уже пробовал реализовать как в http://habrahabr.ru/post/171613/?

а то в этой теме только смотрю или мирф или rf24 но совсем базовый, как то не вырисовывается общая картина с темы из хабра.

flying
Offline
Зарегистрирован: 12.11.2011

Подскажите пожалуйта как отправлять состояние кнопок на другую ардуину. К примеру включить светодиод, через  сериал монитор все работает, а вот через кнопку никак не могу сделать.

maksim
Offline
Зарегистрирован: 12.02.2012

Так же как и через сериал монитор.

mitekg
Offline
Зарегистрирован: 14.05.2013

Не получается. У кого есть опыт объединения в одной меге работу с nrf21 и ENC28J60 на базе RF24Network и EtherCard.h

http://arduino.ru/forum/obshchii/podklyuchenie-neskolkikh-ustroistv-po-spi

Конфликтует переопределнный PROGMEM.

Очень прошу помощи. Спасибо

 

 

Casper17
Offline
Зарегистрирован: 21.06.2013

В библиотеке RF24Network в примере helloworld для чего используется header и как им правильно пользоваться. Я так понял это заголовок чего-то отсылается, но чего? Данного устройства?

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

Casper17 пишет:

В библиотеке RF24Network в примере helloworld для чего используется header и как им правильно пользоваться. Я так понял это заголовок чего-то отсылается, но чего? Данного устройства?

читайте код и все увидите, header это адрес кому вы отсылаете.

CityCat
CityCat аватар
Offline
Зарегистрирован: 13.06.2013

Все равно не могу понять...

Есть 2 ардуины Pro mini (ну или nano - не принципиально). Кроме передатчиков (NRF24L01+) ничего не подключено.

Подключаю по рисунку:

 

MOSI (NRF24) -> 11 (MOSI),
MISO (NRF24) -> 12 (MISO),
SCK (NRF24) -> 13 (SCK),
SCN (NRF24) -> 9,
CE (NRF24) -> 10,
ну и соответственно, VCC и GND - VCC (+5) и GND ардуин.

Использую библиотеку https://github.com/maniacbug/RF24Network файлы https://github.com/maniacbug/RF24Network/blob/master/examples/helloworld_rx/helloworld_rx.pde и https://github.com/maniacbug/RF24Network/blob/master/examples/helloworld_tx/helloworld_tx.pde прямо как есть, ничего не меняя (разве что пробовал скорость порта, но и то вернул на место).

Итог - "Sending...failed"

Ни разу не работал с данными модулями. Подскажите, где косяк? Что не учел?

Или   покажите, пожалуйста два скетча - приемника и передатчика (с программным SPI) кто-нибудь.

P.S. Тему сначала читал раз 5 - запутался больше чем что-то понял.

maksim
Offline
Зарегистрирован: 12.02.2012

CityCat пишет:

ну и соответственно, VCC и GND - VCC (+5) и GND ардуин.

Плохо читали, померла скорее всего ваша НРФка. 

arturmon
Offline
Зарегистрирован: 02.07.2011

Кроме того что входы толерантны к 5 вольтам, так rf24l01 спокойно у меня работала от 5 вольт, ну ни как не умерла после этого ) и это не только у меня в инете полно инфы что от 5 вольт работает нормально... но лучше не рисковать и садить на 3.3

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

arturmon пишет:

Кроме того что входы толерантны к 5 вольтам, так rf24l01 спокойно у меня работала от 5 вольт, ну ни как не умерла после этого ) и это не только у меня в инете полно инфы что от 5 вольт работает нормально... но лучше не рисковать и садить на 3.3

насколько я помню в другой теме, вы так и не смогли ничего никуда отправить.. так что эт под большим вопросом как оно у вас от 5 вольт работает! 

как бы есть спецификация чипа и там написано что 3.6 вольта максимально.. и на платке не наблюдается никаких стабилизаторов напряжения... а по поводу в инете пишут.. так на заборах тоже много что пишут...

arturmon
Offline
Зарегистрирован: 02.07.2011

Все прекрасно отправляется и принимается. Только не по феншую не пакетами, а просто функциями.

CityCat
CityCat аватар
Offline
Зарегистрирован: 13.06.2013

Спасибо за подсказку. Как-то совсем подзабыл (и видел же, но совсем вылетело из головы) про 3.3 вольта :(

Да, как только поставил нужное питание вышеуказанные примеры заработали.

Krowten
Offline
Зарегистрирован: 15.08.2013

Помогите разобраться в  чем косяк. Подрубаю 2 модуля NRF24L01+ к двум клонам pro mini на atmega328 5v  - вот эти, питяю от таких usb переходников, у них два напряжения на выходе 5 и 3.3v, на модули 3.3 подаю, на атмегу 5 соответсвенно, входы этих модулей вроде как толерантны к 5 v. - arduino зацепил напрямую. Подключил, пробовал разные либы mirf / rf24, ради чистоты эксперемента все примеры из ветки и соответсвенно родные примеры, менял , модули не видят друг друга хоть убей.

Что еще проделывал: Проверил по даташиту на свой контроллер соответсвие пинов (вдруг китайцы накосячили) - все ок. Для RF24  SCN -> 9, CE  -> 10, для mirf - ноги 8 и 7, (так же пробовал менять местами для проверки - сыпет в порт какую-то дрянь). Потыкал мультом - вроде питалово не просевшее, в пределах нормы, на всякий подпаял конденсаторы как советовали в этой ветке, так же пробовал питать не от порта usb а от таких модулей. Гдето вычитал - советуют разнести модули на метр между собой, тягал результат тот же. Соответсвенно пробовал менять местами прошивки приемника и передатчика, пробовал менять канал - хотя тут помех вообще не должно быть. Модули целые скорей всего, т.к. у меня их 10 штук, менял, результат тот же. Короче на все попытки результат один, стандартный пример передатчика mirf выдает

Finished sending
Timeout on response from server!

Модули вроде определяются корректно, вывод функции printDetails()

STATUS		 = 0x0e RX_DR=0 TX_DS=0 MAX_RT=0 RX_P_NO=7 TX_FULL=0
RX_ADDR_P0-1	= 0x3176726573 0xf0f0f0f0d2
RX_ADDR_P2-5	= 0xc3 0xc4 0xc5 0xc6
TX_ADDR		 = 0x3176726573
RX_PW_P0-6	 = 0x04 0x20 0x00 0x00 0x00 0x00
EN_AA		 = 0x3f
EN_RXADDR	= 0x03
RF_CH		 = 0x4c
RF_SETUP	= 0x07
CONFIG		= 0x0f
DYNPD/FEATURE	= 0x00 0x00
Data Rate	= 1MBPS
Model	 	= nRF24L01+
CRC Length	 = 16 bits
PA Power	 = PA_HIGH

2 бессонные ночи, тонна выпитого кофе - я х.з. в какую сторону копать )

ustas
Offline
Зарегистрирован: 12.03.2012

а в сериал мониторе назначили роли модулям?

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

ustas пишет:

а в сериал мониторе назначили роли модулям?

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

toc
Offline
Зарегистрирован: 09.02.2013

Krowten, сравните полный вывод двух ваших изделий с прошитым примером из библиотеки RF24, кажется, ping pair называется. Лучше тексты сюда вставьте. Какие конкретно модули? Мне кажется, что маленькие зелёные с антенной чуть похожей на ? - лучшие (получил год назад). Был ещё большой с усилителем (PA SMA LNA), прожил пару месяцев. 

Krowten
Offline
Зарегистрирован: 15.08.2013

ustas пишет:

а в сериал мониторе назначили роли модулям?

Не понял о чем речь ) Сильно не пинайте я как бы начинающий ардуиновец, на выходных пришел комплект из китая, поигравшись плотно с разнообразными цифро/аналоговыми датчиками, сервами и пр. перешел к этим модулям.

Модули у меня вот эти, есть еще с усилителем и антеной один, но его еще даже не пробовал. Взял стандартный пример из библиотеки RF24, соответвенно одному подрубил  7 пин на землю вывод на скриншотах:

toc
Offline
Зарегистрирован: 09.02.2013

Krowten пишет:

вывод на скриншотах

две одинаковые картинки

dmw
Offline
Зарегистрирован: 24.03.2013

Krowten пишет:
Помогите разобраться в  чем косяк. Подрубаю 2 модуля NRF24L01+ к двум клонам pro mini на atmega328 5v  - вот эти

В соседней ветке описал решение аналогичной проблемы у себя, может и Вам поможет: http://arduino.ru/forum/apparatnye-voprosy/nrf24l01meganano#comment-37483

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

для тех кто забыл рацию на танке

// sets the role of this unit in hardware.  Connect to GND to be the 'pong' receiver
// Leave open to be the 'ping' transmitter
const int role_pin = 7;

Есть вариант когда через сериал указываеш что ей делать...

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

Krowten
Offline
Зарегистрирован: 15.08.2013

По запарке скриншот 1 и тот же залил но сразу же подправил пост, один модуль передатчиком сделал как положено - написал жеж про 7 пин.

Krowten
Offline
Зарегистрирован: 15.08.2013

Вечером попробую стабилизатор подпаять из примера в соседней ветке, как раз сотня LM1117-3.3 валяется )

toc
Offline
Зарегистрирован: 09.02.2013

Krowten, попробуйте ещё пример scanner из библиотеки RF24.

Krowten
Offline
Зарегистрирован: 15.08.2013

Спасибо всем за помощь, модули заработали, dmw тебе отдельная благодарность - выручил. Подпаял 2 электролита на 22мкФ  к питалову макетки на выходы согласно схеме, платка на тех же LM1117-3.3 и практически соответсвует схеме ниже,

родные smd не стал выпаивать. Запитал от нее оба модуля - все примеры работают. Причем без конденсаторов не работает, с конденсаторами но от usb тож не работает, короче траблы с питанием, хотя мультиметр показывает практически одинаковое напряжение. 

dimka
dimka аватар
Offline
Зарегистрирован: 21.09.2012
v.02 NRF24L01 if Arduino №1 button press-Arduino №2 LED on

Version 0.2 2013/07/15

-----------------------------

идеология;

на Arduino №1 нажимаем кнопку, ПОКА удерживаем кнопку нажатой, 

на Arduino №2 вКлючается (горит) светодиод, -----------------------------

изменения;

1. устранена задержка в 1.5 секунды,

теперь при нажатии кнопки Arduino №1 мгновенно отправляет сигнал

а Arduino №2 мгновенно принимает сигнал.



2. добавил возможность изменять Скорость передачи, Номер канала,

Кол-во попыток и время между попытками.

------------------------------------

sketch скетч код №2 для приёмника 

v.02 receiver NRF24L01 if Arduino №1 button press-Arduino №2 LED on







sketch скетч код №1 для передатчика 

v.02 transmitter NRF24L01 if Arduino №1 button press-Arduino №2 LED on

 
/*              код №2 для приёмника receiver
 ****************************
 урок от Дмитрия Осипова. http://www.youtube.com/user/d36073?feature=watch
 v.02 NRF24L01 if Arduino №1 button press-Arduino №2 LED on
 Version 0.2 2013/07/15
 -----------------------------
 идеология;
 на Arduino №1 нажимаем кнопку, ПОКА удерживаем кнопку нажатой, 
 на Arduino №2 вКлючается (горит) светодиод, 
 
 -----------------------------
 изменения;
 1. устранена задержка в 1.5 секунды,
 теперь при нажатии кнопки Arduino №1 мгновенно отправляет сигнал
 а Arduino №2 мгновенно принимает сигнал.
 
 2. добавил возможность изменять Скорость передачи, Номер канала,
 Кол-во попыток и время между попытками.
 ------------------------------
 
 подробную видео инструкцию выложу здесь
 https://www.youtube.com/watch?v=iJJVj9kgS-A

----------------
 код №2 для приёмника 
v.02 receiver NRF24L01 if Arduino №1 button press-Arduino №2 LED on
http://yadi.sk/d/tHRIHOPk6pN_m

 код №1 для передатчика 
v.02 transmitter NRF24L01 if Arduino №1 button press-Arduino №2 LED on
http://yadi.sk/d/76OpNatE6pNb2
 ------------
 
 v.01 NRF24L01 if Arduino №1 button press-Arduino №2 LED on 
 https://www.youtube.com/watch?v=aJVSrGwZs2s
 
 Arduino1 NRF24L01 Serial send. - Arduino2 led. LOW HIGH
 https://www.youtube.com/watch?v=aHgxXXRwtOE&noredirect=1
 
 Arduino Радиомодуль nRF24L01 -2.4GHz RF24 Libraries. test
 https://www.youtube.com/watch?v=B6LHfwisgUQ
 
 NRF24L01+ 2.4GHz Antenna Wireless Transceiver Module For Microcontr
 */

// это скачанная библиотека RF24
//https://github.com/maniacbug/RF24
//https://github.com/maniacbug/RF24/archive/master.zip
//http://yadi.sk/d/ZvMq19fB6lgPs

#include <SPI.h>
#include "RF24.h"

int msg[1];

// Set up nRF24L01 radio on SPI bus plus pins 9 & 10 
//Контакты от радиомодуля NRF24L01 подключаем к пинамнам -> Arduino

//SCK  -> 13
//MISO -> 12
//MOSI -> 11
//CSN  -> 10
//CE   -> 9

RF24 radio(9,10);



//светодиоды подключены к этим пинам
int LEDpin1 = 2;
int LEDpin2 = 3;


// адреса каналов приема и передачи
const uint64_t pipes[2] = {
  0xF0F0F0F000LL, 0xF0F0F0F0FFLL};

void setup(void){
  radio.begin();  
  radio.setDataRate(RF24_250KBPS);  // Скорость передачи
  radio.setChannel(100); // Номер канала от 0 до 127
  radio.setRetries(15,15); // Кол-во попыток и время между попытками
  radio.openWritingPipe(pipes[0]); // Открываем канал передачи
  radio.openReadingPipe(1, pipes[1]); // Открываем один из 6-ти каналов приема
  radio.startListening(); // Начинаем слушать эфир

  pinMode(LEDpin1, OUTPUT);
  pinMode(LEDpin2, OUTPUT);

}

void loop(void){
  if (radio.available()){
    bool done = false;    
    while (!done){
      done = radio.read(msg, 1);      
      //если пришел пакет от Arduino №1 (111) вКлючается светодиод (горит)LEDpin1, HIGH
      if (msg[0] == 111){
        delay(10);
        digitalWrite(LEDpin1, HIGH);
      }
      else {
        digitalWrite(LEDpin1, LOW);
      }
      delay(10);
      if (msg[0] == 112){
        delay(10);
        digitalWrite(LEDpin2, HIGH);
      }
      else {
        digitalWrite(LEDpin2, LOW);
      }
      delay(10);
    }
  }
}
/*              код №1 для передатчика transmitter
 ****************************
 урок от Дмитрия Осипова. http://www.youtube.com/user/d36073?feature=watch
 v.02 NRF24L01 if Arduino №1 button press-Arduino №2 LED on
 Version 0.2 2013/07/15
 -----------------------------
 идеология;
 на Arduino №1 нажимаем кнопку, ПОКА удерживаем кнопку нажатой, 
 на Arduino №2 вКлючается (горит) светодиод, 
 
 -----------------------------
 изменения;
 1. устранена задержка в 1.5 секунды,
 теперь при нажатии кнопки Arduino №1 мгновенно отправляет сигнал
 а Arduino №2 мгновенно принимает сигнал.
 
 2. добавил возможность изменять Скорость передачи, Номер канала,
 Кол-во попыток и время между попытками.
 ------------------------------
 
 подробную видео инструкцию выложу здесь
 https://www.youtube.com/watch?v=iJJVj9kgS-A
 ----------------
 код №2 для приёмника 
v.02 receiver NRF24L01 if Arduino №1 button press-Arduino №2 LED on
http://yadi.sk/d/tHRIHOPk6pN_m

 код №1 для передатчика 
v.02 transmitter NRF24L01 if Arduino №1 button press-Arduino №2 LED on
http://yadi.sk/d/76OpNatE6pNb2
 ------------
 v.01 NRF24L01 if Arduino №1 button press-Arduino №2 LED on 
 https://www.youtube.com/watch?v=aJVSrGwZs2s
 
 Arduino1 NRF24L01 Serial send. - Arduino2 led. LOW HIGH
 https://www.youtube.com/watch?v=aHgxXXRwtOE&noredirect=1
 
 Arduino Радиомодуль nRF24L01 -2.4GHz RF24 Libraries. test
 https://www.youtube.com/watch?v=B6LHfwisgUQ
 
 NRF24L01+ 2.4GHz Antenna Wireless Transceiver Module For Microcontr
 */

// это скачанная библиотекаRF 24
//https://github.com/maniacbug/RF24
//https://github.com/maniacbug/RF24/archive/master.zip
//http://yadi.sk/d/ZvMq19fB6lgPs

#include <SPI.h>
#include "RF24.h"


int msg[1];

// Set up nRF24L01 radio on SPI bus plus pins 9 & 10 
//Контакты от радиомодуля NRF24L01 подключаем к пинамнам -> Arduino

//SCK  -> 13
//MISO -> 12
//MOSI -> 11
//CSN  -> 10
//CE   -> 9

RF24 radio(9,10);

// адреса каналов приема и передачи
const uint64_t pipes[2] = {
  0xF0F0F0F000LL, 0xF0F0F0F0FFLL};

//кнопки подключены к этим пинам
int buttonPin1 = 2;
int buttonPin2 = 3;

void setup(void){ 

  radio.begin();  
  radio.setDataRate(RF24_250KBPS); // Скорость передачи
  radio.setChannel(100); // Номер канала от 0 до 127
  radio.setRetries(15,15); // Кол-во попыток и время между попытками
  radio.openWritingPipe(pipes[1]);  // Открываем канал передачи
  radio.openReadingPipe(1, pipes[0]); // Открываем один из 6-ти каналов приема
  radio.startListening(); // Начинаем слушать эфир
} 
void loop(void){
  //пока кнопка (buttonPin1)нажата отправляем пакет (111)в Arduino №2
  if (digitalRead(buttonPin1) == HIGH){ 
    msg[0] = 111;
    radio.stopListening(); 
    radio.write(msg, 1);
    radio.startListening();
  }
  if (digitalRead(buttonPin2) == HIGH){ 
    msg[0] = 112; 
    radio.stopListening(); 
    radio.write(msg, 1);
    radio.startListening();
  }
}

 

 

dimka
dimka аватар
Offline
Зарегистрирован: 21.09.2012
/*              код №1 для передатчика
 ****************************
 урок от Дмитрия Осипова. http://www.youtube.com/user/d36073?feature=watch
 v.01 передатчик Arduino NRF24L01 радиомодуль связь двух Arduino
 Version 0.1 2013/07/13
 
 подробную видео инструкцию выложу здесь
 http://www.youtube.com/user/d36073?feature=watch

 код №2 для приёмника http://yadi.sk/d/b2t1JAhT6lgYU
 код №1 для передатчика http://yadi.sk/d/KsjPPony6lgbU

 
 NRF24L01+ 2.4GHz Antenna Wireless Transceiver Module For Microcontr
 
 Arduino №1 получив данные из сериал, отправляет в радиоэфир пакет, 
 Arduino №2 принимает пакет, и отправляет обратно в Arduino №1. 
 Arduino №1 принимает пакет и передает обратно в сериал. 
 то есть что написали в сериал, то и должно вернуться обратно.
 
 Если послать в сериал с Arduino №1  команды (1,2,3,4,5) то на Arduino №2 
 будут вКлючаться и вЫключаться светодиоды.
 
 http://arduino.ru/forum/programmirovanie/nrf24l01
 */


// это скачанная библиотека
//https://github.com/maniacbug/RF24
//https://github.com/maniacbug/RF24/archive/master.zip
//http://yadi.sk/d/ZvMq19fB6lgPs

#include <SPI.h>
#include "RF24.h"



// Set up nRF24L01 radio on SPI bus plus pins 9 & 10 
//Контакты от радиомодуля NRF24L01 подключаем к пинамнам -> Arduino

//SCK  -> 13
//MISO -> 12
//MOSI -> 11
//CSN  -> 10
//CE   -> 9


RF24 radio(9, 10);

const uint64_t pipes[2] = {
  0xF0F0F0F000LL, 0xF0F0F0F0FFLL};// адреса каналов приема и передачи


void setup(){
  Serial.begin(9600);
  radio.begin();  
  radio.setDataRate(RF24_250KBPS); // Скорость передачи
  radio.setChannel(100); // Номер канала от 0 до 127
  radio.setRetries(15,15); // Кол-во попыток и время между попытками
  radio.openWritingPipe(pipes[1]);  // Открываем канал передачи
  radio.openReadingPipe(1, pipes[0]); // Открываем один из 6-ти каналов приема
  radio.startListening(); // Начинаем слушать эфир
}

void loop(){
  if(Serial.available()){
    char data[32] = "";
    byte i = 0;
    while(Serial.available()){
      data[i] = Serial.read(); //получаем данные из сериал.
      i++;
      delay(2);
    }
    data[i] = 0;
    radio.stopListening();
    radio.write(&data, 32); //и отправляем их в Arduino №2
    radio.startListening();
  }

  if(radio.available()){
    char data[32] = "";
    radio.read(&data, 32); //обратно принимаем пакет из Arduino №2
    Serial.println(data); // и передаем его обратно в сериал
  }
}
/*              код №2 для приёмника
 ****************************
 урок от Дмитрия Осипова. http://www.youtube.com/user/d36073?feature=watch
 v.01 приёмник Arduino NRF24L01 радиомодуль связь двух Arduino
 Version 0.1 2013/07/13
 подробную видео инструкцию выложу здесь
 http://www.youtube.com/user/d36073?feature=watch

 код №2 для приёмника http://yadi.sk/d/b2t1JAhT6lgYU
 код №1 для передатчика http://yadi.sk/d/KsjPPony6lgbU


 NRF24L01+ 2.4GHz Antenna Wireless Transceiver Module For Microcontr
 
 Arduino №1 получив данные из сериал, отправляет в радиоэфир пакет, 
 Arduino №2 принимает пакет, и отправляет обратно в Arduino №1. 
 Arduino №1 принимает пакет и передает обратно в сериал. 
 то есть что написали в сериал, то и должно вернуться обратно.
 
 Если послать в сериал с Arduino №1  команды (1,2,3,4,5) то на Arduino №2 
 будут вКлючаться и вЫключаться светодиоды.
 
 http://arduino.ru/forum/programmirovanie/nrf24l01
 */

// это скачанная библиотека
//https://github.com/maniacbug/RF24
//https://github.com/maniacbug/RF24/archive/master.zip
//http://yadi.sk/d/ZvMq19fB6lgPs

#include <SPI.h>
#include "RF24.h"


// Set up nRF24L01 radio on SPI bus plus pins 9 & 10 
//Контакты от радиомодуля NRF24L01 подключаем к пинамнам -> Arduino

//SCK  -> 13
//MISO -> 12
//MOSI -> 11
//CSN  -> 10
//CE   -> 9


RF24 radio(9, 10);

//пины куда подключены светодиоды
int led = 2;
int led1 = 4;
const uint64_t pipes[2] = {
  0xF0F0F0F000LL, 0xF0F0F0F0FFLL};// адреса каналов приема и передачи


void setup(){
  radio.begin();  
  radio.setDataRate(RF24_250KBPS);  // Скорость передачи
  radio.setChannel(100); // Номер канала от 0 до 127
  radio.setRetries(15,15); // Кол-во попыток и время между попытками
  radio.openWritingPipe(pipes[0]); // Открываем канал передачи
  radio.openReadingPipe(1, pipes[1]); // Открываем один из 6-ти каналов приема
  radio.startListening(); // Начинаем слушать эфир

  pinMode(led1, OUTPUT);
  pinMode(led, OUTPUT); 
}

void loop(){
  if(radio.available()){
    char data[32] = "";
    radio.read(&data, 32); //принимает пакет с Arduino №1 
    //Если пришла цифра 1 включаем светодиод
    if (data[0] == '1') digitalWrite(led, HIGH);
    if (data[0] == '2') digitalWrite(led, LOW);
    if (data[0] == '3') digitalWrite(led1, HIGH);
    if (data[0] == '4')  digitalWrite(led1, LOW);
    if (data[0] == '5') digitalWrite(led, HIGH), delay(1000),digitalWrite(led, LOW);

    radio.stopListening();
    radio.write(&data, 32); // и отправляет обратно в Arduino №1 
    radio.startListening();
  }
}

Arduino №1 получив данные из сериал, отправляет в радиоэфир пакет, 

Arduino №2 принимает пакет, и отправляет обратно в Arduino №1. 

Arduino №1 принимает пакет и передает обратно в сериал. 

то есть что написали в сериал, то и должно вернуться обратно.



Если послать в сериал с Arduino №1 команды (1,2,3,4,5) то на Arduino №2 

будут вКлючаться и вЫключаться светодиоды.

dimka
dimka аватар
Offline
Зарегистрирован: 21.09.2012

на Arduino №1 устанавливаем ИК приёмник, и радио модуль NRF24L01+, и для индикации приёма ИК сигнала светодиоды.

Прописываем в скетч для Arduino №1 коды кнопок своего ИК пульта. 

Нажимаем на кнопку своего ИК пульта, ИК приёмник на Arduino №1 принимает ИК сигнал, и в зависимости от полученного кода 

кнопки от ИК пульта, включает соответствующий светодиод. 

Светодиод будет гореть пока удерживаем кнопку пульта нажатой.

Если соответствующий светодиод включился, Arduino №1 начинает отправлять через радио модуль NRF24L01+ соответствующий

радио код (например код 111)на Arduino №2. 

Радио код будет слаться пока светодиод горит, то бишь пока кнопку ИК пульта удерживаем нажатой.



На Arduino №2 радио модуль NRF24L01+ принимает (сигнал) соответствующий радио код, и в зависимости от пришедшего

радио кода включает соответствующий сигнальный светодиод, и начинает слать записанный ИК код кнопки пульта через ИК передатчик

на конечное ИК устройство которым хотим управлять например через стены на большом расстоянии.

( Заранее прописываем в скетч sketch, ИК коды кнопок ВАШЕГО ИК пульта, для отправки) скетч sketch: №1 v.01 receiver Arduino радио удлинитель ИК пульта IR NRF24L01 RF wireless IR extender 

http://yadi.sk/d/ibwEeWHR6x0S0



скетч sketch: №2 v.01 transmitter Arduino радио удлинитель ИК пульта IR NRF24L01 RF wireless IR extender

http://yadi.sk/d/FyoB7BWR6x0bq что нам понадобиться. 

Аппаратное:

1. Любой ИК инфракрасный пульт.

2. Arduino -2 штуки.

3. Радио модуль NRF24L01+ 2.4GHz -2 штуки.

4. ИК инфракрасный приёмник - 1 штука.

5. ИК инфракрасный передатчик - 1 штука.

6. Светодиоды нужны только для визуального контроля за процессом. программное:

/*              код №2 для ИК передатчика, и радио приёмника. (receiver)
 ****************************
 урок от Дмитрия Осипова. http://www.youtube.com/user/d36073?feature=watch
 v.01 Arduino радио удлинитель ИК пульта IR NRF24L01 RF wireless IR extender
 Version 0.1-2013/07/17
 -----------------------------
 изменения; в Version 0.1-2013/07/17 
 1. 
 2. 
 ------------------------------
 идеология;
 на Arduino №1 устанавливаем ИК приёмник, и радио модуль NRF24L01+, и для индикации приёма ИК сигнала светодиоды.
 Прописываем в скетч для Arduino №1 коды кнопок своего ИК пульта. 
 Нажимаем на кнопку своего ИК пульта, ИК приёмник на Arduino №1  принимает ИК сигнал, и в зависимости от полученного кода 
 кнопки от ИК пульта, включает соответствующий светодиод. 
 Светодиод будет гореть пока удерживаем кнопку пульта нажатой.
 Если соответствующий светодиод включился, Arduino №1 начинает отправлять через радио модуль NRF24L01+ соответствующий
 радио код (например код 111)на Arduino №2. 
 Радио код будет слаться пока светодиод горит, то бишь пока кнопку ИК пульта удерживаем нажатой.
 
 На Arduino №2 радио модуль NRF24L01+  принимает (сигнал) соответствующий радио код, и в зависимости от пришедшего
 радио кода включает соответствующий сигнальный светодиод, и начинает слать записанный ИК код кнопки пульта через ИК передатчик
 на конечное ИК устройство которым хотим управлять например через стены на большом расстоянии.
 ( Заранее прописываем в скетч sketch, ИК коды кнопок ВАШЕГО ИК пульта, для отправки)
 
 ------------------------------------------
 
 скетч sketch: №1 v.01 receiver Arduino радио удлинитель ИК пульта IR NRF24L01 RF wireless IR extender 
 http://yadi.sk/d/ibwEeWHR6x0S0

 скетч sketch: №2 v.01 transmitter Arduino радио удлинитель ИК пульта IR NRF24L01 RF wireless IR extender
 http://yadi.sk/d/FyoB7BWR6x0bq
 ================================ 
 что нам понадобиться. 
 Аппаратное:
 1. Любой ИК инфракрасный пульт.
 2. Arduino -2 штуки.
 3. Радио модуль NRF24L01+ 2.4GHz -2 штуки.
 4. ИК инфракрасный приёмник - 1 штука.
 5. ИК инфракрасный передатчик - 1 штука.
 6. Светодиоды нужны только для визуального контроля за процессом. 
 --------------------------------
 программное:
 2. Библиотеки.
 
 1.IRremote, библиотека для работы с ИК сигналом.
 Скачать библиотеку IRremote для ИК пульта
 https://disk.yandex.ru/public/?hash=yNz1au3lm3/yyMHOYtnZ2UGSf19wTvYBZnkx...
 
 IRremote эта библиотека кажется по новее будет
 http://yadi.sk/d/0jIS1tfw6tbb7
 
 https://github.com/shirriff/Arduino-IRremote
 
 
 2. RF24  библиотека для работы с радио модулем NRF24L01+ 2.4GHz
 //https://github.com/maniacbug/RF24
 //https://github.com/maniacbug/RF24/archive/master.zip
 //http://yadi.sk/d/ZvMq19fB6lgPs
 
 =======================================================
 подробную видео инструкцию выложу здесь
 v.01 Arduino радио удлинитель ИК пульта IR NRF24L01 RF wireless IR extender 
https://www.youtube.com/watch?v=0OCbtW-RfIY
 ++++++++++++++++++++++++++++++ 
 Вспомогательные видео обзоры, скетчи.....
 
 
 v.02 NRF24L01 if Arduino №1 button press-Arduino №2 LED on 
 https://www.youtube.com/watch?v=iJJVj9kgS-A
 
 v.01 NRF24L01 if Arduino №1 button press-Arduino №2 LED on 
 https://www.youtube.com/watch?v=aJVSrGwZs2s
 
 
 Arduino1 NRF24L01 Serial send. - Arduino2 led. LOW HIGH
 https://www.youtube.com/watch?v=aHgxXXRwtOE&noredirect=1
 
 Arduino Радио модуль nRF24L01 -2.4GHz RF24 Libraries. test
 https://www.youtube.com/watch?v=B6LHfwisgUQ
 
 
 скетч arduino чтобы узнать код кнопки ИК пульта
 sketch arduino buttons on the remote to learn the code
 https://disk.yandex.ru/public/?hash=KzLtuC1ljISPaCoXw03D6mbiKea8spktcWL5... 
 
 4/6 как ? узнать код - кнопки своего ИК пульта
 http://www.youtube.com/watch?v=InZuGntH_wk
 
 
 v.01 Arduino IR Управление с ИК пульта в режиме удержания кнопки
 https://www.youtube.com/watch?v=AjIASUNiWkY
 
 усилитель ИК инфракрасного сигнала IR infrared signal amplifier на одном транзисторе Arduino
 http://www.youtube.com/watch?v=3EYxONWSyR4
 
 arduino радио удлинитель ИК пультов RF wireless IR extender
 http://www.youtube.com/watch?v=rYRr2CTgJDA
 */
// Подключаем скачанную библиотеку RF24.
#include <SPI.h>  
#include "RF24.h"

// подключаем скачанную библиотеку IRremote
#include <IRremote.h> // это скачанная библиотека 

#define PanasonicAddress      0x4004  

//ВАЖНО !!! ( EE008FE0 ) это код кнопки №1 - моего (ИК)! (инфракрасного пульта)!, -
//-у вашего пульта будет другой код, замените на свой!
#define P1        0xEE008FE0  
#define P2        0xEE008FD0  
#define P3        0xEE008FF0 
#define P4        0xEE008FC8  
#define P5        0x100CECF 

#define JVC1      0xFB05 //( FB05 ) это код кнопки пульта от видеокамеры JVC (ZOOM)
#define JVC2      0xFB85

IRsend irsend;

//переменная для радио кода
int radiocode[1];

//Контакты от радио модуля NRF24L01 подключаем к пинам на -> Arduino

//SCK  -> 13
//MISO -> 12
//MOSI -> 11
//CSN  -> 10
//CE   -> 9

// Set up nRF24L01 radio on SPI bus plus pins 9 & 10 
RF24 radio(9,10);


//светодиоды подключены к этим пинам
//Светодиоды нужны только для визуального контроля за процессом.

int LEDpin4 = 4;
int LEDpin5 = 5;
int LEDpin6 = 6;
int LEDpin7 = 7;
int LEDpin8 = 8;

// адреса каналов приема и передачи радио сигнала
const uint64_t pipes[2] = {
  0xF0F0F0F000LL, 0xF0F0F0F0FFLL};


// ВАЖНО !!! (PIN 3;) вЫход ИК передатчика, ((PIN 3;)на другой пин изменить нельзя)!!!
//так устроена IRremote, библиотека для работы с ИК сигналом.
//An IR LED must be connected to the output PWM pin 3.

void setup(void){
  radio.begin();  
  radio.setDataRate(RF24_250KBPS);  // Скорость передачи
  radio.setChannel(100); // Номер канала от 0 до 127
  radio.setRetries(15,15); // Кол-во попыток и время между попытками
  radio.openWritingPipe(pipes[0]); // Открываем канал передачи
  radio.openReadingPipe(1, pipes[1]); // Открываем один из 6-ти каналов приема
  radio.startListening(); // Начинаем слушать эфир

  // назначаем пины как выходы
  pinMode(LEDpin4, OUTPUT);
  pinMode(LEDpin5, OUTPUT);
  pinMode(LEDpin6, OUTPUT);
  pinMode(LEDpin7, OUTPUT);
  pinMode(LEDpin8, OUTPUT);

  // ВАЖНО !!! (PIN 3;) вЫход ИК передатчика, ((PIN 3;)на другой пин изменить нельзя)!!!
  //так устроена IRremote, библиотека для работы с ИК сигналом.
  //An IR LED must be connected to the output PWM pin 3.

}

void loop(void){
  if (radio.available());
  bool done = false;
  while (!done)done = radio.read(radiocode, 1); 

  if (radiocode[0] == 112)digitalWrite(LEDpin4, HIGH), delay(30),irsend.sendPanasonic(PanasonicAddress,P1), digitalWrite(LEDpin4, LOW); 
  if (radiocode[0] == 113)digitalWrite(LEDpin5, HIGH), delay(30),irsend.sendPanasonic(PanasonicAddress,P2), digitalWrite(LEDpin5, LOW);
  if (radiocode[0] == 114)digitalWrite(LEDpin6, HIGH), delay(30),irsend.sendPanasonic(PanasonicAddress,P3), digitalWrite(LEDpin6, LOW); 
  if (radiocode[0] == 115)digitalWrite(LEDpin7, HIGH), delay(30),irsend.sendPanasonic(PanasonicAddress,P4), digitalWrite(LEDpin7, LOW);
  if (radiocode[0] == 116)digitalWrite(LEDpin8, HIGH), delay(30),irsend.sendPanasonic(PanasonicAddress,P5), digitalWrite(LEDpin8, LOW);
} 














/*              код №1 для ИК приёмника, и радио передатчика. (transmitter)
 ****************************
 урок от Дмитрия Осипова. http://www.youtube.com/user/d36073?feature=watch
 v.01 Arduino радио удлинитель ИК пульта IR NRF24L01 RF wireless IR extender
 Version 0.1-2013/07/17
 -----------------------------
 изменения; в Version 0.1-2013/07/17 
 1. 
 2. 
 ------------------------------
 идеология;
 на Arduino №1 устанавливаем ИК приёмник, и радио модуль NRF24L01+, и для индикации приёма ИК сигнала светодиоды.
 Прописываем в скетч для Arduino №1 коды кнопок своего ИК пульта. 
 Нажимаем на кнопку своего ИК пульта, ИК приёмник на Arduino №1  принимает ИК сигнал, и в зависимости от полученного кода 
 кнопки от ИК пульта, включает соответствующий светодиод. 
 Светодиод будет гореть пока удерживаем кнопку пульта нажатой.
 Если соответствующий светодиод включился, Arduino №1 начинает отправлять через радио модуль NRF24L01+ соответствующий
 радио код (например код 111)на Arduino №2. 
 Радио код будет слаться пока светодиод горит, то бишь пока кнопку ИК пульта удерживаем нажатой.
 
 На Arduino №2 радио модуль NRF24L01+  принимает (сигнал) соответствующий радио код, и в зависимости от пришедшего
 радио кода включает соответствующий сигнальный светодиод, и начинает слать записанный ИК код кнопки пульта через ИК передатчик
 на конечное ИК устройство которым хотим управлять например через стены на большом расстоянии.
 ( Заранее прописываем в скетч sketch, ИК коды кнопок ВАШЕГО ИК пульта, для отправки)
 
 ------------------------------------------
 
 скетч sketch: №1 v.01 receiver Arduino радио удлинитель ИК пульта IR NRF24L01 RF wireless IR extender 
 http://yadi.sk/d/ibwEeWHR6x0S0

 скетч sketch: №2 v.01 transmitter Arduino радио удлинитель ИК пульта IR NRF24L01 RF wireless IR extender
 http://yadi.sk/d/FyoB7BWR6x0bq
 ================================ 
 что нам понадобиться. 
 Аппаратное:
 1. Любой ИК инфракрасный пульт.
 2. Arduino -2 штуки.
 3. Радио модуль NRF24L01+ 2.4GHz -2 штуки.
 4. ИК инфракрасный приёмник - 1 штука.
 5. ИК инфракрасный передатчик - 1 штука.
 6. Светодиоды нужны только для визуального контроля за процессом. 
 --------------------------------
 программное:
 2. Библиотеки.
 
 1.IRremote, библиотека для работы с ИК сигналом.
 Скачать библиотеку IRremote для ИК пульта
 https://disk.yandex.ru/public/?hash=yNz1au3lm3/yyMHOYtnZ2UGSf19wTvYBZnkx...
 
 IRremote эта библиотека кажется по новее будет
 http://yadi.sk/d/0jIS1tfw6tbb7
 
 https://github.com/shirriff/Arduino-IRremote
 
 
 2. RF24  библиотека для работы с радио модулем NRF24L01+ 2.4GHz
 //https://github.com/maniacbug/RF24
 //https://github.com/maniacbug/RF24/archive/master.zip
 //http://yadi.sk/d/ZvMq19fB6lgPs
 
 =======================================================
 подробную видео инструкцию выложу здесь
 v.01 Arduino радио удлинитель ИК пульта IR NRF24L01 RF wireless IR extender 
https://www.youtube.com/watch?v=0OCbtW-RfIY
 
 ++++++++++++++++++++++++++++++ 
 Вспомогательные видео обзоры, скетчи.....
 
 
 v.02 NRF24L01 if Arduino №1 button press-Arduino №2 LED on 
 https://www.youtube.com/watch?v=iJJVj9kgS-A
 
 v.01 NRF24L01 if Arduino №1 button press-Arduino №2 LED on 
 https://www.youtube.com/watch?v=aJVSrGwZs2s
 
 
 Arduino1 NRF24L01 Serial send. - Arduino2 led. LOW HIGH
 https://www.youtube.com/watch?v=aHgxXXRwtOE&noredirect=1
 
 Arduino Радио модуль nRF24L01 -2.4GHz RF24 Libraries. test
 https://www.youtube.com/watch?v=B6LHfwisgUQ
 
 
 скетч arduino чтобы узнать код кнопки ИК пульта
 sketch arduino buttons on the remote to learn the code
 https://disk.yandex.ru/public/?hash=KzLtuC1ljISPaCoXw03D6mbiKea8spktcWL5... 
 
 4/6 как ? узнать код - кнопки своего ИК пульта
 http://www.youtube.com/watch?v=InZuGntH_wk
 
 
 v.01 Arduino IR Управление с ИК пульта в режиме удержания кнопки
 https://www.youtube.com/watch?v=AjIASUNiWkY
 
 усилитель ИК инфракрасного сигнала IR infrared signal amplifier на одном транзисторе Arduino
 http://www.youtube.com/watch?v=3EYxONWSyR4
 
 arduino радио удлинитель ИК пультов RF wireless IR extender
 http://www.youtube.com/watch?v=rYRr2CTgJDA
 
 
 */

// Подключаем скачанную библиотеку RF24.
#include <SPI.h>  
#include "RF24.h"

// подключаем скачанную библиотеку IRremote
#include <IRremote.h> // это скачанная библиотека

int RECV_PIN = 7; //вход ИК приемника 
IRrecv irrecv(RECV_PIN);
decode_results results;

//переменная для радио кода
int radiocode[1];


//Контакты от радио модуля NRF24L01 подключаем к пинам на -> Arduino

//SCK  -> 13
//MISO -> 12
//MOSI -> 11
//CSN  -> 10
//CE   -> 9

// Set up nRF24L01 radio on SPI bus plus pins 9 & 10 
RF24 radio(9,10);


const uint64_t pipes[2] = {
  0xF0F0F0F000LL, 0xF0F0F0F0FFLL};// адреса каналов приема и передачи радио сигнала

//светодиоды подключены к этим пинам
//Светодиоды нужны только для визуального контроля за процессом. 
int ledPin2 = 2;
int ledPin3 = 3;
int ledPin4 = 4;
int ledPin5 = 5;
int ledPin6 = 6;



//timer_PIN нужен. 1.для небольшой паузы,перед отключением светодиода
// чтоб Arduino №1 успел отослать радио код
//2.для удержания во вКлюченном состоянии светодиода пока кнопка ИК пульта нажата
int timer_PIN = 8; //индикация таймера 

//eventTime, для паузы,  вместо delay,будем использовать функцию millis.
unsigned long eventTime=0;



void setup(void){ 
  irrecv.enableIRIn(); // включить ИК приемник

  //настройки для радио модуля NRF24L01+ 2.4GHz
  radio.begin();  
  radio.setDataRate(RF24_250KBPS); // Скорость передачи
  radio.setChannel(100); // Номер канала от 0 до 127
  radio.setRetries(15,15); // Кол-во попыток и время между попытками
  radio.openWritingPipe(pipes[1]);  // Открываем канал передачи
  radio.openReadingPipe(1, pipes[0]); // Открываем один из 6-ти каналов приема
  radio.startListening(); // Начинаем слушать эфир

  // назначаем пины как выходы
  pinMode(ledPin2, OUTPUT);
  pinMode(ledPin3, OUTPUT);
  pinMode(ledPin4, OUTPUT);
  pinMode(ledPin5, OUTPUT);
  pinMode(ledPin6, OUTPUT);

  pinMode(timer_PIN, OUTPUT);

} 
void loop(void){
  // Эта конструкция нужна чтобы конвертировать пульсирующий (-) с (ИК) преемника сигнал в постоянный.
  //После появления и пропадания сигнала, состояние сразу не меняется! а ждет  100 миллисекунд.
  //Если 100 миллисекунд не прошло, и поступил еще один ИК сигнал с пульта, тогда таймер заново запускается на 100 миллисекунд.

  //Проще говоря, пока кнопка на ИК пульте нажата timer_PIN остается вКлюченным, если кнопка на пульте отпущена timer_PIN вЫключен.

  // Читаем состояние ноги у (ИК) преемника. В момент приема данных у (ИК) 
  //приемника на выходе появляется пульсирующий (-)отрицательный сигнал

  if (digitalRead(RECV_PIN) == LOW) 
    //  Если обнаружен отрицательный сигнал запускаем таймер,и включаем timer_PIN //(timer_PIN, HIGH);
    eventTime=millis(),digitalWrite(timer_PIN, HIGH);
  //  Продолжительность работы таймера >100 миллисекунд.
  //Если не было сигнала с пульта в течение 100 миллисекунд. То timer_PIN вЫключаем //(timer_PIN, LOW)
  if(millis()-eventTime>100) digitalWrite(timer_PIN, LOW),
  //  и вЫключаем все светодиоды
  digitalWrite(ledPin2, LOW),digitalWrite(ledPin3, LOW),digitalWrite(ledPin4, LOW),digitalWrite(ledPin5, LOW)
    ,digitalWrite(ledPin6, LOW);



  // Эта часть кода отвечает за отсылку радио кода на Arduino №2

  //если светодиод ledPin2 включён , начинаем слать код (112)в Arduino №2
  if (digitalRead(ledPin2) == HIGH){ 
    radiocode[0] = 112;
    radio.stopListening(); 
    radio.write(radiocode, 1);
    radio.startListening();
  }
  //если светодиод ledPin3 включён , начинаем слать код (113)в Arduino №2
  if (digitalRead(ledPin3) == HIGH){ 
    radiocode[0] = 113; 
    radio.stopListening(); 
    radio.write(radiocode, 1);
    radio.startListening();
  }
  //если светодиод ledPin4 включён , начинаем слать код (114)в Arduino №2
  if (digitalRead(ledPin4) == HIGH){ 
    radiocode[0] = 114; 
    radio.stopListening(); 
    radio.write(radiocode, 1);
    radio.startListening();
  }
  //если светодиод ledPin5 включён , начинаем слать код (115)в Arduino №2
  if (digitalRead(ledPin5) == HIGH){ 
    radiocode[0] = 115; 
    radio.stopListening(); 
    radio.write(radiocode, 1);
    radio.startListening();
  }
  //если светодиод ledPin6 включён , начинаем слать код (116)в Arduino №2
  if (digitalRead(ledPin6) == HIGH){ 
    radiocode[0] = 116; 
    radio.stopListening(); 
    radio.write(radiocode, 1);
    radio.startListening();
  }


  // Эта часть отвечает за приём и обработку ИК кодов
  // здесь считываем коды от ИК пульта
  if (irrecv.decode(&results)){

    //ВАЖНО !!! ( 1000809 ) это код кнопки №1 - моего (ИК)! (инфракрасного пульта)!, -
    //-у вашего пульта будет другой код, замените на свой!
    // У моего пульта при нажатии на одну и ту же кнопку, могут отсылаться два разных (КОДА) сигнала,  чтобы обойти эту проблему
    //я использовал Логический оператор "или" (||) if (results.value == 0x1000809 || results.value == 0xF7283C77
    // Теперь неважно какой код отправлен  с кнопки пульта, первый или второй
    // Если ваша кнопка пульта не страдает раздвоением личности, можете написать так if (results.value == 0x1000809 
    //также мною замечено при использование разных ИК приемников частотой 36,или 38, кГц, библиотека IRremote
    // выдает Разные коды
    //можно сделать 4 "или" (||), чтобы можно было управлять с двух разных ИК пультов


    if (results.value == 0x1000809 || results.value == 0xF7283C77)digitalWrite(ledPin2, HIGH);
    if (results.value == 0x1008889 || results.value == 0x757FB4DF) digitalWrite(ledPin3, HIGH);
    if (results.value == 0x1004849 || results.value == 0xB33B4597)digitalWrite(ledPin4, HIGH);
    if (results.value == 0x100C8C9 || results.value == 0x3C03E507) digitalWrite(ledPin5, HIGH);
    if (results.value == 0x1002829 || results.value == 0xE705551F)digitalWrite(ledPin6, HIGH);

    //а отключатся светодиоды, когда отключится timer_PIN
    // а timer_PIN отключится, когда кнопка ИК пульта будет отпущена.
    //Так как delay(); использовать не получится. И у ИК пультов есть свои особенности, пришлось выделывать акробатическое 
    //сальто мортале
    irrecv.resume();  
  }  
}



 

dimka
dimka аватар
Offline
Зарегистрирован: 21.09.2012

v.01 Arduino генерал управление домом телефоном и IR Phone Control DTMF Decoder extender nRF24L01

Для чего это нужно?

Для удалённого беспроводного управления устройствами. 

Устройство будет состоять из нескольких блоков.



1. Arduino генерал сервер.

2. Arduino солдат_1 сервер.

3. Arduino солдат_2 сервер.

Солдатов может быть много, по потребности.



функция генерал сервера:

1. Принимать и распознавать тоновые сигналы от телефона.

2. Принимать и распознавать сигналы от любого ИК инфракрасного пульта.

3. Отправлять радио сигнал на Arduino солдат_1 или 2,3,,, серверы

проще говоря, конвертировать тоновые сигналы, и ИК инфракрасные сигналы, в радио сигнал.



Функция Солдатов серверов:

1. Принимать радио сигнал, и в зависимости от принятого радио кода, выполнять ту или иную задачу.

Например, открывать или закрывать форточку с помощью servo, 

или управлять жалюзи с помощью моторов,

или отсылать ИК инфракрасный сигнал, удалённо включить кондиционер, тепло вентилятор. 

----------------------------------------­-- Как это работает:



Звоним с телефона (назовем его телефон клиент), на другой телефон (назовем его телефон сервер).

На (телефоне сервере) устанавливаем авто ответ (авто поднятие).

К (телефону серверу) подключен модуль (DTMF Decoder) через разъем для гарнитуры.

после до-звона (телефон сервер) сам поднимает трубку и слушает тоновые команды от ( телефона клиента).

В зависимости от услышанного тона, у нас 12 команд (1,2,3,4,5,6,7,8,9,0,*,#) (увеличил до 20)

Arduino генерал отправляет соответствующий радио сигнал на Arduino солдат_1 или 2,3,,, .



Тоже самое делает ИК инфракрасный приёмник ( 20 команд).

---------------------

1. Можно напрямую подключится к контактом (DTMF Decoder) и управлять удалённым устройством например реле, в режиме "триггер".



2. Через Arduino, в режиме удержания кнопки То есть нажимая и удерживая кнопку на (телефоне клиента), (или на ИК инфракрасном 

пульте), радио код отправляется, отпускаем кнопку радио код НЕ отправляется.



( Заранее прописываем в скетч sketch, ИК коды кнопок ВАШЕГО ИК пульта, )



----------------------------------------­-- 

скетч sketch: 

v.01 Arduino генерал управление домом телефоном и IR Phone Control DTMF Decoder extender

http://yadi.sk/d/0taFuYqg7dy3F



скетч sketch: 

v.01 Arduino солдат Demo управление домом телефоном и IR Phone Control DTMF Decoder extender

http://yadi.sk/d/lDN3Ip-g7dxyt

================================ 

что нам понадобиться. 

Аппаратное:



Из чего состоит генерал сервер:

1. ATMEGA328P-PU Microcontroller ARDUINO UNO Bootloader

и 16MHz Crystal.

2. Телефон.

3. 12CH Smart Home Controller Voice Phone Control DTMF MT8870 Audio Decoder Modules. 

4. ИК инфракрасный приёмник.

5. Радио модуль NRF24L01+ . 

6. Breadboard макетная плата.



Не обязательно: 

7. USB Сериал адаптер, для питания и заливки скетча, + кнопка

USB To RS232 TTL PL2303HX Auto Converter Module Converter Adapter.

8. Stackable Shield Header для крепления радио модуля NRF24L01+, к Breadboard макетной плате.

9. Провода.

10. Светодиоды нужны только для визуального контроля за процессом.

11. Скобы замыкания Mini Jumper 2.54mm.

12. Любой ИК инфракрасный пульт.




/*             v.01 Arduino генерал управление домом телефоном и IR Phone Control DTMF Decoder extender
 ****************************
 урок от Дмитрия Осипова. http://www.youtube.com/user/d36073?feature=watch
 v.01 Arduino генерал управление домом телефоном и IR Phone Control DTMF Decoder extender
 Version 0.1-2013/08/02
 -----------------------------
 изменения; в Version 0.1- 
 1. 
 2. 
 ------------------------------
 идеология;
 Для чего это нужно?
 Для удалённого беспроводного управления устройствами. 
 Устройство будет состоять из нескольких блоков.
 
 1. Arduino генерал сервер.
 2. Arduino солдат_1 сервер.
 3. Arduino солдат_2 сервер.
 Солдатов может быть много, по потребности.
 
 функция генерал сервера:
 1. Принимать и распознавать тоновые сигналы от телефона.
 2. Принимать и распознавать сигналы от любого ИК инфракрасного пульта.
 3. Отправлять радио сигнал на Arduino солдат_1 или 2,3,,, серверы
 проще  говоря, конвертировать тоновые сигналы, и ИК инфракрасные сигналы, в радио сигнал.
 
 Функция Солдатов серверов:
 1. Принимать радио сигнал, и в зависимости от принятого радио кода, выполнять ту или иную задачу.
 Например, открывать или закрывать форточку с помощью servo, 
 или управлять жалюзи с помощью моторов,
 или отсылать ИК инфракрасный сигнал, удалённо включить кондиционер, тепло вентилятор. 
 ------------------------------------------ 
 
 Как это работает:
 
 Звоним с телефона (назовем его телефон клиент), на другой телефон (назовем его телефон сервер).
 На (телефоне сервере) устанавливаем авто ответ (авто поднятие).
 К (телефону серверу) подключен модуль (DTMF Decoder) через разъем для гарнитуры.
 после до-звона (телефон сервер) сам поднимает трубку и слушает тоновые команды от ( телефона клиента).
 В зависимости от услышанного тона, у нас 12 команд (1,2,3,4,5,6,7,8,9,0,*,#) (увеличил до 20)
 Arduino генерал отправляет соответствующий радио сигнал на Arduino солдат_1 или 2,3,,, .
 
 Тоже самое делает  ИК инфракрасный приёмник ( 20 команд).
 ---------------------
 1. Можно напрямую подключится к контактом  (DTMF Decoder) и управлять удалённым устройством например реле, в режиме "триггер".
 
 2. Через Arduino,  в режиме удержания кнопки То есть нажимая и удерживая кнопку на (телефоне клиента), (или на ИК инфракрасном 
 пульте), радио код отправляется, отпускаем кнопку радио код НЕ отправляется.
 
 ( Заранее прописываем в скетч sketch, ИК коды кнопок ВАШЕГО ИК пульта, )
 
 ------------------------------------------ 
 скетч sketch: 
 v.01 Arduino генерал управление домом телефоном и IR Phone Control DTMF Decoder extender
 http://yadi.sk/d/0taFuYqg7dy3F

 скетч sketch: 
 v.01 Arduino солдат Demo управление домом телефоном и IR Phone Control DTMF Decoder extender
 http://yadi.sk/d/lDN3Ip-g7dxyt
 ================================ 
 что нам понадобиться. 
 Аппаратное:
 
 Из чего состоит  генерал сервер:
 1. ATMEGA328P-PU Microcontroller ARDUINO UNO Bootloader
 и 16MHz Crystal.
 2. Телефон.
 3. 12CH Smart Home Controller Voice Phone Control DTMF MT8870 Audio Decoder Modules.  
 4. ИК инфракрасный приёмник.
 5. Радио модуль NRF24L01+ . 
 6. Breadboard макетная плата.
 
 Не обязательно: 
 7. USB Сериал адаптер, для питания и заливки скетча, + кнопка
 USB To RS232 TTL PL2303HX Auto Converter Module Converter Adapter.
 8. Stackable Shield Header для крепления радио модуля NRF24L01+, к Breadboard макетной плате.
 9. Провода.
 10. Светодиоды нужны только для визуального контроля за процессом.
 11. Скобы замыкания Mini Jumper  2.54mm.
 12. Любой ИК инфракрасный пульт.
 -------------------------
 
 Из чего состоит Солдат сервер:
 1. ATMEGA328P-PU Microcontroller ARDUINO UNO Bootloader,
 и 16MHz Crystal.
 2. радио модуль NRF24L01+  .
 3. Breadboard макетная плата.
 4. на выбор, ИК инфракрасный передатчик, или мотор, или servo, или................
 Не обязательно; 
 5. USB Сериал адаптер, для питания и заливки скетча, + кнопка
 USB To RS232 TTL PL2303HX Auto Converter Module Converter Adapter.
 6. Stackable Shield Header для крепления радио модуля NRF24L01+, к Breadboard макетной плате
 7. Провода.
 8. Светодиоды нужны только для визуального контроля за процессом.
 
 --------------------------------
 программное:
 2. Библиотеки.
 
 1.IRremote, библиотека для работы с ИК сигналом.
 Скачать библиотеку IRremote для ИК пульта
 https://disk.yandex.ru/public/?hash=yNz1au3lm3/yyMHOYtnZ2UGSf19wTvYBZnkx...
 
 IRremote эта библиотека кажется по новее будет
 http://yadi.sk/d/0jIS1tfw6tbb7
 
 https://github.com/shirriff/Arduino-IRremote
 
 ----- 
 2. RF24  библиотека для работы с радио модулем NRF24L01+ 2.4GHz
 //https://github.com/maniacbug/RF24
 //https://github.com/maniacbug/RF24/archive/master.zip
 //http://yadi.sk/d/ZvMq19fB6lgPs
 =======================================================
 подробную видео инструкцию выложу здесь
 http://www.youtube.com/watch?v=n_ACfbr6C5M&feature=c4-overview&list=UU7a...
 ++++++++++++++++++++++++++++++ 
 Вспомогательные видео обзоры, скетчи.....

 Из чего состоит генерал сервер:+Вспомогательные видео обзоры+Библиотеки 
 http://www.youtube.com/watch?v=vjZLdIknGQ0
 
 v.01 Arduino управление домом телефоном Phone Control DTMF Decoder IR extender
 https://www.youtube.com/watch?v=KeTRkKmfonk
 
 
 управление домом через телефон Phone Control DTMF MT8870 Audio Decoder 
 http://www.youtube.com/watch?v=oTZ6NqeKvVU&feature=c4-overview&list=UU7a...  
 
 v.01 Arduino радио удлинитель ИК пульта IR NRF24L01 RF wireless IR extender 
 https://www.youtube.com/watch?v=0OCbtW-RfIY
 
 
 скетч arduino чтобы узнать код кнопки ИК пульта
 sketch arduino buttons on the remote to learn the code
 https://disk.yandex.ru/public/?hash=KzLtuC1ljISPaCoXw03D6mbiKea8spktcWL5... 
 
 4/6 как ? узнать код - кнопки своего ИК пульта
 http://www.youtube.com/watch?v=InZuGntH_wk
 
 
 v.01 Arduino IR Управление с ИК пульта в режиме удержания кнопки
 https://www.youtube.com/watch?v=AjIASUNiWkY
 
 усилитель ИК инфракрасного сигнала IR infrared signal amplifier на одном транзисторе Arduino
 http://www.youtube.com/watch?v=3EYxONWSyR4
 
 Самый дешевый Arduino Uno 5$ Minimal Atmega328 without Arduino Board
 http://www.youtube.com/watch?v=joSc-AT8o5k
 
 
 Arduino загрузить sketch В ATmega. USB To RS232 TTL PL2303HX Converter Adapter
 http://www.youtube.com/watch?v=W4LPlKKb__8
 
 *******************************************************
 Магазины, где я покупал детали для устройства.
 
 
 12CH Smart Home Controller Voice Phone Control DTMF MT8870 Audio Decoder Modules
 http://www.ebay.com/itm/12CH-Smart-Home-Controller-Voice-Phone-Control-D...
 
 NRF24L01+ 2.4GHz Antenna Wireless Transceiver Module For Arduino Microcontroller
 http://www.ebay.co.uk/itm/NRF24L01-2-4GHz-Antenna-Wireless-Transceiver-M...
 
 5 X ATMEGA328P-PU Microcontrolle?r With ARDUINO UNO Bootloader
 http://www.ebay.co.uk/itm/5-X-ATMEGA328P-PU-Microcontrolle-r-With-ARDUIN...
 
 
 20Pcs New 16.000MHZ 16MHZ 16M HZ HC-49S Crystal Oscillator
 http://www.ebay.co.uk/itm/20Pcs-New-16-000MHZ-16MHZ-16M-HZ-HC-49S-Crysta...
 
 10Pcs NEW VS1838 TL1838 VS1838B Universal Infrared Receiving Head
 http://www.ebay.com/itm/10Pcs-NEW-VS1838-TL1838-VS1838B-Universal-Infrar...
 
 
 New Mini Solderless Breadboard Transparent Material 400 Points Available DIY
 http://www.ebay.co.uk/itm/New-Mini-Solderless-Breadboard-Transparent-Mat...
 
 
 USB To RS232 TTL PL2303HX Auto Converter Module Converter Adapter For arduino
 http://www.ebay.com/itm/USB-To-RS232-TTL-PL2303HX-Auto-Converter-Module-...
 
 
 Arduino Stackable Shield Header
 http://www.ebay.co.uk/sch/i.html?_odkw=Stackable+Shield+Header&_osacat=0...
 
 
 Микро выключатель пластиночный (ID:128-51)
 http://dvrobot.ru/?show=shop&item_id=128
 
 Mini Jumper  2.54mm
 http://www.ebay.com/sch/i.html?_sacat=0&_from=R40&_armrs=1&_nkw=Mini+Jum...
 
 
 
 ************************************************************
 
 
 */



// Подключаем скачанную библиотеку RF24.
#include <SPI.h>  
#include "RF24.h"

// подключаем скачанную библиотеку IRremote
#include <IRremote.h> // это скачанная библиотека 
int RECV_PIN = 4; //вход ИК приемника 
IRrecv irrecv(RECV_PIN);
decode_results results;


//пины от DTMF Decoder, подключаем к пинам Arduino
// во время поступления тонального сигнала, DTMF_Decoder_Pin меняет своё состояние с HIGH на LOW.
int DTMF_Decoder_Pin12 = 1;
int DTMF_Decoder_Pin11 = 2;
int DTMF_Decoder_Pin10 = 3;   
int DTMF_Decoder_Pin4 = 5;  
int DTMF_Decoder_Pin3 = 6;
int DTMF_Decoder_Pin2 = 7;
int DTMF_Decoder_Pin1 = 8;      
int DTMF_Decoder_Pin5 = 14; //пин 14, на Arduino Uno, Atmega328 (A0)
int DTMF_Decoder_Pin6 = 15; //пин 15, на Arduino Uno, Atmega328 (A1)
int DTMF_Decoder_Pin7 = 16;    
int DTMF_Decoder_Pin8 = 17;
int DTMF_Decoder_Pin9 = 18;

// во время поступления ЛЮБОГО ! тонального сигнала, DTMF_Decoder_STD_Pin15 меняет своё состояние с LOW на HIGH 
int DTMF_Decoder_STD_Pin15 = 0;  //пин 0, на Atmega328 (D0)


//переменная для радио кодов
int radiocode[1];


//Контакты от радио модуля NRF24L01 подключаем к пинам на -> Arduino,Atmega328

//SCK  -> 13
//MISO -> 12
//MOSI -> 11
//CSN  -> 10
//CE   -> 9

// Set up nRF24L01 radio on SPI bus plus pins 9 & 10 
RF24 radio(9,10);


const uint64_t pipes[2] = {
  0xF0F0F0F000LL, 0xF0F0F0F0FFLL};// адреса каналов приема и передачи радио сигнала




// MENU_LEDpin для увеличения количества команд от (DTMF Decoder) с 12 до 20
//у нас 12 команд (1,2,3,4,5,6,7,8,9,0,*,#) если нажать на телефоне (#) включится MENU_LEDpin,если нажать на телефоне (*) 
//выключится MENU_LEDpin.
// в зависимости от состояния MENU_LEDpin, будут отправляться разные радио команды.
// таким образом из 10 кнопок на телефоне, мы делаем 20 (кнопок)
// тоже самое делаем с ИК инфракрасным пультом.
int MENU_LEDpin = 19;//пин 15, на Arduino Uno, Atmega328 (A5)




// далее что внизу имеет отношение к приёму и обработки сигнала от ИК инфракрасного пульта
// без этого можно обойтись
//? тогда зачем городить огород?. 
//мой опыт работы с ИК пультами выявил разные принципы отправки ИК сигналов кодов у разных производителе техники (пультов) 
//мне нужно, чтоб система могла работать и в режиме удержания кнопки, для этого нужно постоянно слать ИК код с пульта
// пока кнопка на пульте нажата.
//Увы, есть пульты которые шлют код только один раз, в момент нажатия кнопки.  
// послав 1 код, пульт далее продолжает слать (в момент удержания кнопки), (назовем его (пустой инфракрасный сигнал).
// после отпускания кнопки (пустой инфракрасный сигнал) исчезает.
// Задача такая, после приёма определённого кода кнопки,сразу перехватывать идущий за ним (кодом) (пустой инфракрасный сигнал)
// и считать его, (пустой инфракрасный сигнал) за код кнопки. 
//после пропадания (пустого инфракрасного сигнала), будем считать, что код перестал слаться


//eventTime, для паузы,  вместо delay,будем использовать функцию millis. 
unsigned long eventTime=0;

// переменная timer чтобы конвертировать пульсирующий (-) с (ИК) преемника сигнал в постоянный. и.....
int timer=0;


// переменная переключения режима, при нажатии кнопки на ИК инфракрасным пульте,она принимает значение 1
//для. когда, && (digitalRead(MENU_LEDpin) == LOW)) q=1;
int q=0; 
int w=0; 
int e=0; 
int r=0; 
int t=0; 
int y=0; 
int u=0; 
int i=0; 
int o=0; 
int p=0; 

//для. когда && (digitalRead(MENU_LEDpin) == HIGH)) a=1;
int a=0; 
int s=0; 
int d=0; 
int f=0; 
int g=0; 
int h=0; 
int j=0; 
int k=0; 
int l=0; 
int z=0; 

void setup(void){ 

  //настройки для радио модуля NRF24L01+ 2.4GHz
  radio.begin();  
  radio.setDataRate(RF24_250KBPS); // Скорость передачи
  radio.setChannel(100); // Номер канала от 0 до 127
  radio.setRetries(15,15); // Кол-во попыток и время между попытками
  radio.openWritingPipe(pipes[1]);  // Открываем канал передачи
  radio.openReadingPipe(1, pipes[0]); // Открываем один из 6-ти каналов приема
  radio.startListening(); // Начинаем слушать эфир



  // назначаем пины как ВХоды
  pinMode(DTMF_Decoder_Pin1, INPUT);  
  pinMode(DTMF_Decoder_Pin2, INPUT);
  pinMode(DTMF_Decoder_Pin3, INPUT);  
  pinMode(DTMF_Decoder_Pin4, INPUT);  
  pinMode(DTMF_Decoder_Pin5, INPUT);
  pinMode(DTMF_Decoder_Pin6, INPUT);    
  pinMode(DTMF_Decoder_Pin7, INPUT);  
  pinMode(DTMF_Decoder_Pin8, INPUT);
  pinMode(DTMF_Decoder_Pin9, INPUT); 
  pinMode(DTMF_Decoder_Pin10, INPUT);  
  pinMode(DTMF_Decoder_Pin11, INPUT);
  pinMode(DTMF_Decoder_Pin12, INPUT);

  pinMode(DTMF_Decoder_STD_Pin15, INPUT); 

  irrecv.enableIRIn(); // включить ИК приемник


  pinMode(MENU_LEDpin, OUTPUT); // назначаем пин как вЫход
} 
void loop(void){
  // MENU_LEDpin для увеличения количества команд от (DTMF Decoder) с 12 до 20
  //нас 12 команд (1,2,3,4,5,6,7,8,9,0,*,#) если нажать на телефоне (#) включится MENU_LEDpin,если нажать на телефоне (*) 
  //выключится MENU_LEDpin.
  // в зависимости от состояния MENU_LEDpin будут отправляться разные радио команды
  // таким образом из 10 кнопок на телефоне, мы делаем (20 кнопок)

  if (digitalRead(DTMF_Decoder_Pin11) == LOW && (digitalRead(DTMF_Decoder_STD_Pin15) == HIGH))digitalWrite(MENU_LEDpin, LOW);

  if (digitalRead(DTMF_Decoder_Pin12) == LOW && (digitalRead(DTMF_Decoder_STD_Pin15) == HIGH))digitalWrite(MENU_LEDpin, HIGH);



  // Эта часть кода отвечает за отсылку радио кода на Arduino солдат  

  //когда поступает определённый тоновый сигнал клавиши с телефона, на DTMF Decoder, то DTMF Decoder переключает 
  //состояние определённого выхода в  LOW. И остаётся в этом LOW до следующей другой тоновой команды от телефона.
  // такое поведение не годится для моих задач. (а задача нажал на кнопку сигнал идёт , отпустил кнопку сигнал пропадает ) 
  // поэтому задействуем общий пин (STD)-(DTMF_Decoder_STD_Pin15)
  //в момент поступления любого из 12 тональных сигналов (STD) меняет своё состояние на HIGH
  //после пропадания сигнала (STD) обратно становится в LOW
  // поэтому применим Логический оператор (И)&&).
  //если (digitalRead(DTMF_Decoder_Pin1) == LOW && (digitalRead(DTMF_Decoder_STD_Pin15) == HIGH
  //применим Логический оператор (И)&&)для увеличения команд до 20 //&&(digitalRead(MENU_LEDpin) ==
  //если всё совпало, отсылаем радио код например № 101 //radiocode[0] = 101;


  //когда MENU_LEDpin) == LOW будем слать первую 10 ку радио кодов (с 101 по 110) на Arduino солдат.
  //когда MENU_LEDpin) == HIGH будем слать вторую 10 ку радио кодов (с 111 по 120) на Arduino солдат.

  if (digitalRead(DTMF_Decoder_Pin1) == LOW && (digitalRead(DTMF_Decoder_STD_Pin15) == HIGH  &&(digitalRead(MENU_LEDpin) == LOW)))
  { 
    radiocode[0] = 101;
    radio.stopListening();    
    radio.write(radiocode, 1); 
    radio.startListening();
  }

  if (digitalRead(DTMF_Decoder_Pin2) == LOW && (digitalRead(DTMF_Decoder_STD_Pin15) == HIGH  &&(digitalRead(MENU_LEDpin) == LOW)))
  { 
    radiocode[0] = 102;
    radio.stopListening(); 
    radio.write(radiocode, 1); 
    radio.startListening();
  }  

  if (digitalRead(DTMF_Decoder_Pin3) == LOW && (digitalRead(DTMF_Decoder_STD_Pin15) == HIGH  &&(digitalRead(MENU_LEDpin) == LOW)))
  { 
    radiocode[0] = 103;
    radio.stopListening(); 
    radio.write(radiocode, 1); 
    radio.startListening();
  }

  if (digitalRead(DTMF_Decoder_Pin4) == LOW && (digitalRead(DTMF_Decoder_STD_Pin15) == HIGH  &&(digitalRead(MENU_LEDpin) == LOW)))
  { 
    radiocode[0] = 104;
    radio.stopListening(); 
    radio.write(radiocode, 1); 
    radio.startListening();
  }  

  if (digitalRead(DTMF_Decoder_Pin5) == LOW && (digitalRead(DTMF_Decoder_STD_Pin15) == HIGH  &&(digitalRead(MENU_LEDpin) == LOW)))
  { 
    radiocode[0] = 105;
    radio.stopListening(); 
    radio.write(radiocode, 1); 
    radio.startListening();
  }

  if (digitalRead(DTMF_Decoder_Pin6) == LOW && (digitalRead(DTMF_Decoder_STD_Pin15) == HIGH  &&(digitalRead(MENU_LEDpin) == LOW)))
  { 
    radiocode[0] = 106;
    radio.stopListening(); 
    radio.write(radiocode, 1); 
    radio.startListening();
  }  

  if (digitalRead(DTMF_Decoder_Pin7) == LOW && (digitalRead(DTMF_Decoder_STD_Pin15) == HIGH  &&(digitalRead(MENU_LEDpin) == LOW)))
  { 
    radiocode[0] = 107;
    radio.stopListening(); 
    radio.write(radiocode, 1); 
    radio.startListening();
  }

  if (digitalRead(DTMF_Decoder_Pin8) == LOW && (digitalRead(DTMF_Decoder_STD_Pin15) == HIGH  &&(digitalRead(MENU_LEDpin) == LOW)))
  { 
    radiocode[0] = 108;
    radio.stopListening(); 
    radio.write(radiocode, 1); 
    radio.startListening();
  }  

  if (digitalRead(DTMF_Decoder_Pin9) == LOW && (digitalRead(DTMF_Decoder_STD_Pin15) == HIGH  &&(digitalRead(MENU_LEDpin) == LOW)))
  { 
    radiocode[0] = 109;
    radio.stopListening(); 
    radio.write(radiocode, 1); 
    radio.startListening();
  }

  if (digitalRead(DTMF_Decoder_Pin10) == LOW && (digitalRead(DTMF_Decoder_STD_Pin15) == HIGH  &&(digitalRead(MENU_LEDpin) == LOW)))
  { 
    radiocode[0] = 110;
    radio.stopListening(); 
    radio.write(radiocode, 1); 
    radio.startListening();
  }  


  //когда MENU_LEDpin) == HIGH будем слать вторую 10 ку радио кодов 



  if (digitalRead(DTMF_Decoder_Pin1) == LOW && (digitalRead(DTMF_Decoder_STD_Pin15) == HIGH  &&(digitalRead(MENU_LEDpin) == HIGH)))
  { 
    radiocode[0] = 111;
    radio.stopListening(); 
    radio.write(radiocode, 1); 
    radio.startListening();
  }

  if (digitalRead(DTMF_Decoder_Pin2) == LOW && (digitalRead(DTMF_Decoder_STD_Pin15) == HIGH  &&(digitalRead(MENU_LEDpin) == HIGH)))
  { 
    radiocode[0] = 112;
    radio.stopListening(); 
    radio.write(radiocode, 1); 
    radio.startListening();
  }  

  if (digitalRead(DTMF_Decoder_Pin3) == LOW && (digitalRead(DTMF_Decoder_STD_Pin15) == HIGH  &&(digitalRead(MENU_LEDpin) == HIGH)))
  { 
    radiocode[0] = 113;
    radio.stopListening(); 
    radio.write(radiocode, 1); 
    radio.startListening();
  }

  if (digitalRead(DTMF_Decoder_Pin4) == LOW && (digitalRead(DTMF_Decoder_STD_Pin15) == HIGH  &&(digitalRead(MENU_LEDpin) == HIGH)))
  { 
    radiocode[0] = 114;
    radio.stopListening(); 
    radio.write(radiocode, 1); 
    radio.startListening();
  }  

  if (digitalRead(DTMF_Decoder_Pin5) == LOW && (digitalRead(DTMF_Decoder_STD_Pin15) == HIGH  &&(digitalRead(MENU_LEDpin) == HIGH)))
  { 
    radiocode[0] = 115;
    radio.stopListening(); 
    radio.write(radiocode, 1); 
    radio.startListening();
  }

  if (digitalRead(DTMF_Decoder_Pin6) == LOW && (digitalRead(DTMF_Decoder_STD_Pin15) == HIGH  &&(digitalRead(MENU_LEDpin) == HIGH)))
  { 
    radiocode[0] = 116;
    radio.stopListening(); 
    radio.write(radiocode, 1); 
    radio.startListening();
  }  

  if (digitalRead(DTMF_Decoder_Pin7) == LOW && (digitalRead(DTMF_Decoder_STD_Pin15) == HIGH  &&(digitalRead(MENU_LEDpin) == HIGH)))
  { 
    radiocode[0] = 117;
    radio.stopListening(); 
    radio.write(radiocode, 1); 
    radio.startListening();
  }

  if (digitalRead(DTMF_Decoder_Pin8) == LOW && (digitalRead(DTMF_Decoder_STD_Pin15) == HIGH  &&(digitalRead(MENU_LEDpin) == HIGH)))
  { 
    radiocode[0] = 118;
    radio.stopListening(); 
    radio.write(radiocode, 1); 
    radio.startListening();
  }  

  if (digitalRead(DTMF_Decoder_Pin9) == LOW && (digitalRead(DTMF_Decoder_STD_Pin15) == HIGH  &&(digitalRead(MENU_LEDpin) == HIGH)))
  { 
    radiocode[0] = 119;
    radio.stopListening(); 
    radio.write(radiocode, 1); 
    radio.startListening();
  }

  if (digitalRead(DTMF_Decoder_Pin10) == LOW && (digitalRead(DTMF_Decoder_STD_Pin15) == HIGH  &&(digitalRead(MENU_LEDpin) == HIGH)))
  { 
    radiocode[0] = 120;
    radio.stopListening(); 
    radio.write(radiocode, 1); 
    radio.startListening();
  }  


  //ура" с DTMF Decoder  закончили.. приступим к обработки ИК инфракрасного сигнала


  // если переменная q ил w стала 1 ,начинаем слать радио код № 121
  //или w стала 1 ,начинаем слать радио код № 122



  if (q==1)
  { 
    radiocode[0] = 121; 
    radio.stopListening();
    radio.write(radiocode, 1);
    radio.startListening();
  }

  if (w==1)
  { 
    radiocode[0] = 122; 
    radio.stopListening();
    radio.write(radiocode, 1);
    radio.startListening();
  }

  if (e==1)
  { 
    radiocode[0] = 123; 
    radio.stopListening();
    radio.write(radiocode, 1);
    radio.startListening();
  }

  if (r==1)
  { 
    radiocode[0] = 124; 
    radio.stopListening();
    radio.write(radiocode, 1);
    radio.startListening();
  }

  if (t==1)
  { 
    radiocode[0] = 125; 
    radio.stopListening();
    radio.write(radiocode, 1);
    radio.startListening();
  }

  if (y==1)
  { 
    radiocode[0] = 126; 
    radio.stopListening();
    radio.write(radiocode, 1);
    radio.startListening();
  }

  if (u==1)
  { 
    radiocode[0] = 127; 
    radio.stopListening();
    radio.write(radiocode, 1);
    radio.startListening();
  }

  if (i==1)
  { 
    radiocode[0] = 128; 
    radio.stopListening();
    radio.write(radiocode, 1);
    radio.startListening();
  }

  if (o==1)
  { 
    radiocode[0] = 129; 
    radio.stopListening();
    radio.write(radiocode, 1);
    radio.startListening();
  }

  if (p==1)
  { 
    radiocode[0] = 130; 
    radio.stopListening();
    radio.write(radiocode, 1);
    radio.startListening();
  }







  if (a==1)
  { 
    radiocode[0] = 131; 
    radio.stopListening();
    radio.write(radiocode, 1);
    radio.startListening();
  }

  if (s==1)
  { 
    radiocode[0] = 132; 
    radio.stopListening();
    radio.write(radiocode, 1);
    radio.startListening();
  }

  if (d==1)
  { 
    radiocode[0] = 133; 
    radio.stopListening();
    radio.write(radiocode, 1);
    radio.startListening();
  }

  if (f==1)
  { 
    radiocode[0] = 134; 
    radio.stopListening();
    radio.write(radiocode, 1);
    radio.startListening();
  }

  if (g==1)
  { 
    radiocode[0] = 135; 
    radio.stopListening();
    radio.write(radiocode, 1);
    radio.startListening();
  }

  if (h==1)
  { 
    radiocode[0] = 136; 
    radio.stopListening();
    radio.write(radiocode, 1);
    radio.startListening();
  }

  if (j==1)
  { 
    radiocode[0] = 137; 
    radio.stopListening();
    radio.write(radiocode, 1);
    radio.startListening();
  }

  if (k==1)
  { 
    radiocode[0] = 138; 
    radio.stopListening();
    radio.write(radiocode, 1);
    radio.startListening();
  }

  if (l==1)
  { 
    radiocode[0] = 139; 
    radio.stopListening();
    radio.write(radiocode, 1);
    radio.startListening();
  }

  if (z==1)
  { 
    radiocode[0] = 140; 
    radio.stopListening();
    radio.write(radiocode, 1);
    radio.startListening();
  }



  // Эта конструкция нужна чтобы. 
  //1.после приёма определённого кода кнопки,перехватывать  (пустой инфракрасный сигнал)
  //2.конвертировать пульсирующий (-) с (ИК) преемника сигнал в постоянный.
  //После появления и пропадания сигнала, состояние сразу не меняется! а ждет  100 миллисекунд.
  //Если 100 миллисекунд не прошло, и поступил еще один ИК сигнал с пульта, тогда таймер заново запускается на 100 миллисекунд.

  //Проще говоря, пока кнопка на ИК пульте нажата переменная timer остается timer=1;, 
  //если кнопка на пульте отпущена, переменная  timer=0;.

  // Читаем состояние ноги у (ИК) преемника. В момент приема данных, у (ИК) 
  //приемника на выходе появляется пульсирующий (-)отрицательный сигнал


  if (digitalRead(RECV_PIN) == LOW) 
    //  Если обнаружен отрицательный сигнал включаем таймерПИН //timer=1; и запускаем таймер, 
    eventTime=millis(),timer=1;
  //  Продолжительность работы таймера >100 миллисекунд. И Таймер выключаем //timer=0;
  //далее паровозиком за Таймером все переменные выставляем обратно в 0
  if(millis()-eventTime>100) timer=0,q=0,w=0,e=0,r=0,t=0,y=0,u=0,i=0,o=0,p=0,a=0,s=0,d=0,f=0,g=0,h=0,j=0,k=0,l=0,z=0;




  // Эта часть отвечает за приём и обработку ИК кодов
  // здесь считываем коды от ИК пульта



  // У моего пульта при нажатии на одну и ту же кнопку, могут отсылаться два разных (КОДА) сигнала,  чтобы обойти эту проблему
  //я использовал Логический оператор "или" (||) if (results.value == 0x1000809 || results.value == 0xF7283C77
  // Теперь неважно какой код отправлен  с кнопки пульта, первый или второй
  // Если ваша кнопка пульта не страдает раздвоением личности, можете написать так if (results.value == 0x1000809 
  //также мною замечено при использовании разных ИК приемников, частотой 36,или 38, кГц, библиотека IRremote
  // выдает Разные коды.
  //можно сделать 4 "или" (||), чтобы можно было управлять с двух разных ИК пультов





  if (irrecv.decode(&results)){

    //здесь мы делаем тоже самое как с DTMF Decoder, умножаем количество команд в 2 раза  

    if  (results.value == 0x1000E0F || results.value == 0x240C9161)digitalWrite(MENU_LEDpin, LOW);
    if  (results.value == 0x1008E8F || results.value == 0xA26409C9)digitalWrite(MENU_LEDpin, HIGH);

    //ВАЖНО !!! ( 1000809 ) это код кнопки №1 - моего (ИК)! (инфракрасного пульта)!, -
    //-у вашего пульта будет другой код, замените на свой!

    if  (results.value == 0x1000809 || results.value == 0xF7283C77 && (digitalRead(MENU_LEDpin) == LOW)) q=1;
    if  (results.value == 0x1008889 || results.value == 0x757FB4DF && (digitalRead(MENU_LEDpin) == LOW))  w=1;
    if  (results.value == 0x1004849 || results.value == 0xB33B4597 && (digitalRead(MENU_LEDpin) == LOW))  e=1;
    if  (results.value == 0x100C8C9 || results.value == 0x3C03E507 && (digitalRead(MENU_LEDpin) == LOW))  r=1;
    if  (results.value == 0x1002829 || results.value == 0xE705551F && (digitalRead(MENU_LEDpin) == LOW))  t=1;
    if  (results.value == 0x100A8A9 || results.value == 0xA4A58EC7 && (digitalRead(MENU_LEDpin) == LOW))  y=1;
    if  (results.value == 0x1006869 || results.value == 0xE2E45F7F && (digitalRead(MENU_LEDpin) == LOW))  u=1;
    if  (results.value == 0x100E8E9 || results.value == 0x6BACFEEF && (digitalRead(MENU_LEDpin) == LOW))  i=1;
    if  (results.value == 0x1001819 || results.value == 0xE88E91F && (digitalRead(MENU_LEDpin) == LOW))  o=1;
    if  (results.value == 0x1009899 || results.value == 0x7D168BCF && (digitalRead(MENU_LEDpin) == LOW))  p=1;


    if  (results.value == 0x1000809 || results.value == 0xF7283C77 && (digitalRead(MENU_LEDpin) == HIGH)) a=1;
    if  (results.value == 0x1008889 || results.value == 0x757FB4DF && (digitalRead(MENU_LEDpin) == HIGH))  s=1;
    if  (results.value == 0x1004849 || results.value == 0xB33B4597 && (digitalRead(MENU_LEDpin) == HIGH))  d=1;
    if  (results.value == 0x100C8C9 || results.value == 0x3C03E507 && (digitalRead(MENU_LEDpin) == HIGH))  f=1;
    if  (results.value == 0x1002829 || results.value == 0xE705551F && (digitalRead(MENU_LEDpin) == HIGH))  g=1;
    if  (results.value == 0x100A8A9 || results.value == 0xA4A58EC7 && (digitalRead(MENU_LEDpin) == HIGH))  h=1;
    if  (results.value == 0x1006869 || results.value == 0xE2E45F7F && (digitalRead(MENU_LEDpin) == HIGH))  j=1;
    if  (results.value == 0x100E8E9 || results.value == 0x6BACFEEF && (digitalRead(MENU_LEDpin) == HIGH))  k=1;
    if  (results.value == 0x1001819 || results.value == 0xE88E91F && (digitalRead(MENU_LEDpin) == HIGH))  l=1;
    if  (results.value == 0x1009899 || results.value == 0x7D168BCF && (digitalRead(MENU_LEDpin) == HIGH))  z=1;

    // когда таймер обнаружит пропадание ИК сигнала с пульта if (digitalRead(RECV_PIN) == LOW), больше чем
    //на >100 миллисекунд, (то бишь кнопка на ИК пульте отпущена) тогда =1; вернётся в =0;
    //и соответственно ==0; остановит посылку радио кода

    irrecv.resume();  
  } 
} 












/*             v.01 Arduino солдат Demo управление домом телефоном и IR Phone Control DTMF Decoder extender
 ****************************
 урок от Дмитрия Осипова. http://www.youtube.com/user/d36073?feature=watch
 v.01 Arduino солдат Demo управление домом телефоном и IR Phone Control DTMF Decoder extender
 Version 0.1-2013/08/02
 ----------------------------------------
 идеология;
 это скетч sketch, Arduino солдат Demo, в первую очередь предназначен для демонстрации взаимодействия по радиоканалу с
 Arduino генерал.
 Нажимая на клавиши телефона, или отправляя ИК инфракрасный сигнал с пульта, Arduino генерал будет отправлять 
 соответствующий радио код.
 А Arduino солдат Demo будут принимать, и в зависимости от принятого радио кода, будет включать и выключать
 соответствующий светодиод, в режиме удержания кнопки.
 То бишь пока кнопка на телефоне или на ИК инфракрасном пульте нажата, на Arduino солдат Demo включится светодиод,
 если кнопка отпущена светодиод выключается.
 
 В следующих версиях Arduino солдат, я планирую нагрузить его уже полезными в быту функциями.

=======================================================
 подробную видео инструкцию выложу здесь
 http://www.youtube.com/watch?v=n_ACfbr6C5M&feature=c4-overview&list=UU7a...

------------------------------------------
 Из чего состоит генерал сервер:+Вспомогательные видео обзоры+Библиотеки 
 http://www.youtube.com/watch?v=vjZLdIknGQ0

 ------------------------------------------ 
 скетч sketch: 
 v.01 Arduino генерал управление домом телефоном и IR Phone Control DTMF Decoder extender
 http://yadi.sk/d/0taFuYqg7dy3F

 скетч sketch: 
 v.01 Arduino солдат Demo управление домом телефоном и IR Phone Control DTMF Decoder extender
 http://yadi.sk/d/lDN3Ip-g7dxyt
 ========================================== 

 
 */

#include <SPI.h>  
#include "RF24.h"

//Контакты от радио модуля NRF24L01 подключаем к пинам на -> Arduino
//SCK  -> 13
//MISO -> 12
//MOSI -> 11
//CSN  -> 10
//CE   -> 9

// Set up nRF24L01 radio on SPI bus plus pins 9 & 10 
RF24 radio(9,10);


// адреса каналов приема и передачи радио сигнала
const uint64_t pipes[2] = {
  0xF0F0F0F000LL, 0xF0F0F0F0FFLL};

//переменная для радио кода
int radiocode[1];


//пины для светодиодов
int ledPin2 = 2;
int ledPin3 = 3;
int ledPin4 = 4;
int ledPin5 = 5;
int ledPin6 = 6;
int ledPin7 = 7;
int ledPin8 = 8;
int ledPin14 = 14;
int ledPin15 = 15;
int ledPin16 = 16;

// для отключения светодиодов после пропадания радиосигнала, без использования delay
int timer_Pin = 19;

//eventTime, для паузы,  вместо delay, будем использовать функцию millis.
// так как бывают библиотеки которым противопоказан delay, и также я планирую в будущем 
// использовать многозадачность, то бишь параллельно выполнять сразу несколько процессов.
// поэтому решил по возможности отказаться от delay.
//и даже для выключения светодиодов, задействую функцию millis.

//eventTime, для паузы,  вместо delay,будем использовать функцию millis.
unsigned long eventTime=0;


void setup(void){
  radio.begin();  
  radio.setDataRate(RF24_250KBPS);  // Скорость передачи
  radio.setChannel(100); // Номер канала от 0 до 127
  radio.setRetries(15,15); // Кол-во попыток и время между попытками
  radio.openWritingPipe(pipes[0]); // Открываем канал передачи
  radio.openReadingPipe(1, pipes[1]); // Открываем один из 6-ти каналов приема
  radio.startListening(); // Начинаем слушать эфир

  //  Serial будет показывать пришедший радио код. для отладки пригодится
  Serial.begin(9600);

  pinMode(ledPin2, OUTPUT);
  pinMode(ledPin3, OUTPUT);
  pinMode(ledPin4, OUTPUT);
  pinMode(ledPin5, OUTPUT);
  pinMode(ledPin6, OUTPUT);
  pinMode(ledPin7, OUTPUT);
  pinMode(ledPin8, OUTPUT);
  pinMode(ledPin14, OUTPUT);
  pinMode(ledPin15, OUTPUT);
  pinMode(ledPin16, OUTPUT);

  pinMode(timer_Pin, OUTPUT);
}

void loop(void){
  // начинаем слушать радио эфир
  if (radio.available());
  bool done = false;
  while (!done)done = radio.read(radiocode, 1); 

  // этот блок для отключения светодиодов после пропадания радиосигнала, без использования delay
  // и для сглаживания от радио дребезга >100 миллисекунд
  //если поступил радиокод в диапазоне от 100 до 140 
  if (radiocode[0]>100 && radiocode[0]<141) 
    // запускаем таймер,и включаем timer_Pin 
    eventTime=millis(),digitalWrite(timer_Pin, HIGH),Serial.println(radiocode[0]);
  //  Продолжительность работы таймера >100 миллисекунд. И timer_Pin выключаем + все светодиоды
  if(millis()-eventTime>100) digitalWrite(timer_Pin,LOW),digitalWrite(ledPin2, LOW),digitalWrite(ledPin3, LOW),
  digitalWrite(ledPin4,LOW),digitalWrite(ledPin5,LOW),digitalWrite(ledPin6,LOW),digitalWrite(ledPin7,LOW),
  digitalWrite(ledPin8,LOW),digitalWrite(ledPin14,LOW),digitalWrite(ledPin15,LOW),digitalWrite(ledPin16,LOW);

  // если пришёл радио код 101 то digitalWrite(ledPin2, HIGH);

  if (radiocode[0] == 101)digitalWrite(ledPin2, HIGH);
  if (radiocode[0] == 102)digitalWrite(ledPin3, HIGH);
  if (radiocode[0] == 103)digitalWrite(ledPin4, HIGH);
  if (radiocode[0] == 104)digitalWrite(ledPin5, HIGH);
  if (radiocode[0] == 105)digitalWrite(ledPin6, HIGH);
  if (radiocode[0] == 106)digitalWrite(ledPin7, HIGH);
  if (radiocode[0] == 107)digitalWrite(ledPin8, HIGH);
  if (radiocode[0] == 108)digitalWrite(ledPin14, HIGH);
  if (radiocode[0] == 109)digitalWrite(ledPin15, HIGH);
  if (radiocode[0] == 110)digitalWrite(ledPin16, HIGH);

  if (radiocode[0] == 111)digitalWrite(ledPin2, HIGH);
  if (radiocode[0] == 112)digitalWrite(ledPin3, HIGH);
  if (radiocode[0] == 113)digitalWrite(ledPin4, HIGH);
  if (radiocode[0] == 114)digitalWrite(ledPin5, HIGH);
  if (radiocode[0] == 115)digitalWrite(ledPin6, HIGH);
  if (radiocode[0] == 116)digitalWrite(ledPin7, HIGH);
  if (radiocode[0] == 117)digitalWrite(ledPin8, HIGH);
  if (radiocode[0] == 118)digitalWrite(ledPin14, HIGH);
  if (radiocode[0] == 119)digitalWrite(ledPin15, HIGH);
  if (radiocode[0] == 120)digitalWrite(ledPin16, HIGH);


  if (radiocode[0] == 121)digitalWrite(ledPin2, HIGH);
  if (radiocode[0] == 122)digitalWrite(ledPin3, HIGH);
  if (radiocode[0] == 123)digitalWrite(ledPin4, HIGH);
  if (radiocode[0] == 124)digitalWrite(ledPin5, HIGH);
  if (radiocode[0] == 125)digitalWrite(ledPin6, HIGH);
  if (radiocode[0] == 126)digitalWrite(ledPin7, HIGH);
  if (radiocode[0] == 127)digitalWrite(ledPin8, HIGH);
  if (radiocode[0] == 128)digitalWrite(ledPin14, HIGH);
  if (radiocode[0] == 129)digitalWrite(ledPin15, HIGH);
  if (radiocode[0] == 130)digitalWrite(ledPin16, HIGH);


  if (radiocode[0] == 131)digitalWrite(ledPin2, HIGH);
  if (radiocode[0] == 132)digitalWrite(ledPin3, HIGH);
  if (radiocode[0] == 133)digitalWrite(ledPin4, HIGH);
  if (radiocode[0] == 134)digitalWrite(ledPin5, HIGH);
  if (radiocode[0] == 135)digitalWrite(ledPin6, HIGH);
  if (radiocode[0] == 136)digitalWrite(ledPin7, HIGH);
  if (radiocode[0] == 137)digitalWrite(ledPin8, HIGH);
  if (radiocode[0] == 138)digitalWrite(ledPin14, HIGH);
  if (radiocode[0] == 139)digitalWrite(ledPin15, HIGH);
  if (radiocode[0] == 140)digitalWrite(ledPin16, HIGH);

  // когда кнопку отпустим, timer_Pin через 100 миллисекунд станет LOW, и вернёт ledPin обратно в LOW.
} 










 

dimka
dimka аватар
Offline
Зарегистрирован: 21.09.2012

Arduino NRF24L01+ Servo radio potentiometer Переменный резистор wireless Control

Пользователь Andre Trex оставил комментарий 1 час назад

Дмитрий большое спасибо за видео , Я смотрю ваши уроки по ардуине с большим интересом. Вы не могли бы еще выложить урок ( управление сервой через nRF24L01, переменным резистором ( потенциометр-ардуина-платка nRF24L01------радиоэфиор------платка nRF24L01-ардуина-серва.)

Буду очень благодарен ! :)



----------------------------------------­--



скетч sketch: №1 и №2 Arduino NRF24L01+ Servo radio potentiometer Переменный резистор wireless Control

http://yadi.sk/d/N5WwZffA811qF

================================ 

что нам понадобиться. 

Аппаратное:



1. Arduino -2 штуки.

2. Радио модуль NRF24L01+ 2.4GHz -2 штуки.

3. Servo 1 штука.

4. potentiometer Переменный резистор 1 штука.

(потенциометр) Поворотом движка изменяет сопротивление от нуля до номинального сопротивления 

--------------------------------

/*              код №1  (transmitter) передатчик
 Arduino NRF24L01+ Servo radio potentiometer Переменный резистор wireless Control
 ****************************
 урок от Дмитрия Осипова. http://www.youtube.com/user/d36073?feature=watch
 
 ------------------------------
 Пользователь Andre Trex оставил комментарий 1 час назад
 Дмитрий большое спасибо за видео , Я смотрю ваши уроки по ардуине с большим интересом. Вы не могли бы еще выложить урок ( управление сервой через nRF24L01, переменным резистором ( потенциометр-ардуина-платка nRF24L01------радиоэфиор------платка nRF24L01-ардуина-серва.)
 Буду очень благодарен ! :)
 
 ------------------------------------------
 
 скетч sketch: №1 и №2 Arduino NRF24L01+ Servo radio potentiometer Переменный резистор wireless Control
 http://yadi.sk/d/N5WwZffA811qF
 ================================ 
 что нам понадобиться. 
 Аппаратное:
 
 1. Arduino -2 штуки.
 2. Радио модуль NRF24L01+ 2.4GHz -2 штуки.
 3. Servo     1 штука.
 4. potentiometer Переменный резистор 1 штука.
 (потенциометр) Поворотом движка изменяет сопротивление от нуля до номинального сопротивления 
 --------------------------------
 программное:
 Библиотеки.
 
 RF24  библиотека для работы с радио модулем NRF24L01+ 2.4GHz
 //https://github.com/maniacbug/RF24
 //https://github.com/maniacbug/RF24/archive/master.zip
 //http://yadi.sk/d/ZvMq19fB6lgPs
 
 =======================================================
 подробную видео инструкцию выложу здесь
 http://www.youtube.com/watch?v=HeSlLBSnGWo&feature=c4-overview&list=UU7a...
 ++++++++++++++++++++++++++++++ 
 Вспомогательные видео обзоры, скетчи.....
 
 
 v.02 NRF24L01 if Arduino №1 button press-Arduino №2 LED on 
 https://www.youtube.com/watch?v=iJJVj9kgS-A
 
 v.01 NRF24L01 if Arduino №1 button press-Arduino №2 LED on 
 https://www.youtube.com/watch?v=aJVSrGwZs2s
 
 
 Arduino1 NRF24L01 Serial send. - Arduino2 led. LOW HIGH
 https://www.youtube.com/watch?v=aHgxXXRwtOE&noredirect=1
 
 Arduino Радио модуль nRF24L01 -2.4GHz RF24 Libraries. test
 https://www.youtube.com/watch?v=B6LHfwisgUQ
 
 
 v.01 Arduino генерал управление домом телефоном и IR Phone Control DTMF Decoder extender
 http://www.youtube.com/watch?v=n_ACfbr6C5M&feature=c4-overview&list=UU7a...
 
 */
#include <SPI.h>

#include "RF24.h"

int msg[1];

//Контакты от радиомодуля NRF24L01 подключаем к пинамнам -> Arduino
//SCK -> 13//MISO -> 12//MOSI -> 11//CSN -> 10//CE -> 9
// Set up nRF24L01 radio on SPI bus plus pins 9 & 10
RF24 radio(9,10);

const uint64_t pipe = 0xE8E8F0F0E1LL; // адрес канала передачи

int potpin = 0;  // analog pin used to connect the potentiometer
int val;    // variable to read the value from the analog pin 

void setup(void){                     
  radio.begin();
  radio.openWritingPipe(pipe); // Открываем канал передачи
}
void loop(void){  
  val = analogRead(potpin);            // reads the value of the potentiometer (value between 0 and 1023) 
  val = map(val, 0, 1023, 0, 179);     // scale it to use it with the servo (value between 0 and 180) 

  msg[0] = val;
  radio.write(msg, 1);
}














/*

 
 // код №2  (receiver) приёмник
 // Arduino NRF24L01+ Servo radio potentiometer Переменный резистор wireless Control
 
 #include <Servo.h> 
 #include <SPI.h>
 
 #include "RF24.h"
 
 Servo myservo;  // create servo object to control a servo 
 
 //Контакты от радиомодуля NRF24L01 подключаем к пинамнам -> Arduino
 //SCK -> 13//MISO -> 12//MOSI -> 11//CSN -> 10//CE -> 9
 // Set up nRF24L01 radio on SPI bus plus pins 9 & 10
 RF24 radio(9,10);
 
 const uint64_t pipe = 0xE8E8F0F0E1LL; // адрес канала
 
 int msg[1];
 void setup() 
 { 
 // Serial.begin(9600);
 myservo.attach(3);  // attaches the servo on pin 3 to the servo object 
 radio.begin();
 radio.openReadingPipe(1,pipe); // Открываем один из 6-ти каналов приема
 radio.startListening(); // Начинаем слушать эфир 
 } 
 void loop() 
 { 
 if (radio.available()){
 bool done = false;
 while (!done){
 done = radio.read(msg, 1);      
 myservo.write (msg[0]);
 //Serial.println(msg[0]);
 }
 }
 }
 
 
 */

 

maksim
Offline
Зарегистрирован: 12.02.2012
Клапауций
Offline
Зарегистрирован: 10.02.2013

Сейчас он ломанётся свои 300 постов редактировать - чел просто сошёл с ума и решил запостить все свои исходники.

Засрал весь ютуб своими уроками - теперь всюда прокрался.

JollyBiber
JollyBiber аватар
Offline
Зарегистрирован: 08.05.2012

Человек старается между прочим!

"пустой инфракрасный сигнал", "читаем состояние ноги", int radiocode[1], 40 однострочный if-ов

Больше товаров хороших и нужных!

leshak
Offline
Зарегистрирован: 29.09.2011

Клапауций пишет:

Засрал весь ютуб своими уроками - теперь всюда прокрался.

Угу. И, блин, ведь будет известным. Учится по нему будут. Хотя, похоже ему бы не мешало самому чуть-чуть про циклы и функции почитать.

Вроде и полезное дело делает, но... ведь это же уроки "типичного индусского кода". Который новичок может только скопипастать. Шаг вправо/шаг в лево - "ой, не работает, сделайте мне что-нибудь с этой портянкой".

Клапауций
Offline
Зарегистрирован: 10.02.2013

leshak пишет:
Угу. И, блин, ведь будет известным. 

Известность городского сумасшедшего у него уже есть.

Никакой полезности в его деятельности нет - в инете и так полно странного самопиара.

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

какой то молчаливый сумашедший.. а можно удалить нафиг его посты.. а то чет мотать километры не смешно даже... колесо на мышке раскалилось... да и тема у нас тут вроде была про RF24 модуль и библиотеки к нему а не какие то сраные километры непонятного кода..

dmw
Offline
Зарегистрирован: 24.03.2013

Помогите скрестить на одной arduino uno два spi устройства: ethernet шилд w5100 + nrf24l01

Ктото смог реализовать? Ато теории много, а реального скетча так не смог найти.