Geen verbinding tussen NRF24l01 transceivers.

Goedemiddag,

Met mijn eerste post op het arduino dump ik gelijk ook mijn eerste vraag en een beknopte samenvatting.
Ik ben al jaren in de weer met arduino, voornamelijk met mysenors.
Normaliter doe ik niet veel meer als een bestaande sketch ombouwen tot iets wat ik nodig heb.

Zo ook met dit project.
Ik ben een graafmachine aan het bouwen vanaf 0 dus ook mechanisch.
Onderdelen heb ik geprint en de aansturing gaat via een arduino.
Nu ben ik al zover gekomen dat mijn arduino nano als simpel doorgeefluik functioneerd dus pot-meterstand ->servo positie.
redelijk rechttoe rechtaan en met servo library ook niet moeilijk.

Nu de volgende stap waar mijn problemen komen.
Ik wil het draadloos hebben.
ik heb hier thuis nog een stapel aan componenten liggen waar ik dit prima mee zou kunnen doen.

Momenteel gebruik ik een Mega 2560 als zender device
En een nano (old bootloader)als receiver.
De NRF24L01 transceivers heb ik op beide boards op dezelfde pin bezetting aangeloten

Vcc 3.3v
GND GND
CE 9
CS 10
SCK 13
MOSI 11
MISO 12

Op de Mega gebruik ik pin A0 t/m A5 een potmeter
En op de Nano zijn servo's aangesloten van pin D2 tm/ D7

Momenteel gebruik ik de volgende sketches

Voor de receiver (Nano)

//----------------------Program Developed by R.Girish------------------------//
#include <nRF24L01.h>
#include <RF24.h>
#include<SPI.h>
#include<Servo.h>
RF24 radio(9, 10);
const byte address[6] = "00001";
Servo servo1;
Servo servo2;
Servo servo3;
Servo servo4;
Servo servo5;
Servo servo6;
int angle1 = 0;
int angle2 = 0;
int angle3 = 0;
int angle4 = 0;
int angle5 = 0;
int angle6 = 0;
char input[32] = "";
const char var1[32] = "Servo1";
const char var2[32] = "Servo2";
const char var3[32] = "Servo3";
const char var4[32] = "Servo4";
const char var5[32] = "Servo5";
const char var6[32] = "Servo6";
void setup()
{
  Serial.begin(9600);
  servo1.attach(2);
  servo2.attach(3);
  servo3.attach(4);
  servo4.attach(5);
  servo5.attach(6);
  servo6.attach(7);
  radio.begin();
  radio.openReadingPipe(0, address);
  radio.setChannel(100);
  radio.setDataRate(RF24_250KBPS);
  radio.setPALevel(RF24_PA_MAX);
  radio.startListening();
}
void loop()
{
  delay(5);
  while (!radio.available());
  radio.read(&input, sizeof(input));
  if ((strcmp(input, var1) == 0))
  {
    while (!radio.available());
    radio.read(&angle1, sizeof(angle1));
    servo1.write(angle1);
    Serial.println(input);
    Serial.print("Angle:");
    Serial.println(angle1);
    Serial.println("--------------------------------");
  }
  else if ((strcmp(input, var2) == 0))
  {
    while (!radio.available());
    radio.read(&angle2, sizeof(angle2));
    servo2.write(angle2);
    Serial.println(input);
    Serial.print("Angle:");
    Serial.println(angle2);
    Serial.println("--------------------------------");
  }
  else if ((strcmp(input, var3) == 0))
  {
    while (!radio.available());
    radio.read(&angle3, sizeof(angle3));
    servo3.write(angle3);
    Serial.println(input);
    Serial.print("Angle:");
    Serial.println(angle3);
    Serial.println("--------------------------------");
  }
  else if ((strcmp(input, var4) == 0))
  {
    while (!radio.available());
    radio.read(&angle4, sizeof(angle4));
    servo4.write(angle4);
    Serial.println(input);
    Serial.print("Angle:");
    Serial.println(angle4);
    Serial.println("--------------------------------");
  }
  else if ((strcmp(input, var5) == 0))
  {
    while (!radio.available());
    radio.read(&angle5, sizeof(angle5));
    servo5.write(angle5);
    Serial.println(input);
    Serial.print("Angle:");
    Serial.println(angle5);
    Serial.println("--------------------------------");
  }
  else if ((strcmp(input, var6) == 0))
  {
    while (!radio.available());
    radio.read(&angle6, sizeof(angle6));
    servo6.write(angle6);
    Serial.println(input);
    Serial.print("Angle:");
    Serial.println(angle6);
    Serial.println("--------------------------------");
  }
}
//----------------------Program Developed by R.Girish------------------------//

