#1 Re: Програмування Arduino » передатчик без умолку шлет команды по rf 433 MHz » 2017-07-19 18:02:41

vvr пише:

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

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

#2 Програмування Arduino » передатчик без умолку шлет команды по rf 433 MHz » 2017-07-19 12:21:18

Vic22
відповідей: 2

передатчик без умолку шлет команды по 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;
  }
}

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