Часть первая, теоретическая.
Для теории нам нужно: 2 ардуины нано,уно и вообще любых с подключенными к ним модулями NRF, сделано все точно так как у Гайвера в примерах.
Если вы внимательно смотрели его видео, то знаете, что связь на разных каналах осуществляться с разным качеством, поэтому первое, что я сделал так это озадачился выбором канала.
Та-дам! вот 2 скетча, котороые помогут вам это сделать.
Один из них (приемник), будет получать данные от другого (передатчика) по всем каналам диапазона и считать кол-во удачных попыток. Время это займет прилично, но при желании можно сделать еще дольше )
Можно немного настроить , изменив вот эту часть:
StartCH - с этого канала начнется сканирование
EndCH - этим каналом закончится все
ChTime время в секундах на примем - передачу на одном канале. как не трудно посчитать полное время будет более 6.5 минут
Все эти параметры в обоих скетчах должны быть идентичны!
Важный параметр!
const int StartTime = 2;
это время "отступа" начала от запуска ардуины. в одном скетче у меня стоит 1, в другом 2. Это значит тот скетч, который имеет большее значение StartTime надо запустить первым. Легкая рассинхронизация допускается )
Я был немного озадачен результатами, были выявлены каналы, на которых приме и передача вообще не осуществлялись. Но выбор всегда есть.
Продолжение скоро..
Для теории нам нужно: 2 ардуины нано,уно и вообще любых с подключенными к ним модулями NRF, сделано все точно так как у Гайвера в примерах.
Если вы внимательно смотрели его видео, то знаете, что связь на разных каналах осуществляться с разным качеством, поэтому первое, что я сделал так это озадачился выбором канала.
Та-дам! вот 2 скетча, котороые помогут вам это сделать.
Один из них (приемник), будет получать данные от другого (передатчика) по всем каналам диапазона и считать кол-во удачных попыток. Время это займет прилично, но при желании можно сделать еще дольше )
Можно немного настроить , изменив вот эту часть:
C++:
const int StartCH = 0;
const int EndCH = 127;
const int ChTime = 3;
const int StartTime = 2;
EndCH - этим каналом закончится все
ChTime время в секундах на примем - передачу на одном канале. как не трудно посчитать полное время будет более 6.5 минут
Все эти параметры в обоих скетчах должны быть идентичны!
Важный параметр!
const int StartTime = 2;
это время "отступа" начала от запуска ардуины. в одном скетче у меня стоит 1, в другом 2. Это значит тот скетч, который имеет большее значение StartTime надо запустить первым. Легкая рассинхронизация допускается )
Передающий модуль:
Принимающий модуль:
C++:
#include <SPI.h>
#include "nRF24L01.h"
#include "RF24.h"
RF24 radio(9, 10); // "создать" модуль на пинах 9 и 10 Для Уно
byte address[][6] = {"1Node", "2Node", "3Node", "4Node", "5Node", "6Node"};
const int StartCH = 0;
const int EndCH = 127;
const int ChTime = 3;
const int StartTime = 2;
bool f = true;
int cc = -1;
int rxdata[128];
byte counter;
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
radio.begin(); //активировать модуль
radio.setAutoAck(1);
radio.setRetries(0, 15);
radio.enableAckPayload();
radio.setPayloadSize(32);
radio.openReadingPipe(1, address[0]);
radio.setPALevel (RF24_PA_MAX);
radio.setDataRate (RF24_2MBPS); //скорость обмена. На выбор RF24_2MBPS, RF24_1MBPS, RF24_250KBPS
radio.powerUp();
radio.stopListening();
}
void loop() {
// put your main code here, to run repeatedly:
byte pipeNo, gotByte;
unsigned long t = millis();
int chanel = (t - StartTime * 1000) / (ChTime * 1000);
//Serial.println(chanel);
if (f) {
if (chanel == EndCH) {
f = false;
}
if ((chanel >= StartCH) and (chanel <= EndCH)) {
if (cc != chanel) {
Serial.print("End TX "); Serial.print(cc); Serial.print(", start TX "); Serial.println(chanel);
cc = chanel;
radio.powerDown();
radio.setChannel(chanel);
radio.powerUp();
radio.stopListening();
}
//!
if ( radio.write(&counter, 1) ) { //отправляем значение counter
if (!radio.available()) { //если получаем пустой ответ
//Serial.print("Empty, "); Serial.print(" Time: "); Serial.print(micros() - last_time); Serial.println(" microseconds"); Serial.println();
rxdata[chanel]++;
}
} else {
while (radio.available() ) { // если в ответе что-то есть
radio.read( &gotByte, 1 ); // читаем
//Serial.print("Anser: "); Serial.print(gotByte); Serial.print(" Time: "); Serial.print(micros() - last_time); Serial.println(" microseconds"); Serial.println();
//counter++;
rxdata[chanel]++;
}
}
delay(50);
//!
}
}
else
{
if (chanel == (EndCH + 1))
{
for (int i = StartCH; i < EndCH; i++) {
Serial.print(i);Serial.print("=");Serial.println(rxdata[i]);
}
delay(1000 * (ChTime + 1));
}
}
}
C++:
#include <SPI.h>
#include "nRF24L01.h"
#include "RF24.h"
RF24 radio(9, 10);
byte address[][6] = {"1Node", "2Node", "3Node", "4Node", "5Node", "6Node"};
const int StartCH = 0;
const int EndCH = 127;
const int ChTime = 3;
const int StartTime = 1;
bool f = true;
int cc = -1;
int rxdata[128];
void setup() {
Serial.begin(9600);
radio.begin(); //активировать модуль
radio.setAutoAck(1);
radio.setRetries(0, 15);
radio.enableAckPayload();
radio.setPayloadSize(32);
radio.openReadingPipe(1, address[0]);
radio.setPALevel (RF24_PA_MAX);
radio.setDataRate (RF24_2MBPS); //скорость обмена. На выбор RF24_2MBPS, RF24_1MBPS, RF24_250KBPS
//radio.powerUp()
}
void loop() {
byte pipeNo, gotByte;
unsigned long t = millis();
int chanel = (t - StartTime * 1000) / (ChTime * 1000);
//Serial.println(chanel);
if (f) {
if (chanel == EndCH) {
f = false;
}
if ((chanel >= StartCH) and (chanel <= EndCH)) {
if (cc != chanel) {
Serial.print("End RX "); Serial.print(cc); Serial.print(", start RX "); Serial.println(chanel);
cc = chanel;
radio.stopListening();
radio.setChannel(chanel);
radio.startListening();
}
while ( radio.available(&pipeNo)) { // слушаем эфир со всех труб
radio.read( &gotByte, sizeof(gotByte) ); // чиатем входящий сигнал
rxdata[chanel]++;
}
}
}
else
{
if (chanel == (EndCH + 1))
{
for (int i = StartCH; i < EndCH; i++) {
Serial.print(i);Serial.print("=");Serial.println(rxdata[i]);
}
delay(1000 * (ChTime + 1));
}
}
}
Я был немного озадачен результатами, были выявлены каналы, на которых приме и передача вообще не осуществлялись. Но выбор всегда есть.
Продолжение скоро..