проэкт

Тема в разделе "Закажу проект", создана пользователем jack61, 19 апр 2019.

  1. jack61

    jack61 Нуб

    добрый вечер .что исправить в коде приемника ?при потери связи остается работать последняя
    задача ,а хотелось бы чтоб прекращалась выполнение кода
    Код (C++):

    ?    -------------------------приемник ------------------
    #include <SPI.h>
    #include "nRF24L01.h"
    #include "RF24.h"
    #include <Servo.h>
    RF24 radio(9, 10); // "создать" модуль на пинах 9 и 10 Для Уно
    //RF24 radio(9,53); // для Меги
    byte recieved_data[12]; // массив принятых данных
    byte relay61 = 6;
    byte relay51 = 5;
    byte relay = 2;
    byte relay1= 4;
    byte relay3 = 7;
    byte mosfet = 8;
    byte relay4 = 14;
    byte relay5 = 15;
    byte relay6 = 16;
    byte relay2 = 17;
    byte relay7 = 18;
    byte relay8 = 19;
    byte address[][6] = {"1Node", "2Node", "3Node", "4Node", "5Node", "6Node"}; //возможные номера труб
    void setup() {
      Serial.begin(9600); //открываем порт для связи с ПК
      pinMode(relay, OUTPUT); // настроить пин реле как выход
      pinMode(mosfet, OUTPUT); // настроить пин мосфета как выход
       pinMode(relay1, OUTPUT);
        pinMode(relay2, OUTPUT);
         pinMode(relay3, OUTPUT);
          pinMode(relay4, OUTPUT);
           pinMode(relay5, OUTPUT);
            pinMode(relay6, OUTPUT);
             pinMode(relay7, OUTPUT);
              pinMode(relay8, OUTPUT);
           pinMode(relay61, OUTPUT);
           pinMode(relay51, OUTPUT);
      radio.begin(); //активировать модуль
      radio.setAutoAck(1);         //режим подтверждения приёма, 1 вкл 0 выкл
      radio.setRetries(0, 15);    //(время между попыткой достучаться, число попыток)
      radio.enableAckPayload();    //разрешить отсылку данных в ответ на входящий сигнал
      radio.setPayloadSize(32);     //размер пакета, в байтах
      radio.openReadingPipe(1, 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.startListening();  //начинаем слушать эфир, мы приёмный модул
    }
    void loop() {
      byte pipeNo;
      while ( radio.available(&pipeNo)) {  // слушаем эфир со всех труб
        radio.read( &recieved_data, sizeof(recieved_data) );         // чиатем входящий сигнал
        analogWrite(relay, recieved_data[0]); //то бишь 0 или 1
        analogWrite(relay3, recieved_data[1]);
        analogWrite(mosfet, recieved_data[2]);
        analogWrite(relay1, recieved_data[3]);
        analogWrite(relay5, recieved_data[4]);
        analogWrite(relay4, recieved_data[5]);
        analogWrite(relay6, recieved_data[6]);
        analogWrite(relay2, recieved_data[7]);
        analogWrite(relay7, recieved_data[8]);
        analogWrite(relay8, recieved_data[9]);
            digitalWrite(relay51, recieved_data[11]);
        analogWrite(relay61, recieved_data[10]);
      }
    }
     
     
    Последнее редактирование: 20 апр 2019
  2. Airbus

    Airbus Радиохулиган Модератор

    Для начала правильно его скопипастить-убрать цифры вначале из каждой строки .
     
    NikitOS нравится это.
  3. Daniil

    Daniil Гуру

    Что такое "потеря связи"?
    Ответ должен содержать критерии, которые можно достать из nrf24.
     
  4. NikitOS

    NikitOS Король шутов Администратор

    «новечку»? Помочь выучить русский? :D
    Код правильно вставьте...
     
    Airbus и Daniil нравится это.
  5. jack61

    jack61 Нуб

    к примеру я нажал кнопку на передачики ,на приемники включается реле -отошел на расстояние(отключил питание ) где не ловит nrf 24 реле не отключается
     
  6. jack61

    jack61 Нуб

    так правильно
     
  7. NikitOS

    NikitOS Король шутов Администратор

    Нет, что это за лестница в setup`е?
     
  8. jack61

    jack61 Нуб

     
  9. Daniil

    Daniil Гуру

    nrf24 может измерять расстояние? Если она может показывать есть ли подключенные устройства, то можно по этому параметру проверять.
     
  10. jack61

    jack61 Нуб

    а поподромнее можно ??
     
  11. Daniil

    Daniil Гуру

    http://amperka.ru/product/nRF24L01-wireless-module
    Я думал это блютус, а это просто радиоканал.
    Он не умеет фиксировать коннект/разрыв, а значит нужно придумать свой критерий
    я бы сделал так:
    один приборчик постоянно шлет команду "я тут", второй следит. Если какое-то время второй не слышит "я тут", то значит "потеря связи".
     
    Ariadna-on-Line и Airbus нравится это.
  12. Airbus

    Airbus Радиохулиган Модератор

    Или так:кнопка нажата действие выполняется какое то время(задается програмно в коде)кнопка отжата/связь потеряна все выключается.Неудобство-надо постоянно жать кнопку.
     
  13. jack61

    jack61 Нуб

    спасибо !а какой функцией можно остановить выполнение команд ?
     
  14. Airbus

    Airbus Радиохулиган Модератор

    Для цЫфры Digitalwrite(pin,0);Digitalwrite(pin,LOW);
    Digitalwrite(pin,FALSE);
    Для ШИМ Analogwrite(pin,0);
     
  15. Airbus

    Airbus Радиохулиган Модератор

    Можно как и сказал Данил-каждую секунду отправлять строб импульс например с какой то командой и если он не принят допустим в течении 3х-5 секунд то все выключать нах.
     
  16. Ariadna-on-Line

    Ariadna-on-Line Гуру

    while ( radio.available(&pipeNo)) { // слушаем эфир со всех труб

    Процессор должен читать в loop-е таймер и радио, а не крутиться на этой строке (ожидания радио) бесконечно. Если сигнал из радио пришел - сбрасывать таймер и выполнять . А если сигнала нет - выключать релюхи по превышению времени ожидания таймера.
     
    Последнее редактирование: 20 апр 2019
  17. jack61

    jack61 Нуб

     
  18. DetSimen

    DetSimen Guest

    Я вот в "ардруинах" ничо не понимаю, в "ардуинах" тока чучуть. Как паравос в абдуринах.
     
    NikitOS нравится это.
  19. Daniil

    Daniil Гуру

    Этот алгоритм и так совсем зеленый. Скажите, в чем трудность в его реализации?
    Если совсем ничего непонятно, то гугл, вики, книжки и практика вам помогут. Советую прорабатывать алгоритмы на бумажке и выполнять его по шагам - так вы сможете понять алгоритм и быстро соображать новые необходимые вам.
     
    NikitOS нравится это.
  20. Airbus

    Airbus Радиохулиган Модератор

    Как Паровоз в Апельсинах?
     
    Andrey12 нравится это.