Nrf24l01+

derver
Offline
Зарегистрирован: 11.05.2014

убрал я его такая же лабуда

derver
Offline
Зарегистрирован: 11.05.2014

может есть исходник посмотреть 

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

Значит нужно залесть в библиотеку и посмотреть как она выключается. По всей видимости она не отрубает модуль по команде стоп. Я эту библиотеку 2 года назад последний раз трогал :) не практичные эти модули.

derver
Offline
Зарегистрирован: 11.05.2014

скинешь библиотечку пожалуйста

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

derver пишет:

скинешь библиотечку пожалуйста


Зайди на github и выбери любую. Там для этих модулей из вагон разных.

derver
Offline
Зарегистрирован: 11.05.2014

все попробовал от маняка и далее

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

Насколько помню. Маньяк выдал базовую версию. Котооая полностью окупировала spi и не позволяла его использовать для чего то еще. И на этом забросил все нафиг. Там есть другие библиотеки для этого модуля. Мы долго игрались с той которая mesh сеть строит. Не помню как называется.

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

Puhlyaviy пишет:
Значит нужно залесть в библиотеку и посмотреть как она выключается. По всей видимости она не отрубает модуль по команде стоп. Я эту библиотеку 2 года назад последний раз трогал :) не практичные эти модули.

вот и ты согласился что просто так без  конфликтов по шине spi не общаться с nrf и еще чем нибудь

derver
Offline
Зарегистрирован: 11.05.2014

может в твоей библиотеке она завалялась

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

jeka_tm пишет:

вот и ты согласился что просто так без  конфликтов по шине spi не общаться с nrf и еще чем нибудь


Гыыы я согласился что библиотека кривая. А сам модуль у нас в проекте работал в связке с изернет шильдом и sd.

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

https://github.com/maniacbug/RF24Network
Только там нужно по веткаи пройти и выбрать рабочую версию.

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

Puhlyaviy пишет:
jeka_tm пишет:

вот и ты согласился что просто так без  конфликтов по шине spi не общаться с nrf и еще чем нибудь

Гыыы я согласился что библиотека кривая. А сам модуль у нас в проекте работал в связке с изернет шильдом и sd.

но не на стандартных либах все сразу работает в связке

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

Что значит стандартная либа? Производитель не предоставил стандартную либу.
А маньяк написал либу настолько насколько ему было нужно. Его не парило, потому что он начал писать нетворк и там уже это точно пофиксено.

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

Puhlyaviy пишет:
Эк тебя понесло. Не нужно там ничего править. Хорошо все работает. Просто нужно всегда помнить. Что шина одна а устройств много на ней. И не работать одновременно.

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

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

jeka_tm пишет:

Puhlyaviy пишет:
Эк тебя понесло. Не нужно там ничего править. Хорошо все работает. Просто нужно всегда помнить. Что шина одна а устройств много на ней. И не работать одновременно.

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


Буш к словам цепляться. Хорошо. Уточню , в моей версии этой либы не нужно ничего править. :Р

derver
Offline
Зарегистрирован: 11.05.2014

попробуйте парни мой код попровить пожалуйста

serfer89
Offline
Зарегистрирован: 28.06.2014

Добрый вечер, пытаюсь подключить nrf24l01 + w5100 + uno, суть того что бы по радио пришли данные и ушли ГЕТом на сервер через локальную сеть,  первый запрос нормально отправляет даные на сервер, а вот все последующие нет, хотя ардуина в сети пингуется, подскажите что может быть не так?

#include <SPI.h>
#include "nRF24L01.h"
#include "RF24.h"
#include "DHT.h"
#include "printf.h"
#include <Ethernet.h>
#include <OneWire.h> 
int t;
int h;
boolean incoming = 0;
byte mac[] = { 0x00, 0xAA, 0xBB, 0xCC, 0xDA, 0x02 };
IPAddress ip(192,168,0,177); 
byte servert[] = { 192, 168, 0, 106 }; 
EthernetClient client;
RF24 radio(9,8);

const uint64_t pipes[2] = { 0xF0F0F0F0E1LL, 0xF0F0F0F0D2LL };

