433мгц + 2хлопка + отправка радиосигнал на другую ардуино

artemon25
Offline
Зарегистрирован: 25.12.2015

имеется скетч 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() {
  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; //меняем состояние
        Serial.print("второй хлопок");
        analogData = 0; //обнуляем данные

        break;//выходим из цикла после второго хлопка
        delay(200);  //ЗАЧЕМ??????
      }
    }
    analogData = 0;

  }



  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
      Serial.print("пульт включение");
      ledstate = 1;
    }
    if (mySwitch.getReceivedValue() ==  7688204) {   // 6133392 - код выключения1
      Serial.print("пульт выключение");
      ledstate = 0;
    }
 mySwitch.resetAvailable();
  }
  digitalWrite(relay7, ledstate); //включаем выключаем светодиод на 7м пине

}

 

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

/*
Пример передачи принятой посылки на выключение и включение люстры.
*/

#include <RCSwitch.h>

RCSwitch mySwitch = RCSwitch();

void setup() {
Serial.begin(9600);
// Transmitter is connected to Arduino Pin #10
mySwitch.enableTransmit(10);
// Optional set pulse length.
// mySwitch.setPulseLength(320);
// Optional set protocol (default is 1, will work for most outlets)
// mySwitch.setProtocol(2);
// Optional set number of transmission repetitions.
// mySwitch.setRepeatTransmit(15);
}

void loop() {
/* Same switch as above, but using decimal code */
mySwitch.send(5312960, 24);//код включения лампы
delay(5000);
mySwitch.send( 5312780, 24);//код выключения лампы
delay(5000);
}

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

Заранее  всем спасибо за ответ

 

T.Rook
Offline
Зарегистрирован: 05.03.2016

Создаем "событие [второй хлопок]" после 25строки:

if (ledstate==1){//событие включения от второго хлопка}

else {//событие выключения отвторого хлопка}

в этих точках можем отправлять коды вкл/выкл. Где передавать при "событиях" получения кодов с пульта разберетесь?

эх... а в 30 строке delay так и остался висеть. А зачем?

 

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

ТС, неужели эта ересь с хлопками ещё где-то актуальна?

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

https://youtu.be/VkoOgLcyaYU

artemon25
Offline
Зарегистрирован: 25.12.2015

[quote=T.Rook]

Создаем "событие [второй хлопок]" после 25строки:

if (ledstate==1){//событие включения от второго хлопка}

else {//событие выключения отвторого хлопка}

в этих точках можем отправлять коды вкл/выкл. Где передавать при "событиях" получения кодов с пульта разберетесь?

эх... а в 30 строке delay так и остался висеть. А зачем?

 

[/quote

Наверное разберусь вечером буду пробовать ну если что спрошу если вы не против

artemon25
Offline
Зарегистрирован: 25.12.2015

T.Rook пишет:

Создаем "событие [второй хлопок]" после 25строки:

if (ledstate==1){//событие включения от второго хлопка}

else {//событие выключения отвторого хлопка}

в этих точках можем отправлять коды вкл/выкл. Где передавать при "событиях" получения кодов с пульта разберетесь?

эх... а в 30 строке delay так и остался висеть. А зачем?

 

добрый вечер пробовал по вашим советам собрать скетч и получился вот так

#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)
  // Transmitter is connected to Arduino Pin #10
mySwitch.enableTransmit(10);
// Optional set pulse length.
// mySwitch.setPulseLength(320);
// Optional set protocol (default is 1, will work for most outlets)
// mySwitch.setProtocol(2);
// Optional set number of transmission repetitions.
// mySwitch.setRepeatTransmit(15);
  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; //меняем состояние
        if (ledstate==1){//событие включения от второго хлопка}
        mySwitch.send(5312960, 24);//код включения лампы

      }
       else {//событие выключения отвторого хлопка}
       mySwitch.send( 5312780, 24);//код выключения лампы


        Serial.print("второй хлопок");
        analogData = 0; //обнуляем данные

        break;//выходим из цикла после второго хлопка
      }
    }
    analogData = 0;

  }



  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
      Serial.print("пульт включение");
      ledstate = 1;
    }
    if (mySwitch.getReceivedValue() ==  7688204) {   // 6133392 - код выключения1
      Serial.print("пульт выключение");
      ledstate = 0;
    }
 mySwitch.resetAvailable();
  }
  digitalWrite(relay7, ledstate); //включаем выключаем светодиод на 7м пине
}
}

скетч заливается но работает ещё хуже тоесть работает только хлопки а с пульта не работает и соответсвенно не передаёт сигнал на другую ардуино. Может я чтото не так прописал нужен совет.

T.Rook
Offline
Зарегистрирован: 05.03.2016

Вы в 36 и 40 строке не закрыли скобку }.

