#1 2017-07-19 12:21:18

Vic22
Учасник
Зареєстрований: 2017-07-19
Повідомлень: 2

передатчик без умолку шлет команды по rf 433 MHz

передатчик без умолку шлет команды по 433.

как сделать что бы он отправлял команду только один раз после изменения положения?

Сенсоры наклона стоят под угом 45 градусов к плате и дают 6 точных позиций (сенсоры наклона выступают как кнопки).

если знаете как перевести систему на акселерометр, буду благодарен за помощь

Transmitter.jpg

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

RCSwitch mySwitch = RCSwitch();
int cases = 0;
int t = 150;
RF24 radio(9, 10); 

byte address[][6] = {"1Node", "2Node", "3Node", "4Node", "5Node", "6Node"}; //возможные номера труб

byte button = 3;  // кнопка на 3 цифровом
byte potent = 0; // потенциометр на 0 аналоговом
byte slider = 1; // движковый потенциометр на 1 аналоговом пине

byte transmit_data; // массив, хранящий передаваемые данные
byte latest_data; // массив, хранящий последние переданные данные
boolean flag; // флажок отправки данных

void setup() {
  Serial.begin(9600); //открываем порт для связи с ПК

  pinMode(3, INPUT_PULLUP);
  pinMode(6, INPUT_PULLUP);
  pinMode(7, INPUT_PULLUP);
  pinMode(4, INPUT_PULLUP); // настроить пины датчика
  mySwitch.enableTransmit(8);
  radio.begin(); //активировать модуль
  radio.setAutoAck(1);         //режим подтверждения приёма, 1 вкл 0 выкл
  radio.setRetries(0, 15);    //(время между попыткой достучаться, число попыток)
  radio.enableAckPayload();    //разрешить отсылку данных в ответ на входящий сигнал
  radio.setPayloadSize(32);     //размер пакета, в байтах

  radio.openWritingPipe(address[0]);   //мы - труба 0, открываем канал для передачи данных
  radio.setChannel(0x60);  //выбираем канал (в котором нет шумов!)

  radio.setPALevel (RF24_PA_MAX); //уровень мощности передатчика. На выбор RF24_PA_MIN, RF24_PA_LOW, RF24_PA_HIGH, RF24_PA_MAX
  radio.setDataRate (RF24_250KBPS); //скорость обмена. На выбор RF24_2MBPS, RF24_1MBPS, RF24_250KBPS
  //должна быть одинакова на приёмнике и передатчике!
  //при самой низкой скорости имеем самую высокую чувствительность и дальность!!

  radio.powerUp(); //начать работу
  radio.stopListening();  //не слушаем радиоэфир, мы передатчик
}

void loop() {
  if (digitalRead(3) == LOW && digitalRead(4) == LOW && digitalRead(6) == LOW && digitalRead(7) == LOW)
  {
    delay(t);
    if (digitalRead(3) == LOW && digitalRead(4) == LOW && digitalRead(6) == LOW && digitalRead(7) == LOW)
    {
      cases = 0; //  blue

    }
  }
  if (digitalRead(3) == 0 && digitalRead(4) == 0 && digitalRead(6) == 1 && digitalRead(7) == 1)
  {
    delay(t);
    if (digitalRead(3) == 0 && digitalRead(4) == 0 && digitalRead(6) == 1 && digitalRead(7) == 1)
    {
      cases = 1; // green

    }
  }
  if (digitalRead(3) == 1 && digitalRead(4) == 1 && digitalRead(6) == 0 && digitalRead(7) == 0)
  {
    delay(t);
    if (digitalRead(3) == 1 && digitalRead(4) == 1 && digitalRead(6) == 0 && digitalRead(7) == 0)
    {
      cases = 2; // violet

    }
  }
  if (digitalRead(3) == LOW && digitalRead(4) == 1 && digitalRead(6) == LOW && digitalRead(7) == 1)
  {
    delay(t);
    if (digitalRead(3) == LOW && digitalRead(4) == 1 && digitalRead(6) == LOW && digitalRead(7) == 1)
    {
      cases = 3; // yellow

    }
  }
  if (digitalRead(3) == 1 && digitalRead(4) == LOW && digitalRead(6) == 1 && digitalRead(7) == LOW)
  {
    delay(t);
    if (digitalRead(3) == 1 && digitalRead(4) == LOW && digitalRead(6) == 1 && digitalRead(7) == LOW)
    {
      cases = 4; // red

    }
  }
  if (digitalRead(3) == 1 && digitalRead(4) == 1 && digitalRead(6) == 1 && digitalRead(7) == 1)
  {
    delay(t);
    if (digitalRead(3) == 1 && digitalRead(4) == 1 && digitalRead(6) == 1 && digitalRead(7) == 1)
    {
      cases = 5; // orange

    }
  }


  transmit_data = cases; 
    if (transmit_data != latest_data) { // если есть изменения в transmit_data
    flag = 1; // поднять флаг отправки по радио
    latest_data = transmit_data; // запомнить последнее изменение
  }


  if (flag == 1) {
    radio.powerUp(); // включить передатчик
    radio.write(&transmit_data, sizeof(transmit_data));// отправить по радио
        flag = 0; //опустить флаг
    radio.powerDown(); // выключить передатчик
  }
  switch (cases) {//  для 433 МГц 
    case 0: //Синий
      for (int i = 0; i <= 1; i++)
      {
        mySwitch.send(5594115, 24);
                 delay(2);
      }
      break;
    case 1: //Зеленый
      for (int i = 0; i <= 1; i++)
      {
        mySwitch.send(5591811, 24);
                 delay(2);
      }
      break;
    case 2: //Фиолетовый
      for (int i = 0; i <= 1; i++)
      {
        mySwitch.send(5591280, 24);
                 delay(2);
      }
      break;
    case 3: //Желтый
      for (int i = 0; i <= 1; i++)
      {
        mySwitch.send(5591820, 24);
                 delay(2);
      }
      break;
    case 4: //Красный
      for (int i = 0; i <= 1; i++)
      {
        mySwitch.send(5591235, 24);
                 delay(2);
      }
      break;
    case 5: //Оранжевый
      for (int i = 0; i <= 1; i++)
      {
        mySwitch.send(5591244, 24);
                 delay(2);
      }
      break;
  }
}

Остання редакція Vic22 (2017-07-19 12:22:20)

Неактивний

#2 2017-07-19 13:19:42

vvr
Учасник
Зареєстрований: 2015-04-12
Повідомлень: 878

Re: передатчик без умолку шлет команды по rf 433 MHz

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

Неактивний

#3 2017-07-19 18:02:41

Vic22
Учасник
Зареєстрований: 2017-07-19
Повідомлень: 2

Re: передатчик без умолку шлет команды по rf 433 MHz

vvr пише:

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

объясните пожалуйста, а то моих знаний слегка не хватает

Неактивний

Швидке повідомлення

Введіть повідомлення і натисніть Надіслати

Підвал форуму