void setup(void)
{
  
   digitalWrite(8, LOW);
     delay(200);

 
  pinMode(8, OUTPUT);  
  Serial.begin(57600);
  
  Serial.println("RF24/examples/GettingStarted/trans");
  
  radio.begin();

  radio.setRetries(15,15);


  radio.setPayloadSize(8);

    radio.openWritingPipe(pipes[1]);
    radio.openReadingPipe(1,pipes[0]);

  radio.startListening();

  radio.printDetails();


  Ethernet.begin(mac, ip);


  Serial.println(Ethernet.localIP());
}

void loop(void)
{
  
    if ( radio.available() )
    {
      byte post[8];
      bool done = false;
      while (!done)
      {
        done = radio.read( &post, sizeof(post) );

        
Serial.print("Humidity: "); 
    Serial.print(post[1]);
    int h = post[1];
    Serial.print(" %\t");
    Serial.print("Temperature: "); 
    Serial.print(post[2]);
    int t = post[2];
    Serial.println(" *C");
    Serial.print("Light: "); 
    Serial.print(post[0]);
    Serial.println(" %");
    Serial.print("Id: "); 
    Serial.print(post[3]);

        printf("Got payload %lu...",post);

	
	delay(20);
      }


      radio.stopListening();

      radio.write( &post, sizeof(post) );
      Serial.println("Sent response.\n\r");

      radio.startListening();
    }

 
      radio.openWritingPipe(pipes[1]);
      radio.openReadingPipe(1,pipes[0]);
 radio.printDetails();
digitalWrite(8, HIGH);

 Serial.println("Start");

  radio.printDetails();

  Serial.println("Stop");

    delay(2000);

 
  Serial.println("connecting...");

 


  if (client.connect(servert, 80)) {

    Serial.println("connected");

  
    client.println("GET /getter.php?t="+String(t) +"&tin=211&h="+String(h)+"&n=8441&type=4&vent=5");
  }
  else {Serial.println("not connected");}
delay(6000);
  
  }

 

MaksMS
Offline
Зарегистрирован: 11.03.2013

После отправки необходимо выполнить client.stop();

Zbor
Offline
Зарегистрирован: 01.11.2014

Здрасьте! Вот и я добрался до связки  nrf24l01 + w5100 + Mini.

сначала слепил две Мини+nrf24l01 и запустил пример с пингом. Работает отлично. Радиомодуль подключен к пинам 8 и 9 , ну и SPI естественно. 

Потом к одной Мини подключил w5100. Только проводки, скетч его не трогает. И пинговаться перестало. Я вывод SS у w5100 подключил к +5в. Насколько я понимаю, w5100 не должен мешать остальным устройствам на SPI, если его вход SS неактивный (высокий).  Осциллографа не имею, не могу проверить шумит ли w5100 при высоком уровне на SS. 

Подскажите, куда смотреть.

зы. И еще. Программировать свою Мини я могу только при отключенном Reset w5100. Если Ресет w5100 подключен, то программирования не происходит. Сам w5100 рабочий, проверял. 

aljoshka
Offline
Зарегистрирован: 03.03.2014

воможно ли посредством NRF24L01 осуществить передачу потокового видео FPV?

ustisha
Offline
Зарегистрирован: 30.05.2014

Люди! Подскажите пожалуйста почему может быть такое поведение

Код:
bool ok;
ok = radio.write(&data, 8);
Serial.print("Write: ");
Serial.println(ok ? "OK" : "FALSE");
ok = radio.write(&data, 8);
Serial.print("Write: ");
Serial.println(ok ? "OK" : "FALSE");

Лог:
Write: FALSE
Write: OK
Write: FALSE
Write: OK

Т.е. получается данные передаются только если отправляются еще раз сразу после предыдущей отправки. Если второй раз не отравлять всегда будет FALSE и данные не доберутся до второй дуины. Все делал как описано http://arduino-info.wikispaces.com/Nrf24L01-2.4GHz-HowTo. Варианты инициализации перебрал уже все мыслимые и не мыслимые, не работает хоть тресни, данное поведение обнаружил случайно из-за кривого копипаста. 

Железо:

Arduino nano 2.4G NRF24L01+PA+LNA (Конденсаторы на питание припаяны) - отправка

Arduino UNO 2.4G NRF24L01+ (Конденсаторы на питание припаяны) - прием

Вопрос снимается.