En voor de zender (Mega 2560)

#include <nRF24L01.h>
#include <RF24.h>
#include<SPI.h>
RF24 radio(9, 10);
const byte address[6] = "00001";
#define pot1 A0
#define pot2 A1
#define pot3 A2
#define pot4 A3
#define pot5 A4
#define pot6 A5
const int threshold = 20;
int potValue1 = 0;
int potValue2 = 0;
int potValue3 = 0;
int potValue4 = 0;
int potValue5 = 0;
int potValue6 = 0;
int angleValue1 = 0;
int angleValue2 = 0;
int angleValue3 = 0;
int angleValue4 = 0;
int angleValue5 = 0;
int angleValue6 = 0;
int check1 = 0;
int check2 = 0;
int check3 = 0;
int check4 = 0;
int check5 = 0;
int check6 = 0;
const char var1[32] = "Servo1";
const char var2[32] = "Servo2";
const char var3[32] = "Servo3";
const char var4[32] = "Servo4";
const char var5[32] = "Servo5";
const char var6[32] = "Servo6";
void setup()
{
  Serial.begin(9600);
  radio.begin();
  radio.openWritingPipe(address);
  radio.setChannel(100);
  radio.setDataRate(RF24_250KBPS);
  radio.setPALevel(RF24_PA_MAX);
  radio.stopListening();
}
void loop()
{
  potValue1 = analogRead(pot1);
  if (potValue1 > check1 + threshold || potValue1 < check1 - threshold)
  {
    radio.write(&var1, sizeof(var1));
    angleValue1 = map(potValue1, 0, 1023, 0, 180);
    radio.write(&angleValue1, sizeof(angleValue1));
    check1 = potValue1;
    Serial.println("INPUT:1");
    Serial.print("Angle:");
    Serial.println(angleValue1);
    Serial.print("Voltage Level:");
    Serial.println(potValue1);
    Serial.println("----------------------------------");
  }
  potValue2 = analogRead(pot2);
  if (potValue2 > check2 + threshold || potValue2 < check2 - threshold)
  {
    radio.write(&var2, sizeof(var2));
    angleValue2 = map(potValue2, 0, 1023, 0, 180);
    radio.write(&angleValue2, sizeof(angleValue2));
    check2 = potValue2;
    Serial.println("INPUT:2");
    Serial.print("Angle:");
    Serial.println(angleValue2);
    Serial.print("Voltage Level:");
    Serial.println(potValue2);
    Serial.println("----------------------------------");
  }
  potValue3 = analogRead(pot3);
  if (potValue3 > check3 + threshold || potValue3 < check3 - threshold)
  {
    radio.write(&var3, sizeof(var3));
    angleValue3 = map(potValue3, 0, 1023, 0, 180);
    radio.write(&angleValue3, sizeof(angleValue3));
    check3 = potValue3;
    Serial.println("INPUT:3");
    Serial.print("Angle:");
    Serial.println(angleValue3);
    Serial.print("Voltage Level:");
    Serial.println(potValue3);
    Serial.println("----------------------------------");
  }
  potValue4 = analogRead(pot4);
  if (potValue4 > check4 + threshold || potValue4 < check4 - threshold)
  {
    radio.write(&var4, sizeof(var4));
    angleValue4 = map(potValue4, 0, 1023, 0, 180);
    radio.write(&angleValue4, sizeof(angleValue4));
    check4 = potValue4;
    Serial.println("INPUT:4");
    Serial.print("Angle:");
    Serial.println(angleValue4);
    Serial.print("Voltage Level:");
    Serial.println(potValue4);
    Serial.println("----------------------------------");
  }
  potValue5 = analogRead(pot5);
  if (potValue5 > check5 + threshold || potValue5 < check5 - threshold)
  {
    radio.write(&var5, sizeof(var5));
    angleValue5 = map(potValue5, 0, 1023, 0, 180);
    radio.write(&angleValue5, sizeof(angleValue5));
    check5 = potValue5;
    Serial.println("INPUT:5");
    Serial.print("Angle:");
    Serial.println(angleValue5);
    Serial.print("Voltage Level:");
    Serial.println(potValue5);
    Serial.println("----------------------------------");
  }
  potValue6 = analogRead(pot6);
  if (potValue6 > check6 + threshold || potValue6 < check6 - threshold)
  {
    radio.write(&var6, sizeof(var6));
    angleValue6 = map(potValue6, 0, 1023, 0, 180);
    radio.write(&angleValue6, sizeof(angleValue6));
    check6 = potValue6;
    Serial.println("INPUT:6");
    Serial.print("Angle:");
    Serial.println(angleValue6);
    Serial.print("Voltage Level:");
    Serial.println(potValue6);
    Serial.println("----------------------------------");
  }
}
//----------------------Program Developed by R.Girish------------------------//

