проэкт

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

  1. Airbus

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

    Иваныч я.Едем к Коту на шашлык?
     
  2. b707

    b707 Гуру

    jack61 - чтоб создать в этом разделе нормальный заказ - опишите подробно задачу. выложите код приемника и передатчика. И не ведите себя как маленький.
     
  3. parovoZZ

    parovoZZ Гуру

    Пардон муа)
     
    Airbus нравится это.
  4. Airbus

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

    Ну так что никто не хочет 100 рублей на Пиво заработать и человеку помочь?Проэкт же горит!
     
  5. b707

    b707 Гуру

    Заказчик мутный, у него еще целый день придется точное ТЗ вымучивать...
     
  6. parovoZZ

    parovoZZ Гуру

    да лишь бы бухло не мутное было))

    за 100 рублей я своими делами займусь.
     
    Airbus и NikitOS нравится это.
  7. parovoZZ

    parovoZZ Гуру

    да у него холодно что-то. Финляндией в двух тарах не обойдемся. Придется самогончик открывать.
     
    Airbus нравится это.
  8. vvr

    vvr Инженерище

    да у него ещё снег лежит...
     
    Airbus нравится это.
  9. jack61

    jack61 Нуб

    суть проблемы в том что удерживаю кнопку отхожу пока не потеряет связь ,отпускаю кнопку реле не отключается .удерживаю кнопку ,включается реле отключаю пульт реле остается работать
    Код (C++):
    #include <SPI.h>
    #include "nRF24L01.h"
    #include "RF24.h"

    RF24 radio(9, 10); // "создать" модуль на пинах 9 и 10 Для Уно
    //RF24 radio(9,53); // ----------------передатчик -----------

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

    byte button5 = 5;
    byte button7 = 7;
    byte button6 = 6;
    byte button = 2;
    byte potent2 = 3;
    byte potent1 = 4;
    byte potent = 1;
    byte slider = 0;

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

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


      radio.begin(); //активировать модуль
      radio.setAutoAck(1);         //режим подтверждения приёма, 1 вкл 0 выкл
      radio.setRetries(0, 10);    //(время между попыткой достучаться, число попыток)
      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() {
        transmit_data[12] = map(analogRead(button5), 0, 1023, 0, 180);

      transmit_data[11] = map(analogRead(button7), 0, 1023, 0, 280);
      transmit_data[10] = map(analogRead(button6), 0, 1023, 0, 180);
      transmit_data[9] = map(analogRead(potent2), 0, 1023, 0, 280);
      transmit_data[8] = map(analogRead(potent2), 0, 1023, 280, 0);
      transmit_data[7] = map(analogRead(potent1), 0, 1023, 0, 280);
      transmit_data[6] = map(analogRead(potent1), 0, 1023, 280, 0);
      transmit_data[5] = map(analogRead(button), 0, 1023, 0, 280);
      transmit_data[4] = map(analogRead(button), 0, 1023, 280, 0);
      transmit_data[3] = map(analogRead(slider), 0, 1023, 0, 300);
      transmit_data[0] = map(analogRead(slider),  0, 1023, 300, 0);
      transmit_data[1] = map(analogRead(potent), 0, 1023, 0, 300);
      transmit_data[2] = map(analogRead(potent), 0, 1023, 300, 0);

      for (int i = 0; i < 3; i++) { // в цикле от 0 до числа каналов
        if (transmit_data[i] != latest_data[i]) { // если есть изменения в transmit_data
          flag = 1; // поднять флаг отправки по радио
          latest_data[i] = transmit_data[i]; // запомнить последнее изменение
        }
      }

      if (flag == 1) {
        radio.powerUp(); // включить передатчик
        radio.write(&transmit_data, sizeof(transmit_data)); // отправить по радио
        flag = 0; //опустить флаг
        radio.powerDown(); // выключить передатчик
      }

    }          
    Код (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[13]; // массив принятых данных
    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 relay62 = 3;

    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);
           pinMode(relay62, OUTPUT);

      radio.begin(); //активировать модуль
      radio.setAutoAck(1);         //режим подтверждения приёма, 1 вкл 0 выкл
      radio.setRetries(0, 10);    //(время между попыткой достучаться, число попыток)
      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() {analogWrite(relay62, recieved_data[12]);
         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]);
      }

    }
     
  10. b707

    b707 Гуру

    jack61 - для начала разберитесь с ошибками в коде приемника и передатчика.
    Во-первых, что за контроллер у вас? В комментариях написано, что Уно, но что-то не похоже.Что за странные номера портов в приемнике - аналоговые порты с номерами от 2 до 19? - такого нет ни на Уно, ни на Меге.

    Во-вторых - посмотрите, как вы упаковываете данные в передатчике. Смотрим на строчки
    Код (C++):
    transmit_data[11] = map(analogRead(button7), 0, 1023, 0, 280);
      transmit_data[10] = map(analogRead(button6), 0, 1023, 0, 180);
      transmit_data[9] = map(analogRead(potent2), 0, 1023, 0, 280);
      transmit_data[8] = map(analogRead(potent2), 0, 1023, 280, 0);
      transmit_data[7] = map(analogRead(potent1), 0, 1023, 0, 280);
      transmit_data[6] = map(analogRead(potent1), 0, 1023, 280, 0);
      transmit_data[5] = map(analogRead(button), 0, 1023, 0, 280);
      transmit_data[4] = map(analogRead(button), 0, 1023, 280, 0);
      transmit_data[3] = map(analogRead(slider), 0, 1023, 0, 300);
      transmit_data[0] = map(analogRead(slider),  0, 1023, 300, 0);
      transmit_data[1] = map(analogRead(potent), 0, 1023, 0, 300);
      transmit_data[2] = map(analogRead(potent), 0, 1023, 300, 0);
    Слева у вас элементы массива. Массива типа байт. А справа вы пихаете в них числа диапазона 0.. 280 и 0..300. Вы в курсе какого размера байт? - 0..255! - у вас ни один параметр правильно не передается.

    В общем, похоже что этот код никуда не годится. Думаю, вам не править этот скетч надо, а заказывать написать приемник и передатчик с нуля. Формулируйте задачу - что именно вам надо передавать, причем описывайте именно задачу(например, радиоуправление роботом), а не код программирования - программировать, вы, похоже, не умеете.
     
  11. jack61

    jack61 Нуб


    МЕНЯ ПОЛНОСТЬЮ УСТРАИВАЕТ РАБОТА ПРИЕМНИКА И ПЕРЕДАТЧИКА .МНЕ НУЖНО ПРОСТО ЧТОБ ОН НЕ ВЫПОЛНЯЛ ПОСЛЕДНЮЮ ЗАДАЧУ ПРИ ПОТЕРИ СВЯЗИ .
     
  12. b707

    b707 Гуру

    а вот кричать не надо, это некрасиво.
    Какой МК - вы не ответили. Почему выбраны такие странные пины - тоже.
    Ну и наконец, если вы сами не видите, что у вас в коде написан бред - то хотя б прислушайтесь к тому, кто разбирается.

    В общем, если вы еще не поняли, почему никто не хочет с вами связываться - задумайтесь.
    До свиданья.
     
    Andrey12 и Daniil нравится это.
  13. parovoZZ

    parovoZZ Гуру

    Чувак, представленный тобой код - говнище. Просто все стесняются об этом сказать. Добавить функционал, который ты просишь - невозможно. По одной простой причине - изначально не предусмотрено.
    Зачем передавать пакет в 32 байта? Сколько там реле? 20? На управление ими достаточно 3-х (ТРЕХ, КАРЛ!) байт. Какой МК, как подключены реле, где схема? Ну нет схемы - черт с ней. Я ВСЕГДА делаю так, даже тогда, когда МК совсем малипусенький
    settings.png
    не говоря уже о случае, когда ног за горизонт. Почему в отдельном файле, а не в main? А можно растабить это дело и сразу смотреть в два окна (у кого два монитора, как у меня на работе - так и совсем удобственно):
    settings2.png

    А код твой надо переписать с НУЛЯ.
    В общем - у нас бригада из трех человек. И они пьют. И пьют за дорого. Финляндия как минимум. На дешман не зарятся.
     
    Airbus, NikitOS и DetSimen нравится это.
  14. DetSimen

    DetSimen Guest

    По крайней мере один из бригады пьёт всё что пьёцца, по минимальной цене, ну, кроме Кагора, разумееца.
     
    KindMan, Airbus, NikitOS и ещё 1-му нравится это.
  15. parovoZZ

    parovoZZ Гуру

    Щас ТС созреет - промывочной жидкостью промоешь питейный тракт.
     
  16. Airbus

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

    А этот код вообще работает?А то меня терзают смутные сомнения....
    Кроме того что правильно заметил Филин
    Меня смутило вот это
    Код (C++):

    void loop() {analogWrite(relay62, recieved_data[12]);
        byte pipeNo;
       while ( radio.available(&pipeNo)) {  // слушаем эфир со всех труб
        radio.read( &recieved_data, sizeof(recieved_data) );
        [B]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]);[/B]
    ШИМ управление релюхой?Как я понял с потенциометра/слайдера если верить коду приёмника.А зачем?И потом в коментах написано что УНО.УНО значит Мега 328.нету у Меги 328 столько ШИМ выходов.А токма 3-5-6-9-10-11.А в коде со 2 по 19.Не будет этот код работать от слова СОВСЕМ.Ну и конечно не только это.ЭТО-то что пежет глаз.
     
  17. カオナシ

    カオナシ Нерд

    Похоже ТС нашел где то этот код, и пытается использовать, а как работает - не понимает.
    Там только три первых байта на изменение проверяются, а остальные, похоже, так просто таскаются.
     
    Airbus нравится это.
  18. b707

    b707 Гуру

    зато его "все устраивает".
    Короче, есть такие люди, у которых не хватает не то что самому сделать - а даже стырить грамотно.
     
    Последнее редактирование: 22 апр 2019
    Andrey12, Airbus и Asper Daffy нравится это.
  19. parovoZZ

    parovoZZ Гуру

    и что здесь должно произойти? Кнопка как должна известить приемник, что ее отпустили?