Перешл на другую либу https://github.com/tmrh20/RF24 все заработало как часы

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

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

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

потестил, получилось почти 600кбит/с. точнее 596,736кбит/с

до максимальной 2мбит/с к сожалению далековато, но что получилось. в принципе я доволен

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

если еще отключить crc то повышается до 623кбит/с

но лучше конечно не отключать

 
udavst
udavst аватар
Offline
Зарегистрирован: 29.11.2013

Столкнулся с проблемой. Собрал платку, отсылает метеоданные на narodmon. Плата 28J60, такая.

У платы CS на 10 выводе, тк использую библиотеку ethercard, поправил в ней csPin 8 на csPin 10, всё работает.

Подключаю nrf24l01. MOSI, MISO, SCK у них параллельны. CS и CE подключаю на D7, D8 (пробовал на 4,5 - одинаково). В GettingStarted прописываю RF24 radio(7,8).

В итоге при запуске GettingStarted выводятся одни нули, везде. Отключаю 28J60 - всё начинает работать. Не пойму, чем они друг другу мешают. Выводы прозвонил, с 28j60 действительно выходят только D10,D11,D12,D13 (D8 пустой), т.е. физически платы не пересекаются. Перестаёт работать только nrf24l01, EthernetShield работает как ни в чём не бывало. Подскажите куда копать?

С сетевухой  Без сетевухи

Всё, нашёл. Оказывается такая плата ethernet-shield'а, с грехом. А именно у неё на 12 вывод (MISO) включен буфер на 74HCT08 у которого выход не бывает в высокоимпедансном состоянии, те фактически эта плата MISO берёт на себя, и остальным не даёт пользоваться. Припаял MISO IRF'ки не на D12, а на 5 контакт 74HCT08 (вход буфера). Всё заработало.

osetroff
Offline
Зарегистрирован: 27.08.2014

Пользую эту библиотеку.
Делаю сеть датчиков Д влажности для автополива на участке.
Все Д разделил на группы (подсети), далее Г.
Между Г обмен пакетами осуществляю через шлюзовой Д.
Вот с адресацией pipes у этого шлюзового Д и возникли вопросы.

Например, шлюзовой Д05 состоит в Г01 и имеет адрес:

byte addr_r01_05[] = { 0xCC,0xCE,0xCC,0x01,0x05 }; // 0xCCCECC0105
radio.openReadingPipe(1,addr_r01_05);
//для широковещательных
byte addr_r01[] = { 0xCC,0xCE,0xCC,0x01,0x00 }; // 0xCCCECC0500
radio.openReadingPipe(2,addr_r01);
radio.startListening();

Также, Д05 знает часть адреса группы-подсети Г05, для которой он — шлюз:
 

byte addr_r05[] = { 0xCC,0xCE,0xCC,0x05,0x00 }; // 0xCCCECC0500

В Г05 существует Д03 с адресом:


byte addr_r05_03[] = { 0xCC,0xCE,0xCC,0x05,0x03 }; // 0xCCCECC0503
radio.openReadingPipe(1,addr_r05_03);
//для широковещательных
byte addr_r05[] = { 0xCC,0xCE,0xCC,0x05,0x00 }; // 0xCCCECC0500
radio.openReadingPipe(2,addr_r05);
radio.startListening();

Также, Д03 знает адрес шлюза Г01:

byte addr_r01_05[] = { 0xCC,0xCE,0xCC,0x01,0x05 }; // 0xCCCECC0105

Правильно ли я понимаю, что:
1. Если я хочу отправить пакет от Д05(Г01) в Д03(Г05), то:

addr=addr_r05; addr[4]=0x03;
radio.openWritingPipe(addr_r05);
radio.stopListening();
radio.writeFast(&buf,len,1);
radio.txStandBy();
radio.startListening();

2. Если отправляю пакет от Д03(Г05) в Д05(Г01), то:

radio.openWritingPipe(addr_r01_05);
radio.stopListening();
radio.writeFast(&buf,len,1);
radio.txStandBy();
radio.startListening();

И т.п.

P.S. Кто-нибудь пробовал setAddressWidth(3)?
Адресом тогда будут последние три байта addr?

spa-sam
Offline
Зарегистрирован: 14.12.2012