А потом прибавили зачем- то в конец.

UPD: Это у меня в примере "события" закрывающие "}" оказались в комментариях. Конечно должно быть так:

if (ledstate==1){//событие включения от второго хлопка
     }
  else {//событие выключения отвторого хлопка
     }

Так что еще раз аккуратненько добавьте в свой исходный код.

 

artemon25
Offline
Зарегистрирован: 25.12.2015

T.Rook пишет:

Вы в 40 строке не закрыли скобку }.

А потом прибавили её зачем- то в конец.

UPD: Это у меня в примере "события" закрывающие "}" оказались в комментариях. Конечно должно быть так:

if (ledstate==1){//событие включения от второго хлопка
     }
  else {//событие выключения отвторого хлопка
     }

 

скобку я перенёс еще чтото надо исправить если не сложно исправьте сами и объясните что именно исправили

artemon25
Offline
Зарегистрирован: 25.12.2015

artemon25 пишет:

T.Rook пишет:

Вы в 40 строке не закрыли скобку }.

А потом прибавили её зачем- то в конец.

UPD: Это у меня в примере "события" закрывающие "}" оказались в комментариях. Конечно должно быть так:

if (ledstate==1){//событие включения от второго хлопка
     }
  else {//событие выключения отвторого хлопка
     }

 

скобку я перенёс еще чтото надо исправить если не сложно исправьте сами и объясните что именно исправили

 

artemon25
Offline
Зарегистрирован: 25.12.2015

artemon25 пишет:

artemon25 пишет:

T.Rook пишет:

Вы в 40 строке не закрыли скобку }.

А потом прибавили её зачем- то в конец.

UPD: Это у меня в примере "события" закрывающие "}" оказались в комментариях. Конечно должно быть так:

if (ledstate==1){//событие включения от второго хлопка
     }
  else {//событие выключения отвторого хлопка
     }

 

скобку я перенёс еще чтото надо исправить если не сложно исправьте сами и объясните что именно исправили

 

после переноса скобки работают хлопки и работает пульт но сигнал на другую ардуино не передается

T.Rook
Offline
Зарегистрирован: 05.03.2016

Ваш исходный код + событие второго хлопка:


#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); //читаем значение
<strong></strong>
  if (analogData > 120) {

    delay(200);
    for (int t = 0; t <= 500; t++)
    {
      delay(1); //для цикла
      analogData = analogRead(0); //считываем данные
      if (analogData > 120) { //сверяем данные для второго хлопка, если он был то меняем состояние лампы с вкл на выкл и наоборот
        ledstate = !ledstate; //меняем состояние

        if (ledstate==1){//событие включения от второго хлопка
              
             }
          else {//событие выключения от второго хлопка

             }         

        Serial.print("второй хлопок");
        analogData = 0; //обнуляем данные

        break;//выходим из цикла после второго хлопка
        delay(200);  //ЗАЧЕМ??????
      }
    }
    analogData = 0;

  }



  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
      Serial.print("пульт включение");
      ledstate = 1;
    }
    if (mySwitch.getReceivedValue() ==  7688204) {   // 6133392 - код выключения1
      Serial.print("пульт выключение");
      ledstate = 0;
    }
 mySwitch.resetAvailable();
  }
  digitalWrite(relay7, ledstate); //включаем выключаем светодиод на 7м пине

}

вставлены строки 27-32

T.Rook
Offline
Зарегистрирован: 05.03.2016

artemon25 пишет:

