управление реле с 433мгц + 2 хлопка возможно ли это?
- Войдите на сайт для отправки комментариев
Пнд, 14/03/2016 - 11:06
Доброго всем времени суток как говорится всё тяжелое кажетси лёгким так и я думал но всегда есть НО. И так вопрос есть скетч для управления реле по 433мгц
#include <RCSwitch.h>
RCSwitch mySwitch = RCSwitch();
int relay7 = 7; //Реле будет тут
int analogData=0; //тут будут храниться данные с АЦП пин 0
int ledstate=0; //переменная состояния вкл-выкл
void setup() {
Serial.begin(9600);
mySwitch.enableReceive(0); // приемник на pin 2 (DATA)
pinMode(relay7, OUTPUT);
digitalWrite(relay7, LOW);
}
void loop() {
if (mySwitch.available()) {
int value = mySwitch.getReceivedValue();
if (value == 0) {
Serial.print("error code"); // Ошибка приемка кода
} else {
Serial.print("code good"); // Принял код
Serial.print( mySwitch.getReceivedValue() );
}
if (mySwitch.getReceivedValue() == 7688384) { // 6133332 - код Включения1
digitalWrite(relay7, HIGH);
}
if (mySwitch.getReceivedValue() == 7688204) { // 6133392 - код выключения1
digitalWrite(relay7, LOW);
}
}
}
И есть скетч для управления реле двумя хлопками
int analogData=0; //тут будут храниться данные с АЦП пин 0
int ledstate=0; //переменная состояния вкл-выкл
void setup() {
pinMode(7,OUTPUT);
}
void loop() {
analogData=analogRead(0); //читаем значение
if(analogData>120){ //в моём случае аудио сенсор имеет жутко малую чувствительность и выдаёт значение до 130 из 1024 возможных
delay(200); //ожидаем 200милисекунд для повторного хлопка - можно не делать но в моём случае это добавило удобства
for(int t=0;t<=500;t++) //цикл на проверку второго хлопка по идее на пол секунды но ардуино делает его дольше
{
delay(1); //для цикла
analogData=analogRead(0);//считываем данные
if(analogData>120){ //сверяем данные для второго хлопка, если он был то меняем состояние лампы с вкл на выкл и наоборот
ledstate=!ledstate; //меняем состояние
analogData=0;//обнуляем данные
break;//выходим из цикла после второго хлопка
delay(200);//для удобства
}
}
analogData=0;
}
digitalWrite(7,ledstate); //включаем выключаем светодиод на 13м пине
}
по отдельности они работают замечательно я подумал что их можно соединить и получился вот такой скетч
include <RCSwitch.h>
RCSwitch mySwitch = RCSwitch();
int relay7 = 7; //Реле будет тут
int analogData=0; //тут будут храниться данные с АЦП пин 0
int ledstate=0; //переменная состояния вкл-выкл
void setup() {
Serial.begin(9600);
mySwitch.enableReceive(0); // приемник на pin 2 (DATA)
pinMode(relay7, OUTPUT);
digitalWrite(relay7, LOW);
}
void loop() {
analogData=analogRead(0); //читаем значение
if(analogData>120){
delay(200);
for(int t=0;t<=500;t++)
{
delay(1); //для цикла
analogData=analogRead(0);//считываем данные
if(analogData>120){ //сверяем данные для второго хлопка, если он был то меняем состояние лампы с вкл на выкл и наоборот
ledstate=!ledstate; //меняем состояние
analogData=0;//обнуляем данные
break;//выходим из цикла после второго хлопка
delay(200);
}
}
analogData=0;
}
digitalWrite(relay7,ledstate); //включаем выключаем светодиод на 7м пине
if (mySwitch.available()) {
int value = mySwitch.getReceivedValue();
if (value == 0) {
Serial.print("error code"); // Ошибка приемка кода
} else {
Serial.print("code good"); // Принял код
Serial.print( mySwitch.getReceivedValue() );
}
if (mySwitch.getReceivedValue() == 7688384) { // - код Включения1
digitalWrite(relay7, HIGH);
}
if (mySwitch.getReceivedValue() == 7688204) { // - код выключения1
digitalWrite(relay7, LOW);
}
}
}
и этот скетч работает только на хлопки а вот на радиосигнал реагирует на любую кнопку и заклинивается в том состоянии на котором остаётся и после этого реагирует на хлопки не так как надо тоесть при хлопках реле включается и через секунду выключается отсюда вопрос что надо дописать чтоб реле нормально работало при обоих задумках например захотел влючил с пульта а выключил хлопками или наоборот включил хлопками а выключил с пульта.
Жду ваших предложений и заранее всем спасибо за внимание и за ответы
Попробуйте заменить это
на это
И обязательно прочтите это
Попробуйте заменить это
на это
И обязательно прочтите это
Спасибо за наставления я поменял то что вы подсказали получился вот такой скетч
но проблема осталась как только залился скетч если пользоваться хлопками то всё работет но как только разок нажать пульт включается реле и на UNO загорается RX и после этого с пульта выключить можно и с пульта затем можно включать повторно а вот хлопками уже не работает пока не зальёшь скетч заново
По быстрому не проскочили , ладно. :) Должно работать. Хотя работать должно кривова-то, из-за несогласованности частей - каждая часть не взаимодействует с другой. Вот попробуйте выключит пультом, а потом хлопайте пока не включится (два раза по два раза) :))))))))))))))))))).
Правим алгоритм:
1. После регистрации второго хлопка изменяем состояние светодиода: ledstate=!ledstate.
2. После регистрации кода включения устанавливаем состояние светодиода: ledstate=High.
3. После регистрации кода выключения устанавливаем состояние светодиода: ledstate=Low.
4. В самом конце устанавливаем физическое значение выходного пина.
Справитесь?
Кстати, что значит ledstate=!ledstate для переменной типа int?
По быстрому не проскочили , ладно. :) Должно работать. Хотя работать должно кривова-то, из-за несогласованности частей - каждая часть не взаимодействует с другой. Вот попробуйте выключит пультом, а потом хлопайте пока не включится (два раза по два раза) :))))))))))))))))))).
Правим алгоритм:
1. После регистрации второго хлопка изменяем состояние светодиода: ledstate=!ledstate.
2. После регистрации кода включения устанавливаем состояние светодиода: ledstate=High.
3. После регистрации кода выключения устанавливаем состояние светодиода: ledstate=Low.
4. В самом конце устанавливаем физическое значение выходного пина.
Справитесь?
Кстати, что значит ledstate=!ledstate для переменной типа int?
пультом выключаю и затем если очень много хлопать то диод моргает на доли секунды как будто включается и в этот момент RX на UNO тухнет а затем опять 25. По поводу ledstate!=ledstate вообще хлопками не работет а по остальным 2,3,4 я честно говоря и не понял куда что вписать если можно поподробнее если просто вместо ledstate=!ledstate вписать ledstate=High или ledstate=Low то выходит ошибка и скетч не компилируется
Эх...
А пульт у Вас все перебивает, потому что Вы mySwitch.resetAvailable() забыли... наверное.
[quote=T.Rook]
Эх...
А пульт у Вас все перебивает, потому что Вы mySwitch.resetAvailable() забыли... наверное.
[/quote
К сожалению пришлось уехать и не могу проверить что у меня там написано и ваш скетч как приеду отпишусь. Спасибо ]
наконец то скетч заработал как надо получается я забыл в конце дописать mySwitch.resetAvailable() и получается что вместо digitalWrite(relay7, HIGH); надо было вписывать ledstate = 1; а вместо digitalWrite(relay7, LOW); ledstate = 0; вроде всё легко и просто но не для всех. скажите в строке
30 -
delay(200);
//ЗАЧЕМ??????
что значит зачем?????
что значит зачем?????
Это вопрос - зачем там delay? При каких условиях он выполняется?
digitalWrite(relay7, HIGH)
так же как и LOW вполне работоспособная и верная команда. Главная ошибка была в отсутствии mySwitch.resetAvailable() - без него всегда срабатывала соответствующая ветка пульта. Ну а просто объединение скетчев дало разрыв логики алгоритма, я просто начерно причесал.
что значит зачем?????
Это вопрос - зачем там delay? При каких условиях он выполняется?
digitalWrite(relay7, HIGH)
так же как и LOW вполне работоспособная и верная команда. Главная ошибка была в отсутствии mySwitch.resetAvailable() - без него всегда срабатывала соответствующая ветка пульта. Ну а просто объединение скетчев дало разрыв логики алгоритма, я просто начерно причесал.
как бы то ни было спасибо за помощь за разъяснения в моей проблеме а вообще в будущем при возникновении каких то проблем по ардуино можно к вам обращаться?
как бы то ни было спасибо за помощь
Да не за что. За тем форум и существует!
как бы то ни было спасибо за помощь
Да не за что. За тем форум и существует!
Подскажите а насколько сложно теперь к этому скетчи который у вас получился дописать чтобы шла отправка на email отчёта о проделанной операции если я имею шилд w5100 получается надо добавить библиотеку и вписывать данные о отправки на сервер нужной информации?
Извините, тут я уже на мели, потому как не то что w5100 нет, а и ардуинка ещё не приехала ко мне(жду со дня на день). Так что копайте и читайте, благо на w5100 наделано куча всего и доков с примерами куча!
Извините, тут я уже на мели, потому как не то что w5100 нет, а и ардуинка ещё не приехала ко мне(жду со дня на день). Так что копайте и читайте, благо на w5100 наделано куча всего и доков с примерами куча!
Может есть куда ткнуть а то я уже много чего пересмотрел не знаю что надо вебсервер или что то другое
Можно начать с главного источника
добрый вечер T.Rook] когдато вы мне помогли с редактированием скетча 433мгц + хлопки но со временем приходят новые мысли и вот теперь хотелось бы чтобы при хлопках отправлялся радиосигнал через радиопередатчик на другую ардуино . есть скетч который отпрасляет мои данные на другую ардуино
но вот как его приписать в тот скетч который вы мне набросали . я так думаю что при хлопках так как их два и при включение и при выключение то и код включения будет посылаться постоянно один и тот же или можно как нибудь сделать чтобы при первых двух хлопках отправился код включения а при вторых двух хлопках отправился код выключения.
Заранее спасибо за ответ
Парни выручайте...
Нужен скетч,самый похожий этот. В общем тема такая. Будет стоять микрофон китайский 4-х ногий с выходами: аналог, цифра и +/-. По ТЗ надо прослушивать аппаратуру. Как только звинит сигнализация микрофон ловит сигнал и по радио кидает на дуина а та в свое время включает реле. Как только звук пропадает реле тут же гаснет. Возможно скетч выше так переделать? Я дуб дубом в написании... Помогите пожалуйста.
По поводу микрофона:там стоит подстроичный резистор, я думаю ним громкость необходимую отрегулировать (пределы срабатывания).
Передатчик: берет сигнал с микрофона как тот услышит звук и передатчик отправляет сигнал на дуину с приемником.
Приемник: Получив сигнал от микрофона включает реле (до тех пор пока звук не пропадет на микрофоне передатчика)
Парни выручайте...
Нужен скетч,самый похожий этот. В общем тема такая. Будет стоять микрофон китайский 4-х ногий с выходами: аналог, цифра и +/-. По ТЗ надо прослушивать аппаратуру. Как только звинит сигнализация микрофон ловит сигнал и по радио кидает на дуина а та в свое время включает реле. Как только звук пропадает реле тут же гаснет. Возможно скетч выше так переделать? Я дуб дубом в написании... Помогите пожалуйста.
По поводу микрофона:там стоит подстроичный резистор, я думаю ним громкость необходимую отрегулировать (пределы срабатывания).
Передатчик: берет сигнал с микрофона как тот услышит звук и передатчик отправляет сигнал на дуину с приемником.
Приемник: Получив сигнал от микрофона включает реле (до тех пор пока звук не пропадет на микрофоне передатчика)
в разделе "Ищу исполнителя" есть шанс что кто нибудь выручит.
здесь только если свой код покажешь.
Как только звинит сигнализация микрофон ловит сигнал и по радио кидает на дуина а та в свое время включает реле. Как только звук пропадает реле тут же гаснет.
Подключить обмотку реле напрямую к контактам звонка и исключить из схемы микрофон, сигнал, Ардуину и радио.