Не знаю было или нет, но... Читал, что тут народ сталкивался с проблемой работы NRF24L01+, припаивали кондёры и вроде как решали проблему. Всё удивлялся, ведь у меня работает без танцев с бубном и тут пришёл он...т.е те модули, которые не захотели просто заводиться, пробовал припаивать кондёр, но всё равно нестабильно...Если поставить на то место нормальный модуль ( что заказывал до этого, всё работает отлично)... и тут я решил рассмотреть поближе оба модуля и что обнаружил, что чипы то на них разные, совсем разные, хотя оба покупались как NRF24L01+. Вобщем смотрите сами...

Нижний правильный и отлично работающий, а верхний, то самое дерьмо

spa-sam
Offline
Зарегистрирован: 14.12.2012

И так, заработали эти мутные модули у меня (без кондёров). Наткнулся на обсуждение наших товарищей на форуме амперки и там упоминалось об улучшенной библиотеке  maniacbug. Модификация от товарища TMRh20. Ссылка на библу https://github.com/TMRh20/RF24

Работает очень стабильно! За что ему огромное спасибо!!!

MaksMS
Offline
Зарегистрирован: 11.03.2013

si24r1 - похоже ещё один китайский вариант модуля  NRF24L01+. Помучался в одно время я с подобным аналогом, но более известным, но так и не запустил - вернул деньги т.к. модули были собраны из "мусора", деталей не входящий в стандартную схему по даташиту. А так те модули имели бОльшую мощность передачи чем обычные  NRF24L01+, но необходима была дополнительная настройка регистров.

spa-sam
Offline
Зарегистрирован: 14.12.2012

Парни, такой вопрос...допустим есть несколько передатчиков и на них устанавливаем разные каналы. Например, на одном radio.setChannel(11), а на другом radio.setChannel(12)....Возможно ли на приёмнике налету менять частоту и принимать со всех передатчиков данные? Есть пример в библиотеке - scanner, где частота меняется и сканируется загруженность канала, но прикрутить в свой код не получается.

MaksMS
Offline
Зарегистрирован: 11.03.2013

Зачем  несколько каналов ? достаточно в пакете передавать ид, например первый байт пакета содержит номер..

spa-sam
Offline
Зарегистрирован: 14.12.2012

Так и делаю. Но.... сейчас у меня в работе 4 передатчика, все они засыпают-просыпаются и передают данные...получается в разное время и поэтому всё отлично принимается со всех...но стоит включить передачу одного из них на постоянку, то он забивает все остальные. Поэтому хотел разграничить датчики каналом, по крайней мере поставить на отдельный канал те, которые будут на постоянку транслировать

toc
Offline
Зарегистрирован: 09.02.2013

>> но стоит включить передачу одного из них на постоянку

1. Что совсем без пауз? Видео передаёте?

2. Если nrf24l01+ работает на скорости 2 мегабита в секунду, то соседние каналы нежелательно использовать в близких системах. Только через один.

spa-sam
Offline
Зарегистрирован: 14.12.2012

К примеру нужно передавать уровень в баке. При его заполнении нужен непрерывный контроль. И суть не в соседних каналах, между ними может быть любая разница. Мне интересна сама реализация переключения канала налету. Желательно кусок рабочего кода, если кто делал уже так.

MocArt
Offline
Зарегистрирован: 15.12.2014

Доброго времени суток!

используя nrf24l01 отправляю запросы (например число 82) о состоянии "ножки" на МК arduino nano, каждые 3 секунды. примерно после 20-30 минут, 2-ой МК зависает и престает отвечать на запросы, думал с переполнение serial, отключил, но все равно зависает, подскажите пожалуйста, в чем может быть дело:

/*

 This program is free software; you can redistribute it and/or
 modify it under the terms of the GNU General Public License
 version 2 as published by the Free Software Foundation.
 */
/*
 Hack.lenotta.com
 Modified code of Getting Started RF24 Library
 It will switch a relay on if receive a message with text 1,
 turn it off otherwise.
 Edo
*/

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

int relay1 = 8;
int relay2 = 7;

//
// Hardware conf
//

// Set up nRF24L01 radio on SPI bus plus pins 9 & 10

RF24 radio(9, 10);

//
// Topology
//