после переноса скобки работают хлопки и работает пульт но сигнал на другую ардуино не передается

давайте посмотрим на код.

Вместе с передачей кодов, поставьте вывод в Serial, что бы видеть правильность отработки.

artemon25
Offline
Зарегистрирован: 25.12.2015

T.Rook пишет:

Ваш исходный код + событие второго хлопка:


#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); //читаем значение
<strong></strong>
  if (analogData > 120) {

    delay(200);
    for (int t = 0; t <= 500; t++)
    {
      delay(1); //для цикла
      analogData = analogRead(0); //считываем данные
      if (analogData > 120) { //сверяем данные для второго хлопка, если он был то меняем состояние лампы с вкл на выкл и наоборот
        ledstate = !ledstate; //меняем состояние

        if (ledstate==1){//событие включения от второго хлопка
              
             }
          else {//событие выключения от второго хлопка

             }         

        Serial.print("второй хлопок");
        analogData = 0; //обнуляем данные

        break;//выходим из цикла после второго хлопка
        delay(200);  //ЗАЧЕМ??????
      }
    }
    analogData = 0;

  }



  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
      Serial.print("пульт включение");
      ledstate = 1;
    }
    if (mySwitch.getReceivedValue() ==  7688204) {   // 6133392 - код выключения1
      Serial.print("пульт выключение");
      ledstate = 0;
    }
 mySwitch.resetAvailable();
  }
  digitalWrite(relay7, ledstate); //включаем выключаем светодиод на 7м пине

}

вставлены строки 27-32

16 строка <strong></strong> даёт ошибку

T.Rook
Offline
Зарегистрирован: 05.03.2016

artemon25 пишет:

16 строка <strong></strong> даёт ошибку

убейте её :))

artemon25
Offline
Зарегистрирован: 25.12.2015

T.Rook пишет:

artemon25 пишет:

после переноса скобки работают хлопки и работает пульт но сигнал на другую ардуино не передается

давайте посмотрим на код.

Вместе с передачей кодов, поставьте вывод в Serial, что бы видеть правильность отработки.

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

#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)
  // Transmitter is connected to Arduino Pin #10
mySwitch.enableTransmit(10);
// Optional set pulse length.
// mySwitch.setPulseLength(320);
// Optional set protocol (default is 1, will work for most outlets)
// mySwitch.setProtocol(2);
// Optional set number of transmission repetitions.
// mySwitch.setRepeatTransmit(15);
  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; //меняем состояние
        if (ledstate==1){//событие включения от второго хлопка}
        mySwitch.send(5312960, 24);//код включения лампы

      }
       else {//событие выключения отвторого хлопка}
       mySwitch.send( 5312780, 24);//код выключения лампы
    }


        Serial.print("второй хлопок");
        analogData = 0; //обнуляем данные

        break;//выходим из цикла после второго хлопка
      }
    }
    analogData = 0;

  }



  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
      Serial.print("пульт включение");
      ledstate = 1;
    }
    if (mySwitch.getReceivedValue() ==  7688204) {   // 6133392 - код выключения1
      Serial.print("пульт выключение");
      ledstate = 0;
    }
 mySwitch.resetAvailable();
  }
  digitalWrite(relay7, ledstate); //включаем выключаем светодиод на 7м пине

}

а на второй ардуино стоит скетч который принимает сигнал с другого пульта и должен принимать сигнал с первой ардуино

#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() == 5312960) {   // 6133332 - код Включения1
      digitalWrite(relay7, HIGH);
    }
     if (mySwitch.getReceivedValue() ==  5312780) {   // 6133392 - код выключения1
      digitalWrite(relay7, LOW);
 }
}
 }

 

T.Rook
Offline
Зарегистрирован: 05.03.2016

удалено.

artemon25
Offline
Зарегистрирован: 25.12.2015

T.Rook пишет:

artemon25 пишет:

16 строка <strong></strong> даёт ошибку

убейте её :))

убрал эту строку и убрал delay после заливки скетча замигал диод на втором ардуино но на хлопки соотвественно не реагирует надо вписать данные для отправки кода