-Post werd te lang dus moest hem opdelen-

Wat ik zelf al heb gedaan Is

  • beide NRF24L01 transceivers uitgewisseld
    -Nano en Mega uitgewisseld en omgewissld (ik heb er meerdere liggen.
    -Alles via een 5V voeding aangesloten en ook de GND
    -Andere NRF24 library gedownload
    -Meerdere soortgelijke sketches geprobeerd en uiteraard deze allemaal aangepast naar pinbezetting.
    -Transceivers getest doormiddel van deze werkwijze link

Wanneer ik de serial monitor open van de zender dan komen de waardes van de potmeter en de angle van de servo voorbij met de vermelding dat deze verstuurd worden.

Als ik de serial monitor open van de receiver open word er niks weergegeven.

Ik ben nu dus het einde een beetje zoek.
Alles functioneerd, ik het kloppende sketches, echter het werkt niet.

Mijn kennis schort nu gewoon om er dieper in te duiken de fout te kunnen ontdekken.
Dus alle hulp is welkom, en mocht ik iets vergeten zijn te vertellen let me know.

Sketch is trouwens afkomstig van Link en ik gebruik arduino IDE 1.8.13

Alvast bedankt

Mijn eerste reactie is versimpelen. Sloop eens 99% eruit en probeer gewoon eens een vaste waarde periodiek te verturen en aan de andere kant te printen. Pas als dat werkt kan je hem gaan uitbouwen.

PS Tipje als je dat gaat doen, array's :wink:

Wow dat was een snelle reactie, die had ik niet verwacht.

Ik heb niet alles beschreven wat ik al gedaan heb.
Maar dat is natuurlijk wel waar ik begonnen ben, van de ene arduino naar de andere arduino "hello world"te printen.
Nu zal ik eerlijk bekkennen dat het hele draadloze verhaal voor mij een paar stappen te ver is. Ik snap niet zo goed wat er in de NR24.h file gebeurt. ik kan het lezen maar snappen doe ik niet. (te complex ofzo)

Daarom is voor mij het werken met array's nog niet weggelegd, ik raak daarin het overzicht kwijt.
Vandaar dat ik het geleende script wat ik gebruikt heb ook fijn vind,omdat daarin voluit alles uitgeschreven staat.
En ik bij elke regel tekst begrijp wat er bedoeld word.

Ik heb ditzelfde script ook vereenvoudigt naar 1 servo en 1 potmeter, het enige resultaat/conclusie die ik daaruit krijg is dat de servo pins wel goed aangestuurd worden.

Wanneer ik de servo fysiek loskoppel en weer aankoppel springt hij naar een vaste positie.
Als ik deze aan een pin koppel die niet als servo pin geprogrameert is dan doet hij niks.
Kortom de pins zijn wel goed toegewezen.

Kortom dit project ligt een paar stappen boven mijn eigen kennis niveau, maar eenmaal eraan begonnen moet ik het wel afmaken.... :wink:

wat is het verschil tussen hello world enjouw programma, kijk eens naar de adressen, en de wijze van opsturen, zoals is het een heel verhaal, met allerlei waardes, of doe je pin1, waarde, pin2 waarde.....

Hey dankjewel voor je reactie.

Het verschil in beide programma's is dat ik mijn "tekstverzender" zelf gemaakt heb aan de hand van tutorials en deze 2 sketches m.u.v. pin bezetting 1op1 heb gekopieerd van het internet

De adressen kloppen sent adres van de een is het receive adres van de ander en viceversa.

Punt blijft dat beide sketches de RF24.h en NRF24L01.h library gebruiken en ik daarvan gewoon nog niet snap hoe het precies in zijn werk gaat.

Buiten het feit dat ik er gewoon te weinig van snap, zouden dit 2 functionerende sketches moeten zijn.
En alles wat ik lees klopt ook. adressen/pin attachements/ namen etc.

Ik snap daarom niet dat mijn ontvangende (nano) arduino helemaal niks doet.
Ik krijg geen terug koppeling in mijn serial monitor. terwijl mijn zendende arduino aangeeft dit wel te versturen.

Ik gok dus dat ik het in de library's moet zoeken. maar ook daarvan lijkt het mij sterk dat ze niet kloppen.
Aangezien ik de hardware al allemaal getest heb en uitgesloten heb op fouten moet het ergens in mijn sketches zitten.
Maar waar?

Momenteel gebruik ik een Mega 2560 als zender device
En een nano (old bootloader)als receiver.
De NRF24L01 transceivers heb ik op beide boards op dezelfde pin bezetting aangeloten

Vcc 3.3v
GND GND
CE 9
CS 10
SCK 13
MOSI 11
MISO 12

Pinnen 11, 12 en 13 op de Mega zijn niet de SPI pinnen !!

sterretje:
Pinnen 11, 12 en 13 op de Mega zijn niet de SPI pinnen !!

Ga ik morgen eens goed naar kijken, dat is een onderdeel waar ik inderdaad nog niet naar gekeken had.
Heb de hele setup echter ook met 2 nano's geprobeert en dat gaf exact dezelfde resultataen.

j-jk:
Heb de hele setup echter ook met 2 nano's geprobeert en dat gaf exact dezelfde resultataen.

Dat heb ik misschien gemist.

Ik weet dat toen ik met nRF modules begon, ik ook grote problemen had en ze eigenlijk in the prullenbak wilde gooien. Later weer eens geprobeerd gebaseerd op Robin2's Simple nRF24L01+ 2.4GHz transceiver demo en het uiteindelijk aan het werk gekregen; geen idee meer wat er verkeerd was.

Dan langzaam de volgende stap nemen, niet alles tegelijk. Dus een enkel ding toevoegen en kijken of het nog werkt. Als je van board wissels zou ik weer terug gaan naar "hello world" om iig de hardware uit te sluiten.

Op een UNO zit maar 1 serieel kanaal op een mmega zitten er wel drie.

Dankjullie allemaal voor de hulp tot dusver.
In de tussentijd jammer genoeg niks opgeschoten door wat omstandigheden.
En die omstandigheden gaan ook nog wel even duren.

Ik wil niet overkomen als iemand die een vraag stelt en vervolgens nooit meer terugkomt/reageert.
Dus bij deze.

Topic kan in principe open blijven want mijn probleem is nog niet opgelost, en tegen de tijd dat dat het wel is laat ik het hier ook weten.

cheers!!

This topic was automatically closed 120 days after the last reply. New replies are no longer allowed.