// Radio pipe addresses for the 2 nodes to communicate.
const uint64_t pipes[2] = { 0xF0F0F0F0E1LL, 0xF0F0F0F0D2LL };


char * convertNumberIntoArray(unsigned short number, unsigned short length) {

  char * arr = (char *) malloc(length * sizeof(char)), * curr = arr;
  do {
    *curr++ = number % 10;
    number /= 10;
  } while (number != 0);
  return arr;
}

unsigned short getId(char * rawMessage, unsigned short length) {
  unsigned short i = 0;
  unsigned short id = 0;
  for ( i = 1; i < length; i++) {
    id += rawMessage[i] * pow( 10, i - 1 );
  }
  return id;
}

unsigned short getMessage( char * rawMessage) {
  unsigned short message = rawMessage[0];
  return (unsigned short)message;
}
unsigned short getLength( unsigned int rudeMessage) {
  unsigned short length = (unsigned short)(log10((float)rudeMessage)) + 1;
  return length;
}

void setup(void)
{
  //
  // Print preamble
  //

  Serial.begin(57600);
  pinMode(relay1, OUTPUT);
  digitalWrite(relay1, HIGH);
  pinMode(relay2, OUTPUT);
  digitalWrite(relay2, HIGH);
  //printf_begin();
  //printf("\nRemote Switch Arduino\n\r");

  //
  // Setup and configure rf radio
  //

  radio.begin();
  //  radio.setAutoAck(1);                    // Ensure autoACK is enabled
  radio.setRetries(15, 15);
  radio.setDataRate(RF24_2MBPS);

  radio.openWritingPipe(pipes[1]);
  radio.openReadingPipe(1, pipes[0]);
  radio.startListening();
  //radio.printDetails();
}

int getState(unsigned short pin) {
  boolean state = digitalRead(pin);
  return state == true ? 0 : 1;
}

void doAction(unsigned short id, unsigned short action) {


  if ( action == 0 ) {
    digitalWrite(id, HIGH);
  } else {
    digitalWrite(id, LOW);
  }



}
void sendCallback(unsigned short callback) {
  // First, stop listening so we can talk
  radio.stopListening();

  // Send the final one back.
  radio.write( &callback, sizeof(unsigned short) );
  //printf("Sent response.\n\r");

  // Now, resume listening so we catch the next packets.
  radio.startListening();
}

void performAction(unsigned short rawMessage) {
  unsigned short action, id, length, callback;
  char * castedMessage;

  length = getLength(rawMessage);
  castedMessage = convertNumberIntoArray(rawMessage, length);
  action = getMessage(castedMessage);
  id = getId(castedMessage, length);

  if (action == 0 || action == 1) {
    callback = action;
    doAction(id, action);
  } else if (action == 2) {
    callback = getState(id);
  }
  sendCallback(callback);



}
void loop(void)
{

  // if there is data ready
  if ( radio.available() )
  {
    // Dump the payloads until we've gotten everything
    unsigned short message;
    bool done;
    //      char * new;
    unsigned short rawMessage;
    done = false;
    while ( radio.available() )
    {
      // Fetch the payload, and see if this was the last one.
      radio.read( &rawMessage, sizeof(unsigned long) );

      // Spew it
      //printf("Got message %d...",rawMessage);

      performAction(rawMessage);

      //delay(2);
     while(Serial.available()) // очищаем буфер
  {
	    delay(2);
	    Serial.read();
	  }
    }


  }

}

 

fayvlad
Offline
Зарегистрирован: 27.03.2014

Здравствуйте, приехало мне два модуля,  использую 2 про мини. продолбался двое суток, использовал эту библиотеку  и никак не получилось передать хотябы одно значение. Заливал тестовые скетчи, на передатчику 13 пин моргает, на приемнику - постоянно светит. Заливал и наоборот, также все моргает и светит. Присмотрелся на платки - написано на кристалах Si24R1 как и здесь 

Что посоветуете? Может библиотеку сменить?  Пробывал Mirf - тоже не работает. Что делать - незнаю, еще месяц ждать модули с китая - не вариант.

spa-sam
Offline
Зарегистрирован: 14.12.2012

С этой библиотекой у меня работало всё отлично, только дальность у них меньше чем у нормальных. Попробуй кондёры припаять, но у меня работало и без них.

axill
Offline
Зарегистрирован: 05.09.2011