artemon25
Offline
Зарегистрирован: 25.12.2015

T.Rook пишет:

удалено.

что удалено?

T.Rook
Offline
Зарегистрирован: 05.03.2016

artemon25 пишет:

убрал эту строку и убрал delay после заливки скетча замигал диод на втором ардуино но на хлопки соотвественно не реагирует надо вписать данные для отправки кода

так замигал или не реагирует?. От чего замигал? Не понял.

А в 35 и 39 разве не передача вкл/выкл стоит???

Какие коды принимает вторая Ардуинка?

Вы опять забыли mySwitch.resetAvailable(); на принимающей стороне?

Ctrl+T - очень приятное сочетание в IDE, попробуйте :)

artemon25
Offline
Зарегистрирован: 25.12.2015

T.Rook пишет:

artemon25 пишет:

убрал эту строку и убрал delay после заливки скетча замигал диод на втором ардуино но на хлопки соотвественно не реагирует надо вписать данные для отправки кода

так замигал или не реагирует?. От чего замигал? Не понял.

А в 35 и 39 разве не передача вкл/выкл стоит???

 

нет не реагирует я нечайно на вторую ардуино другой скетч залил вот он и заморгал а вообще я тоже понимаю что должны 35 и 39 передавать сигнал но не перелает почему то просто у меня в скетче который передаёт коды стоят ( 5312960, 24);//код включения лампы и ( 5312780, 24);//код выключения лампы и вот эти цифры после кода 24 и запятую мне надо бы убрать но тогда скетч не компилируется а на второй ардуино если я прописую эти цифры 24 то начинаются глюки с обеими ардуино тоесть диод и на первой и на второй еле горят а на первой бывает загорится и потухнет

T.Rook
Offline
Зарегистрирован: 05.03.2016

artemon25 пишет:

 я тоже понимаю что должны 35 и 39 передавать сигнал но не перелает почему то просто у меня в скетче который передаёт коды стоят ( 5312960, 24);//код включения лампы и ( 5312780, 24);//код выключения лампы и вот эти цифры после кода 24 и запятую мне надо бы убрать но тогда скетч не компилируется а на второй ардуино если я прописую эти цифры 24 то начинаются глюки с обеими ардуино тоесть диод и на первой и на второй еле горят а на первой бывает загорится и потухнет

Ничего не понял. Я не знаю какие коды и за что у Вас отвечают, тут Вы сами рулите.

1. На ардуино1 (передающей) вместе с передачей кодов, поставьте вывод в Serial, что бы видеть правильность отработки.

2. Какие коды принимает вторая Ардуинка?

3. Вы опять забыли mySwitch.resetAvailable(); на принимающей стороне?

4. Ctrl+T - очень приятное сочетание в IDE, попробуйте :)

 

artemon25
Offline
Зарегистрирован: 25.12.2015

T.Rook]</p> <p>[quote=artemon25 пишет:

убрал эту строку и убрал delay после заливки скетча замигал диод на втором ардуино но на хлопки соотвественно не реагирует надо вписать данные для отправки кода

так замигал или не реагирует?. От чего замигал? Не понял.

А в 35 и 39 разве не передача вкл/выкл стоит???

Какие коды принимает вторая Ардуинка?

Вы опять забыли mySwitch.resetAvailable(); на принимающей стороне?

Ctrl+T - очень приятное сочетание в IDE, попробуйте :)

[/quote

 

всё правильно вставил эту строку получился приёсник вот такой скетч

#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() == 5312960) {   // 6133332 - код Включения1
      digitalWrite(relay7, HIGH);
    }
    if (mySwitch.getReceivedValue() ==  5312780) {   // 6133392 - код выключения1
      digitalWrite(relay7, LOW);
    }
    mySwitch.resetAvailable();
  }
}

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

моргала и перестала теперь вроде всё работает как надо . спасибо за помощь и подскажите что делает Ctrl+T

T.Rook
Offline
Зарегистрирован: 05.03.2016

artemon25 пишет:

моргала и перестала теперь вроде всё работает как надо . спасибо за помощь и подскажите что делает Ctrl+T

авто-форматирование кода :)