NRF24L01 Регистры часть 1

Поділитися
Вставка
  • Опубліковано 9 гру 2016
  • alitems.com/g/1e8d114494a243b... - как у меня
    alitems.com/g/1e8d114494a243b... - модуль с внешней антенной на 1км
  • Наука та технологія

КОМЕНТАРІ • 21

  • @electronicdesignshow3060
    @electronicdesignshow3060 6 років тому +1

    очень крутой видос и подача, спасибо

  • @user-pn4tu1pu2z
    @user-pn4tu1pu2z 3 роки тому

    Спасибо.

  • @pro-design1202
    @pro-design1202 7 років тому

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

    • @RADIOSOFT1
      @RADIOSOFT1  7 років тому

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

    • @pro-design1202
      @pro-design1202 7 років тому

      /* Данный скетч делает следующее: передатчик (TX) отправляет массив
      данных, который генерируется согласно показаниям с кнопки и с
      двух потенциомтеров. Приёмник (RX) получает массив, и записывает
      данные на реле, сервомашинку и генерирует ШИМ сигнал на транзистор.
      by AlexGyver 2016
      */
      #include
      #include "nRF24L01.h"
      #include "RF24.h"
      #include
      RF24 radio(7, 8); // "создать" модуль на пинах 9 и 10 Для Уно
      //RF24 radio(9,53); // для Меги
      boolean led_green = 6;
      boolean led_red = 5;
      volatile boolean flag_tx, flag_fail, flag_rx;
      byte address[][6] = {"1Node", "2Node", "3Node", "4Node", "5Node", "6Node"}; //возможные номера труб
      byte receiver_input_channel_1 = 0; // кнопка на 3 цифровом
      byte receiver_input_channel_2 = 1; // потенциометр на 0 аналоговом
      byte receiver_input_channel_3 = 2; // движковый потенциометр на 1 аналоговом пине
      byte receiver_input_channel_4 = 3;
      byte transmit_data[4]; // массив, хранящий передаваемые данные
      byte latest_data[4]; // массив, хранящий последние переданные данные
      boolean flag; // флажок отправки данных
      void setup() {
      attachInterrupt(0, check_radio, FALLING);
      Serial.begin(9600); //открываем порт для связи с ПК
      pinMode(led_red, OUTPUT);
      pinMode(led_green, OUTPUT);
      radio.begin(); //активировать модуль
      delay(2);
      radio.setAutoAck(1); //режим подтверждения приёма, 1 вкл 0 выкл
      radio.setRetries(0, 15); //(время между попыткой достучаться, число попыток)
      //radio.enableAckPayload(); //разрешить отсылку данных в ответ на входящий сигнал
      radio.setPayloadSize(32); //размер пакета, в байтах
      radio.maskIRQ(1,1,0);
      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 check_radio(){ // обработчик прерывания
      boolean tx, fail, rx;
      radio.whatHappened(tx,fail,rx); // читаем регистр
      flag_tx = tx; // 1 если успешно отправили данные
      flag_fail = fail; // 1 если данные не отправленны
      //flag_rx = rx; // 1 если пришли данные для чтения
      }
      void loop() {
      transmit_data[0] = map(analogRead(receiver_input_channel_1), 0, 1023, 0, 255);
      transmit_data[1] = map(analogRead(receiver_input_channel_2), 0, 1023, 0, 255); // получить значение
      transmit_data[2] = map(analogRead(receiver_input_channel_3), 0, 1023, 0, 255);
      transmit_data[3] = map(analogRead(receiver_input_channel_4), 0, 1023, 0, 255);
      for (int i = 0; i < 4; 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)); // отправить по радио
      delay(150);
      Serial.print(" TX:");
      Serial.print(flag_tx);
      Serial.print(" FAIL:");
      Serial.println(flag_fail);
      flag = 0; //опустить флаг
      // radio.powerDown(); // выключить передатчик
      }
      if (flag_fail == 1){ // если данные не отправленны
      digitalWrite(5, HIGH);
      flag_fail = 0;
      }
      if (flag_tx == 1){ // если данные не отправленны
      digitalWrite(6, HIGH);
      flag_tx = 0;
      }
      }

    • @pro-design1202
      @pro-design1202 7 років тому

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

  • @edgi
    @edgi 4 роки тому

    каким образом он сконфигурирован с завода? если подключить к нему только питание что будет происходить в нем?

    • @RADIOSOFT1
      @RADIOSOFT1  4 роки тому

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

  • @user-ms7oe3sz1u
    @user-ms7oe3sz1u 6 років тому +1

    Не интюресно... Очень даже как интересно! Если переводил так расскажи полностью! ОК?

    • @user-ms7oe3sz1u
      @user-ms7oe3sz1u 6 років тому +1

      Я за даташет

    • @RADIOSOFT1
      @RADIOSOFT1  6 років тому

      так основное вроде бы рассказал.

  • @user-fd4ub4ic2h
    @user-fd4ub4ic2h 7 років тому

    Друзья подскажите, я не понимаю. Хочу переслать бинарный код через нрф (нужно для одной приблуды именно бинарный переслать) но я не пойму эти единицы И нули пересылаются посимвально или сразу порциями... Кто может помочь ссылкой подскажитее) в идеале я должен одной нрф переслать бинарник, другой его получить и послать в ком порт.

    • @RADIOSOFT1
      @RADIOSOFT1  7 років тому +2

      либо составить из бинарного кода целый байт, и потом на приемнике его разобрать на биты,
      либо отправлять байты равные 0 или 1

  • @Abram893
    @Abram893 6 років тому

    заявленная и реальная это разные вещи

    • @RADIOSOFT1
      @RADIOSOFT1  6 років тому +1

      о чем речь? удалось установить связь на расстоянии 1600м

  • @DenisUsvh
    @DenisUsvh 4 роки тому +1

    Уже представил как препод по математике объясняет школьникам:
    - Ну константа,я не помню...
    - Ну число Пи равно 3,14 или 31,4 потом посмотрю...
    - Уравнение дискриминант бла,бла,бла..
    Как минимум хотя бы сценарий напишите для видео.

  • @MrMegalloid
    @MrMegalloid 7 років тому

    Только одно замечание: научитесь правильно читать английские слова. Очень отталкивает неправильное произношение.

    • @dasramm8513
      @dasramm8513 6 років тому +2

      ну так иди к Гуманитариям. Технари не обязаны читать на литературном

    • @user-sc8ye9qj5e
      @user-sc8ye9qj5e 6 років тому +1

      Технари, как и пилоты, обязаны знать технический английский. Иначе они не технари, а обычные российские полуграмотные егэшники, которых сейчас дохуя и больше.
      "Мы_ни_на_экзамине". Как будто вы на экзамене в состоянии по-другому, ага... )
      А более-менее знать английский - сегодня вообще норма для культурного человека. Но тебе не понять. Технарь... ))