попробуйте в библиотеке в файле RF24.cpp заменить

_SPI.setClockDivider(SPI_CLOCK_DIV2);

на

_SPI.setClockDivider(SPI_CLOCK_DIV4);

 

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

китайцы радуют)) уже в который раз

http://ru.aliexpress.com/item/Similar-NRF24L01-2-4G-wireless-module-DIP-...

Примечание: этот продукт похож на NRF24L01 + 2.4 г беспроводной модуль, и 2.4 Г Не совместим с программой, совместим

 

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

,

std
Offline
Зарегистрирован: 05.01.2012

Так блин, а как его вообще что? Mirf не заводится, RF24 не заводится, и с какого угла подлазить?

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

ado2002
Offline
Зарегистрирован: 11.02.2015

Всем привет,

бьюсь уже неделю над Si24R1. Кондеры стоят + внешнее стабилизированное питание.

Библиотека TMRh20

На arduino nano (передатчик)  - radio.write() всегда выдает 0 - т.е. типа не передает данные, а на самом деле на приемнике получаю данные.

А на Raspberry Pi (приемник) вообще ничего не могу отправить. Кто победил такие модули?

pity
Offline
Зарегистрирован: 17.02.2015

Здоров ребята! я тут поключил два модуля nrf24l01 к stm32f4discovery для тестирования работы , ну чтоб на одном модуле передать а на другом принять на одном и том же stm32f4discovery но, не работает как то , не принимает , помогите в чем я ошибся , СПОСИБО! вот код .

 

 

#include "stm32f4xx.h"
#include "stm32f4xx_gpio.h"
#include "stm32f4xx_rcc.h"
#include "stm32f4xx_spi.h"
#define ce_on GPIO_SetBits(GPIOA, GPIO_Pin_2);
#define ce_off GPIO_ResetBits(GPIOA, GPIO_Pin_2);
#define cs_on GPIO_ResetBits(GPIOA, GPIO_Pin_4);
#define cs_off GPIO_SetBits(GPIOA, GPIO_Pin_4);
#define cs_onB GPIO_ResetBits(GPIOB, GPIO_Pin_12);
#define cs_offB GPIO_SetBits(GPIOB, GPIO_Pin_12);
#define ce_offB GPIO_ResetBits(GPIOB, GPIO_Pin_11);
#define ce_onB GPIO_SetBits(GPIOB, GPIO_Pin_11);
#define irqB GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_10);
#define led1_on GPIO_SetBits(GPIOD, GPIO_Pin_12);
#define led1_off GPIO_ResetBits(GPIOD, GPIO_Pin_12);
#define led2_on GPIO_SetBits(GPIOD, GPIO_Pin_13);
#define led2_off GPIO_ResetBits(GPIOD, GPIO_Pin_13);
#define led3_on GPIO_SetBits(GPIOD, GPIO_Pin_14);
#define led3_off GPIO_ResetBits(GPIOD, GPIO_Pin_14);
#define led4_on GPIO_SetBits(GPIOD, GPIO_Pin_15);
#define led4_off GPIO_ResetBits(GPIOD, GPIO_Pin_15);

