Если не ясно - то расшифровываю - выводы RS и Е дисплея подключены к тем же выводам что и MISO, MOSI, которые уже заняты SPI для работы с nRF24L01. По этой причине и не работает.
Puhlyaviy пишет:
я так понял что дисплей тоже на SPI
Puhlyaviy пишет:
какая у вас клева SPI раз и на другие пины переназначил... вот бы мне где такую найти...
Не правильно поняли, это обычный дисплей с 4-битной шиной и может работать на любых выводах.
/* Подключаем библиотеку для работы с 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. В следствии чего светодиод не работает! Почему так происходит? И когда закоментируешь прием данных из эфира, все начинает работать хорошо.
при чем здесь PCI? полно примеров проектов и библиотек с софтверным SPI - отлично работают.
дык я ж не спорю.. оно все отлично работает... ПООТДЕЛЬНОСТИ.. пока не начинаеш собирать все в кучу...
делайте скидку на то что все библиотеки в большинстве своем пишутся для конкретных проблем автора. и как только автор достиг какой то точки которая его удовлетворяет, он забросил все нафиг и его не чешет что у кого то в другой конфигурации оно не пашет :) издержки так сказать самоделкиных :)
но есть железный SPI и на практике очень тяжело его загрузить максимально допустимым количеством устройств... нафига еще софтерный?
у примеру ustas приводил конкретный пример когда потребовалась софтверная реализация SPI для работы с NRF24 http://habrahabr.ru/post/171613/
судя по тексту, софтерный SPI потребовался потому что сначало было куплена железка а потом только прочитана спецификация :)
я выше примерно про то и писал, что все эти эмуляторы изобретаются для частных случаев.. когда хочется вот уже прям щас и сил нет подождать и сделать как положено...
Здравствуйте! Приобрёл обсуждаемые модули, завёл их с библиотекой RF24 - всё нравится. Дальнобойность превзошла самые смелые ожидания. Вопрос такой: полагаю, указанная библиотека позволяет получить данные о модуле. При запуске примера некая информация даже выводится. Там есть вызов:
// Dump the configuration of the rf unit for debugging//
radio.printDetails();
Делаю так же в своей программе - ничего не вижу в мониторе порта. В чём магия?
Здравствуйте! Приобрёл обсуждаемые модули, завёл их с библиотекой RF24 - всё нравится. Дальнобойность превзошла самые смелые ожидания. Вопрос такой: полагаю, указанная библиотека позволяет получить данные о модуле. При запуске примера некая информация даже выводится. Там есть вызов:
// Dump the configuration of the rf unit for debugging//
radio.printDetails();
Делаю так же в своей программе - ничего не вижу в мониторе порта. В чём магия?
Подскажите пожалуйта как отправлять состояние кнопок на другую ардуину. К примеру включить светодиод, через сериал монитор все работает, а вот через кнопку никак не могу сделать.
В библиотеке RF24Network в примере helloworld для чего используется header и как им правильно пользоваться. Я так понял это заголовок чего-то отсылается, но чего? Данного устройства?
В библиотеке RF24Network в примере helloworld для чего используется header и как им правильно пользоваться. Я так понял это заголовок чего-то отсылается, но чего? Данного устройства?
читайте код и все увидите, header это адрес кому вы отсылаете.
Кроме того что входы толерантны к 5 вольтам, так rf24l01 спокойно у меня работала от 5 вольт, ну ни как не умерла после этого ) и это не только у меня в инете полно инфы что от 5 вольт работает нормально... но лучше не рисковать и садить на 3.3
Кроме того что входы толерантны к 5 вольтам, так rf24l01 спокойно у меня работала от 5 вольт, ну ни как не умерла после этого ) и это не только у меня в инете полно инфы что от 5 вольт работает нормально... но лучше не рисковать и садить на 3.3
насколько я помню в другой теме, вы так и не смогли ничего никуда отправить.. так что эт под большим вопросом как оно у вас от 5 вольт работает!
как бы есть спецификация чипа и там написано что 3.6 вольта максимально.. и на платке не наблюдается никаких стабилизаторов напряжения... а по поводу в инете пишут.. так на заборах тоже много что пишут...
Помогите разобраться в чем косяк. Подрубаю 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()
Krowten, сравните полный вывод двух ваших изделий с прошитым примером из библиотеки RF24, кажется, ping pair называется. Лучше тексты сюда вставьте. Какие конкретно модули? Мне кажется, что маленькие зелёные с антенной чуть похожей на ? - лучшие (получил год назад). Был ещё большой с усилителем (PA SMA LNA), прожил пару месяцев.
Не понял о чем речь ) Сильно не пинайте я как бы начинающий ардуиновец, на выходных пришел комплект из китая, поигравшись плотно с разнообразными цифро/аналоговыми датчиками, сервами и пр. перешел к этим модулям.
Модули у меня вот эти, есть еще с усилителем и антеной один, но его еще даже не пробовал. Взял стандартный пример из библиотеки RF24, соответвенно одному подрубил 7 пин на землю вывод на скриншотах:
Спасибо всем за помощь, модули заработали, dmw тебе отдельная благодарность - выручил. Подпаял 2 электролита на 22мкФ к питалову макетки на выходы согласно схеме, платка на тех же LM1117-3.3 и практически соответсвует схеме ниже,
родные smd не стал выпаивать. Запитал от нее оба модуля - все примеры работают. Причем без конденсаторов не работает, с конденсаторами но от usb тож не работает, короче траблы с питанием, хотя мультиметр показывает практически одинаковое напряжение.
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();
}
}
/* код №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
на 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
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/0jIS1tfw6tbb7https://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/0jIS1tfw6tbb7https://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();
}
}
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/0jIS1tfw6tbb7https://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.
}
Arduino NRF24L01+ Servo radio potentiometer Переменный резистор wireless Control
Пользователь Andre Trex оставил комментарий 1 час назад
Дмитрий большое спасибо за видео , Я смотрю ваши уроки по ардуине с большим интересом. Вы не могли бы еще выложить урок ( управление сервой через nRF24L01, переменным резистором ( потенциометр-ардуина-платка nRF24L01------радиоэфиор------платка nRF24L01-ардуина-серва.)
Буду очень благодарен ! :)
------------------------------------------
скетч sketch: №1 и №2 Arduino NRF24L01+ Servo radio potentiometer Переменный резистор wireless Control
(потенциометр) Поворотом движка изменяет сопротивление от нуля до номинального сопротивления
--------------------------------
/* код №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]);
}
}
}
*/
Засрал весь ютуб своими уроками - теперь всюда прокрался.
Угу. И, блин, ведь будет известным. Учится по нему будут. Хотя, похоже ему бы не мешало самому чуть-чуть про циклы и функции почитать.
Вроде и полезное дело делает, но... ведь это же уроки "типичного индусского кода". Который новичок может только скопипастать. Шаг вправо/шаг в лево - "ой, не работает, сделайте мне что-нибудь с этой портянкой".
какой то молчаливый сумашедший.. а можно удалить нафиг его посты.. а то чет мотать километры не смешно даже... колесо на мышке раскалилось... да и тема у нас тут вроде была про RF24 модуль и библиотеки к нему а не какие то сраные километры непонятного кода..
Факт в том что работает. Может в библиотеке как-то програмно заменяется... И если не переназначать, то как можно реализовать правильно?
факт в том что SPI нельзя никуда переназначить...
вы видимо не читали внимательно что у вас вообще за дисплей....
Подскажите где скачать библиотеку nRF24L01. Раз тут рекомендуют rf24 и nRF24L01.
Проблемма решилась путем изменения пинов miso и mosi у LCD на любые другие, в моем случае на 43, 44. И все заработало))
Факт в том что работает. Может в библиотеке как-то програмно заменяется... И если не переназначать, то как можно реализовать правильно?
На что вам было написано:
И как результат ничего не работает.
SPI: 50 (MISO), 51 (MOSI), 52 (SCK), 53 (SS).
И кстати, а где мануал?
Если не ясно - то расшифровываю - выводы RS и Е дисплея подключены к тем же выводам что и MISO, MOSI, которые уже заняты SPI для работы с nRF24L01. По этой причине и не работает.
я так понял что дисплей тоже на SPI
какая у вас клева SPI раз и на другие пины переназначил... вот бы мне где такую найти...
Не правильно поняли, это обычный дисплей с 4-битной шиной и может работать на любых выводах.
С Уны
На Мегу
Передается температура.На Меги решил сделать так что бы по нажатию кнопки, загарался светодиод. Вот сам код
На Меги работает отлично, но когда его добавляешь в код для приема тепмературы, то работать перестает. Я долго выяснял в чем проблемма и выяснилось, что в переменую flag которая изначально равна нулю, через пару секунд записываются левые значения, хотя кнопку не нажимал. Для эксперемента добавил две переменные, a=1 и b=0. И начинаю их выводить в монитор... Переменная а не изменяется, а вот переменная b начинает изменяться сама собой.
Переменная flag то же изменяется т.к. изначально она равна 0. В следствии чего светодиод не работает! Почему так происходит? И когда закоментируешь прием данных из эфира, все начинает работать хорошо.
факт в том что SPI нельзя никуда переназначить...
вы видимо не читали внимательно что у вас вообще за дисплей....
не забывайте про софтверный SPI - его назначить можно на любые выводы
факт в том что SPI нельзя никуда переназначить...
вы видимо не читали внимательно что у вас вообще за дисплей....
не забывайте про софтверный SPI - его назначить можно на любые выводы
канечно помню... просто это на мой взгляд костыль... оно конечно при определеном упорстве можно даже PCI эмулировать на ардуине... только смысл в чем?
канечно помню... просто это на мой взгляд костыль... оно конечно при определеном упорстве можно даже PCI эмулировать на ардуине... только смысл в чем?
при чем здесь PCI? полно примеров проектов и библиотек с софтверным SPI - отлично работают.
при чем здесь PCI? полно примеров проектов и библиотек с софтверным SPI - отлично работают.
дык я ж не спорю.. оно все отлично работает... ПООТДЕЛЬНОСТИ.. пока не начинаеш собирать все в кучу...
делайте скидку на то что все библиотеки в большинстве своем пишутся для конкретных проблем автора. и как только автор достиг какой то точки которая его удовлетворяет, он забросил все нафиг и его не чешет что у кого то в другой конфигурации оно не пашет :) издержки так сказать самоделкиных :)
но есть железный SPI и на практике очень тяжело его загрузить максимально допустимым количеством устройств... нафига еще софтерный?
у примеру ustas приводил конкретный пример когда потребовалась софтверная реализация SPI для работы с NRF24 http://habrahabr.ru/post/171613/
да мало ли какие будут на то причины. вы вправе никогда не использовать софтверный SPI, но других не стоит путать, пусть сами решают
у примеру ustas приводил конкретный пример когда потребовалась софтверная реализация SPI для работы с NRF24 http://habrahabr.ru/post/171613/
судя по тексту, софтерный SPI потребовался потому что сначало было куплена железка а потом только прочитана спецификация :)
я выше примерно про то и писал, что все эти эмуляторы изобретаются для частных случаев.. когда хочется вот уже прям щас и сил нет подождать и сделать как положено...
Здравствуйте! Приобрёл обсуждаемые модули, завёл их с библиотекой RF24 - всё нравится. Дальнобойность превзошла самые смелые ожидания. Вопрос такой: полагаю, указанная библиотека позволяет получить данные о модуле. При запуске примера некая информация даже выводится. Там есть вызов:
Делаю так же в своей программе - ничего не вижу в мониторе порта. В чём магия?
Прошу помощи. Туплю
залил из https://github.com/maniacbug/RF24Network
беру пример sensornet.pde
далее при старте вызывается конфигуратор нода:
https://github.com/maniacbug/RF24Network/blob/master/examples/sensornet/...
нажимаю "R" далее просит адрес, не договняю в каком формате ему его скормить.. чувствую себя идиотом.
мне нужен рутовый нод и пару сенсоров.
подскажите че я делаю не так?
Сенкс
Здравствуйте! Приобрёл обсуждаемые модули, завёл их с библиотекой RF24 - всё нравится. Дальнобойность превзошла самые смелые ожидания. Вопрос такой: полагаю, указанная библиотека позволяет получить данные о модуле. При запуске примера некая информация даже выводится. Там есть вызов:
Делаю так же в своей программе - ничего не вижу в мониторе порта. В чём магия?
нужно не забыть это
и это
неужели никто не запускал этот пример) ?
011 и прочее не хочет жрать..
отбой. таки разобрался!
а кто нибуть уже пробовал реализовать как в http://habrahabr.ru/post/171613/?
а то в этой теме только смотрю или мирф или rf24 но совсем базовый, как то не вырисовывается общая картина с темы из хабра.
Подскажите пожалуйта как отправлять состояние кнопок на другую ардуину. К примеру включить светодиод, через сериал монитор все работает, а вот через кнопку никак не могу сделать.
Так же как и через сериал монитор.
Не получается. У кого есть опыт объединения в одной меге работу с nrf21 и ENC28J60 на базе
RF24Network и
EtherCard.h
http://arduino.ru/forum/obshchii/podklyuchenie-neskolkikh-ustroistv-po-spi
Конфликтует переопределнный PROGMEM.
Очень прошу помощи. Спасибо
В библиотеке RF24Network в примере helloworld для чего используется header и как им правильно пользоваться. Я так понял это заголовок чего-то отсылается, но чего? Данного устройства?
В библиотеке RF24Network в примере helloworld для чего используется header и как им правильно пользоваться. Я так понял это заголовок чего-то отсылается, но чего? Данного устройства?
читайте код и все увидите, header это адрес кому вы отсылаете.
Все равно не могу понять...
Есть 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 - запутался больше чем что-то понял.
ну и соответственно, VCC и GND - VCC (+5) и GND ардуин.
Плохо читали, померла скорее всего ваша НРФка.
Кроме того что входы толерантны к 5 вольтам, так rf24l01 спокойно у меня работала от 5 вольт, ну ни как не умерла после этого ) и это не только у меня в инете полно инфы что от 5 вольт работает нормально... но лучше не рисковать и садить на 3.3
Кроме того что входы толерантны к 5 вольтам, так rf24l01 спокойно у меня работала от 5 вольт, ну ни как не умерла после этого ) и это не только у меня в инете полно инфы что от 5 вольт работает нормально... но лучше не рисковать и садить на 3.3
насколько я помню в другой теме, вы так и не смогли ничего никуда отправить.. так что эт под большим вопросом как оно у вас от 5 вольт работает!
как бы есть спецификация чипа и там написано что 3.6 вольта максимально.. и на платке не наблюдается никаких стабилизаторов напряжения... а по поводу в инете пишут.. так на заборах тоже много что пишут...
Все прекрасно отправляется и принимается. Только не по феншую не пакетами, а просто функциями.
Спасибо за подсказку. Как-то совсем подзабыл (и видел же, но совсем вылетело из головы) про 3.3 вольта :(
Да, как только поставил нужное питание вышеуказанные примеры заработали.
Помогите разобраться в чем косяк. Подрубаю 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 выдает
Модули вроде определяются корректно, вывод функции printDetails()
2 бессонные ночи, тонна выпитого кофе - я х.з. в какую сторону копать )
а в сериал мониторе назначили роли модулям?
а в сериал мониторе назначили роли модулям?
странные вы вопросы задаете, так вы еще спросите читал ли он мануал к библиотекам и коменты в примерах...
Krowten, сравните полный вывод двух ваших изделий с прошитым примером из библиотеки RF24, кажется, ping pair называется. Лучше тексты сюда вставьте. Какие конкретно модули? Мне кажется, что маленькие зелёные с антенной чуть похожей на ? - лучшие (получил год назад). Был ещё большой с усилителем (PA SMA LNA), прожил пару месяцев.
а в сериал мониторе назначили роли модулям?
Не понял о чем речь ) Сильно не пинайте я как бы начинающий ардуиновец, на выходных пришел комплект из китая, поигравшись плотно с разнообразными цифро/аналоговыми датчиками, сервами и пр. перешел к этим модулям.
Модули у меня вот эти, есть еще с усилителем и антеной один, но его еще даже не пробовал. Взял стандартный пример из библиотеки RF24, соответвенно одному подрубил 7 пин на землю вывод на скриншотах:
вывод на скриншотах
две одинаковые картинки
В соседней ветке описал решение аналогичной проблемы у себя, может и Вам поможет: http://arduino.ru/forum/apparatnye-voprosy/nrf24l01meganano#comment-37483
для тех кто забыл рацию на танке
Есть вариант когда через сериал указываеш что ей делать...
читайте что вам там пишут... у меня уже заварка кончилась что бы гадать что и куда вы там применяете и подключаете...
По запарке скриншот 1 и тот же залил но сразу же подправил пост, один модуль передатчиком сделал как положено - написал жеж про 7 пин.
Вечером попробую стабилизатор подпаять из примера в соседней ветке, как раз сотня LM1117-3.3 валяется )
Krowten, попробуйте ещё пример scanner из библиотеки RF24.
Спасибо всем за помощь, модули заработали, dmw тебе отдельная благодарность - выручил. Подпаял 2 электролита на 22мкФ к питалову макетки на выходы согласно схеме, платка на тех же LM1117-3.3 и практически соответсвует схеме ниже,
родные smd не стал выпаивать. Запитал от нее оба модуля - все примеры работают. Причем без конденсаторов не работает, с конденсаторами но от usb тож не работает, короче траблы с питанием, хотя мультиметр показывает практически одинаковое напряжение.
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
Arduino №1 получив данные из сериал, отправляет в радиоэфир пакет,
Arduino №2 принимает пакет, и отправляет обратно в Arduino №1.
Arduino №1 принимает пакет и передает обратно в сериал.
то есть что написали в сериал, то и должно вернуться обратно.
Если послать в сериал с Arduino №1 команды (1,2,3,4,5) то на Arduino №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. Светодиоды нужны только для визуального контроля за процессом. программное:
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. Любой ИК инфракрасный пульт.
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 штука.
(потенциометр) Поворотом движка изменяет сопротивление от нуля до номинального сопротивления
--------------------------------
Вставка программного кода в тему/комментарий
Вставка программного кода в тему/комментарий
Сейчас он ломанётся свои 300 постов редактировать - чел просто сошёл с ума и решил запостить все свои исходники.
Засрал весь ютуб своими уроками - теперь всюда прокрался.
Человек старается между прочим!
"пустой инфракрасный сигнал", "читаем состояние ноги", int radiocode[1], 40 однострочный if-ов
Больше товаров хороших и нужных!
Засрал весь ютуб своими уроками - теперь всюда прокрался.
Угу. И, блин, ведь будет известным. Учится по нему будут. Хотя, похоже ему бы не мешало самому чуть-чуть про циклы и функции почитать.
Вроде и полезное дело делает, но... ведь это же уроки "типичного индусского кода". Который новичок может только скопипастать. Шаг вправо/шаг в лево - "ой, не работает, сделайте мне что-нибудь с этой портянкой".
Известность городского сумасшедшего у него уже есть.
Никакой полезности в его деятельности нет - в инете и так полно странного самопиара.
какой то молчаливый сумашедший.. а можно удалить нафиг его посты.. а то чет мотать километры не смешно даже... колесо на мышке раскалилось... да и тема у нас тут вроде была про RF24 модуль и библиотеки к нему а не какие то сраные километры непонятного кода..
Помогите скрестить на одной arduino uno два spi устройства: ethernet шилд w5100 + nrf24l01
Ктото смог реализовать? Ато теории много, а реального скетча так не смог найти.