int main(void)
{

nrf24l01_init();
ms_100();
write(0x20, 0x0A); // включаем модуль А
writeB(0x20, 0x0A); // включаем модуль B
ms_1_5_();
int t;

uint8_t dec = 0;

// channel

write(0x25, 100);
writeB(0x25, 100);
//

led1_on;
uint8_t d = 0;
uint8_t def = 0;

while(1)
{

// На одном контроллере подключены два трансивера , цель заключается в том,
// чтоб убедиться что все работает ( передать данные через один трансивере а принять на ругом)
// замете что функции с большой быквы B например writeB() это обраение передающему модулю а если без B ,
// то обращение принимающему модулю.
write(0x20, 0x0b); // трансивер А устанавливается на приемник с помощью регистра конфигурации
ce_on; // поднимаем ногу CE принимающего модуля
mcs_130(); // ждем 130 микросекунд
writeB(0xa0, d); // передаем данные в payload
writeB(0x20, 0x0a); // Устанавливаем трансивер Б на выход
ce_onB; // поднимаем ногу CE передающего модуля
mcs_130(); // для уверенности ждем 130 микросекунд
ce_offB; // опускаем ногу CE передающего модуля
dec = readB(0x07); // читаем регистр статуса
write(0x27, dec); // сбрасываем флажки
dec = 0;
dec = read(0x07);
write(0x27, dec);
def = read(0x61); // читаем из регистра payload принимающего модуля
dec = read(0x07);
write(0x27, dec);

zaynus
Offline
Зарегистрирован: 18.12.2012

Здравствуйте!

Вдохновленный веткой "Светящиеся костюмы" http://arduino.ru/forum/proekty/svetyashchiesya-upravlyaemye-kostyumy?page=1

решил собрать подобное чудо.

Железо: 2 Уно + 2 NRF24 + midi развязка.

Библиотека RF24.

Собираюсь транслировать миди по RF,(приемников в планах несколько)каждый контроллер слушает эфир и ждет свои команды.

Затык в следующем:

"При посыле по миди полноценной многодорожечной композиции данные транслируются несколько секунд, затем 

перестают до принудительного сброса контроллера читающего midi c software serial"

Если просто нажимать клавишу миди(человеком и как можно чаще), то все долетает.

читаю данные так(образно).имеющийся в наличии софтовый миди контроллер(синтезатор), который смог играть на моей звуковушке

при нажатии кнопки миди кидает в сериал 3 байта

midisend.y=(midiserial.read)

midisend.w=(midiserial.read) 

midisend.z=(midiserial.read)

radioStartwrite(&midisend)

Вопрос в том, может ли принципе посылаться такой объем midi данных по RF или может чтото неправильно?

 

 

zaynus
Offline
Зарегистрирован: 18.12.2012

Проблема решена в своем скетче я использовал radio.StartWrite

после замены на radio.Write затыки прекратились.

void loop()
{
 if (Serial1.available()) { 
     byte S = Serial1.read();
  byte T = Serial1.read();
  byte Y = Serial1.read();
 midisend.S = S;
midisend.T = T;
midisend.Y = Y;
   radio.flush_tx();
  radio.write( &midisend, sizeof(midisend) );
 

 

SergAG
Offline
Зарегистрирован: 22.12.2012

Подскажите, пожалуйста, на какое расстояние от контроллера (Мега) можно выкинуть на кабеле платку nrf24l01? Идеально на плоском шлейфе, но можно на витой паре. На витухе 8 жил, в радио пользуем семь. Понятно, что на пинах питания прямо на плате вешаем конденсаторы. А то у меня контроллер полива спрятан в гермобоксе на уровне земли, а пульт на штанге стоит на высоте порядка 1,2-1,4м. По радио контроллер вяжется с сервером, получает команды. Не хочу создавать проблем со связью.

Casper17
Offline
Зарегистрирован: 21.06.2013

Подскажите, можно ли заставить эти модули работать на расстонии не более 50см а то и меньше? Или подскажите какие трансивер подойдйт для данного решения! Спасибо.

Yarik.Yar
Offline
Зарегистрирован: 07.09.2014

 

Нет, что вы, они работают только на расстоянии >500км с передачей пакетов в нуль-пространство по протоколу "земля-воздух-земля"....Дёшево и сердито для расстояний <1 метра - китайские передатчики на 433 МГц, на Али доллар за пару

 

Casper17
Offline
Зарегистрирован: 21.06.2013

Мне именно нужен трансивер(приемо-передатчик), а не отдельно приемник и передатчик! И юмор Ваш тут не уместен! Можно ли за счет питания и настройки регистров(чувствительность, мощность и скорость) настроить их на короткое расстояние, что бы дальше чем 50см они уже не работали.

trembo
trembo аватар
Offline
Зарегистрирован: 08.04.2011

На юморной вопрос и ответы будут соответствующие.
Вам надо чтобы не подслушали?

Поместите ваши передатчики в металлическую трубу длиной 50 сантиметров, заварите концы  и  получите необходимую дальность.
Накройте металлическим колпаком с теми-же размерами.
Используйте инфраред прямой наводкой.
TOSLINK.

SergAG
Offline
Зарегистрирован: 22.12.2012

Ээээ... какое оживление, я думал, тема померла. А мой вопрос не такой прикольный? По поводу того, на какое расстояние можно выкинуть платку радио на кабеле?