6 LED über NRF24L01 steuern

Hallo Leute,
Mal wieder ein Anfänger der sich weit raus wagt.
Ich habe schon einige Sketche für mein RC-Car gebastelt, wie Licht, Bremslichter, Rückfahrscheinwerfer, Blinker bei Lenkbewegung ..... usw.
Nun möchte ich mein Licht per Schalter über zwei miteinander verbundene NRF24l01 WiFi schalten.
Ich habe schon die Module verbunden. Mit einer LED/Schalter geht es sehr gut, mit 3 Geht's auch noch, mit 6 geht kaum noch was.
1-3 blinken nur noch und 4-6 leuchten ständig.
Ändere ich den Sketch auf 1-3 läuft es gut und auch 4-6 läuft. Füge ich 4-6 dem Sketch von 1-3 hinzu bekomme ich oben genanntes Problem.
Hat jemand eine spontane Idee?
Ich werde morgen mal versuchen den Sketch hoch zu laden, dann kann man vielleicht mehr erkennen.
Danke schon einmal für Eure Hilfe

suzukirv90:
Ändere ich den Sketch auf 1-3 läuft es gut und auch 4-6 läuft. Füge ich 4-6 dem Sketch von 1-3 hinzu bekomme ich oben genanntes Problem.
Hat jemand eine spontane Idee?

Zeitverschwendung, sprich Pausen, durch delays oder Code in sich selbst drehenden Schleifen, Bedingungen die nicht erreicht werden.
Da gibts ne Menge.

Ich werde morgen mal versuchen den Sketch hoch zu laden, dann kann man vielleicht mehr erkennen.

Au ja...

hallo Suzuki,

ohne sketch geht gar nichts.
Die Programmierung die das Bremslicht macht ist das der microcontroller mit dem RC-Empfänger verbunden?
Hast du auf der Fernsteuerung noch einen Kanal frei?

Die Beschreibung ist unpräzise. Was heißt "mein Licht"

  • die zuvor beschriebenen Sachen wie Bremslicht, Blinker?
    -Die Beleuchtung von deiner Fahrstrecke?
  • Frontscheinwerfer?

Was bedeutet "das geht kaum noch was" ? soll das Licht blinken und es blinkt zu langsam
ist "das Licht" zu dunkel?
dauert es ewig bis es sich einschaltet?

Kurzum:

  • Beschreibe präzise und im Detail wie dein Aufbau ist
  • Beschreibe präzise und im Detail wie es funktionieren soll
  • Beschreibe präzise und im Detail was du beim Testen beobachtest

vgs

Was ist mit Deinem Thema "Monitorabfrage"?

Wenn Du keine Rückmeldung gibst, tendiert meine Bereitschaft, Dir zu helfen, gegen Null.

my_xy_projekt:
Zeitverschwendung, sprich Pausen, durch delays oder Code in sich selbst drehenden Schleifen, Bedingungen die nicht erreicht werden.
Da gibts ne Menge.
Au ja...

du hast die IF_Schleife vergessen :o

Hallo, hier die Sketche von Sender und Empfänger, es geht auch erst einmal nur um die Schaltung der 6 LED´s.

//  2,4 GHz NRF24 Modul Sender
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>

RF24 radio(9, 10); 
const byte address[6] = "00001"; 
boolean button_state1 = 0;
boolean button_state2 = 0;
boolean button_state3 = 0;
boolean button_state4 = 0;
boolean button_state5 = 0;
boolean button_state6 = 0;

const int button_pin1 = A1; 
const int button_pin2 = 2;
const int button_pin3 = 3;
const int button_pin4 = 4; 
const int button_pin5 = 5;
const int button_pin6 = 6;
void setup()
{
Serial.begin(9600);
pinMode(button_pin1, INPUT);
pinMode(button_pin2, INPUT);
pinMode(button_pin3, INPUT);
pinMode(button_pin4, INPUT);
pinMode(button_pin5, INPUT);
pinMode(button_pin6, INPUT);
radio.begin(); 
radio.openWritingPipe(address); 
radio.setPALevel(RF24_PA_HIGH);
radio.stopListening(); 
}
void loop()
{
 {
  button_state1 = digitalRead(button_pin1); 
  if (button_state1 ==HIGH) 
   {
   digitalWrite(button_pin1, HIGH);
   }
   else 
   {
    digitalWrite(button_pin1, LOW);
   }
  }
  
 {
  button_state2 = digitalRead(button_pin2);
  if (button_state2 ==HIGH) 
   {
   digitalWrite(button_pin2, HIGH);
   }
   else 
   {
    digitalWrite(button_pin2, LOW);
   }
  }
  
 {
  button_state3 = digitalRead(button_pin3); 
  if (button_state3 ==HIGH) 
   {
   digitalWrite(button_pin3, HIGH);
   }
   else 
   {
   digitalWrite(button_pin3, LOW);
   }
  }
  
 {
  button_state4 = digitalRead(button_pin4); 
  if (button_state4 ==HIGH) 
   {
   digitalWrite(button_pin4, HIGH);
   }
   else 
   {
   digitalWrite(button_pin4, LOW);
   }
  }
  
 {
  button_state5 = digitalRead(button_pin5); 
  if (button_state5 ==HIGH) 
   {
   digitalWrite(button_pin5, HIGH);
   }
   else 
   {
   digitalWrite(button_pin5, LOW);
   }
 }  

 {
   button_state6 = digitalRead(button_pin6);
   if (button_state6 ==HIGH) 
   {
   digitalWrite(button_pin6, HIGH);
   }
   else 
   {
   digitalWrite(button_pin6, LOW);
   }
 }
  
radio.write(&button_state1, sizeof(button_state1)); 
radio.write(&button_state2, sizeof(button_state2));
radio.write(&button_state3, sizeof(button_state3));
radio.write(&button_state4, sizeof(button_state4));
radio.write(&button_state5, sizeof(button_state5));
radio.write(&button_state6, sizeof(button_state6));
delay(50); 
}

und der Emfänger

// 2,4 GHz Modul Empfänger
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>

RF24 radio(9, 10);
const byte address[6] = "00001";
boolean button_state1 = 0;
boolean button_state2 = 0;
boolean button_state3 = 0;
boolean button_state4 = 0;
boolean button_state5 = 0;
boolean button_state6 = 0;
const int led_pin1 = A1;
const int led_pin2 = 2;
const int led_pin3 = 3;
const int led_pin4 = 4;
const int led_pin5 = 5;
const int led_pin6 = 6;


void setup()
{
pinMode(A1, OUTPUT);
pinMode(2, OUTPUT);
pinMode(3, OUTPUT);
pinMode(4, OUTPUT);
pinMode(5, OUTPUT);
pinMode(6, OUTPUT);
Serial.begin(9600);
radio.begin();
radio.openReadingPipe(0, address); 
radio.setPALevel(RF24_PA_MAX); 
radio.startListening(); 
Serial.println("gestartet");
}

void loop()
{
  if (radio.available()) 
 {
  Serial.println("empfange!");
  {
  radio.read(&button_state1, sizeof(button_state1)); 
  if(button_state1 ==HIGH)
  {
  digitalWrite(A1, LOW);
  }
  else
  {
  digitalWrite(A1, HIGH);
  }
 }

 {
 radio.read(&button_state2, sizeof(button_state2));

  if(button_state2 ==HIGH)
  {
  digitalWrite(2, LOW);
  }
  else
  {
  digitalWrite(2, HIGH);
  }
 }

 {
  radio.read(&button_state3, sizeof(button_state3)); 
  if(button_state3 ==HIGH)
  {
  digitalWrite(3, LOW);
  }
  else
  {
  digitalWrite(3, HIGH);
  }
 }

 {
  radio.read(&button_state4, sizeof(button_state4)); 
  if(button_state4 ==HIGH)
  {
  digitalWrite(4, LOW);
  }
  else
  {
  digitalWrite(4, HIGH);
  }
 }

 {
  radio.read(&button_state5, sizeof(button_state5));
  if(button_state5 ==HIGH)
  {
  digitalWrite(5, LOW);
  }
  else
  { 
  digitalWrite(5, HIGH);
  }
  
 }

 {
  radio.read(&button_state6, sizeof(button_state6)); 
  if(button_state6 ==HIGH)
  {
  digitalWrite(6, LOW);
  }
  else
  {
  digitalWrite(6, HIGH);
  }
 }

}
delay(50);
}

Danke!

????
Da ist nirgendwo ein Output definiert.

Was willst Du hiermit erreichen? Das ist Unsinn.

  button_state1 = digitalRead(button_pin1);
  if (button_state1 ==HIGH)
   {
   digitalWrite(button_pin1, HIGH);
   }
   else
   {
    digitalWrite(button_pin1, LOW);
   }
  }

umgeschrieben macht das genau das selbe:

  if (digitalRead(button_pin1))
   {digitalWrite(button_pin1, HIGH);}
   else
   {digitalWrite(button_pin1, LOW);}

Also nochmal.

Und was bitte, hat dein Sketch/Projekt mit WiFi zu tun ?
Ich sehe da keine Anbindung an WiFi.

digitalWrite(button_pin1, digitalRead(button_pin1));

macht auch das gleiche, nämlich nix.

Was sollte es den machen?

Ich habe es mir so gedacht, der Sender erfasst button_state1 und sendet diesen als HIGH an der Empfänger. Der Empfänger setzt dann bei button_state1 HIGH den Ausgang A1 auf LOW
radio.read(&button_state1, sizeof(button_state1));
if(button_state1 ==HIGH)
{
digitalWrite(A1, LOW);
}
else
{
digitalWrite(A1, HIGH);
}
}

Und was genau soll dein Sender senden ?
Gerne nochmal, ich sehe kein WiFi, also darfst du auch da gerne eine Antwort schreiben.

HotSystems:
Ich sehe da keine Anbindung an WiFi.

Ich schon: EDIT: Funk ja, WiFi nein.

RF24 radio(9, 10); // CE, CSN

ElEspanol:
Was sollte es denn machen?

Oder so:

digitalWrite(A1, !button_state1);

Moin
zerleg Dein Projekt am Besten, nach dem EVA-Prinzip, in Aufagben, die du einzeln abarbeiten und testen kannst:
E=Eingabe -> Blinker(AN-AUS-BLINKEN) - Scheinwerfer(AN-AUS-BLINKEN) - Rückfahrscheinwerfer(AN-AUS-BLINKEN) usw....
V= Verarbeitung -> AN-AUS-BLINKEN
A= Ausgabe -> LED ansteuern

agmue:
Ich schon:

RF24 radio(9, 10); // CE, CSN

Das ist ganz "ordinärer" Funk, aber kein Wifi, welches einer vorgegebenen "Norm" entsprechen sollte.

Ich hab mal codetgs benutzt.

suzukirv90:

 radio.read(&button_state1, sizeof(button_state1));

if(button_state1 ==HIGH)

Dein vorhin geposteter Code ist was anderes.

Wenn Du etwas senden willst und das auf der anderen Seite einer bestimmten Variable zuordnen willst, kannst Du entweder
a) alle Sender-Variablen in einem Rutsch - also immer ein Paket mit selber Länge dessen
b) eine Sender-Variable mit einem eindeutigen Merklmal
senden.
Du versuchst da oben irgendwas zu empfangen - wenn Du ein Paket verlierst, geht die Reihenfolge verloren und ordnest den nächsten gesendeten Teil einer anderen Empfangsvariablen zu.

HotSystems:
Das ist ganz "ordinärer" Funk, aber kein Wifi, welches einer vorgegebenen "Norm" entsprechen sollte.

Moin,
das ging auch schon aus dem ersten Post hervor - da stand schon, das es RF ist.
Bei ARDUINO leg ichs auch auf die Goldwaage - wie auch einige andere hier - aber mittlerweile ist ja alles was nicht UKW ist: wifi :wink:

Frohe Weihnachten!

Danke, dann werde ich mich noch einmal von vorne damit beschäftigen, ich finde nur gerade keinen Ansatz. Vielleicht ist das Projekt auch etwas zu hoch für einen Anfänger. Die Freude über das schon erreichte (Lichtsteuerung) war wohl zu groß und hat meine Selbsteinschätzung getrübt.
Für das WiFi muss ich mich dann wohl entschuldigen, wurde aber so angeboten.
Ich danke Euch für Eure Hilfe!

my_xy_projekt:
Moin,
das ging auch schon aus dem ersten Post hervor - da stand schon, das es RF ist.
Bei ARDUINO leg ichs auch auf die Goldwaage - wie auch einige andere hier - aber mittlerweile ist ja alles was nicht UKW ist: wifi :wink:

Deswegen sollte man auch den Titel anpassen, das irritiert.

suzukirv90:
ich finde nur gerade keinen Ansatz.

Naja, der Ansatz ist einfach in den Beispielen der zugehörigen lib's nachzusehen, wie und was die machen.
Nur eben nicht copy & paste machen und glauben, das der Compiler das schon kann und daraus was macht, was Du verwenden lannst.

Als erstes bau Dir ein Board auf, was später Sender werden soll.
Mache einen Taster auf einen Pin,
Gebe bei gedrükter Taste die Meldung "taste gedrückt" auf dem seriellen Monitor aus
Jetzt erweiter das in der Software so, das die Meldung nur einmal(!) ausgegeben wird, solange die Taste gedrückt ist.

Wenn das funktioniert, häng das RF mit ran und bau das so, das gleichzeitig mit der Meldung auf dem Monitor ein Signal zum Senden erzeugt wird.

Jetzt bau den Empfänger
Las Dir nur anzeigen, das Du das Signal - und zwar wirklich nur das Signal - empfängst.

Wenn das funktioniert, mach Dir Gedanken, wie Du ein weiteres Signal unterscheiden möchtest.
Wenns klemmt, komm wieder und zeig was Du hast.
Beschreibe genau was wie nicht Deinen Vorstellungen entspricht.

Hey hey
wer wird dann hier so schnell den oder die Arduinos, in diesem Projekt sind das ja zwei, ins Korn werfen?
Starte auf Deinem PC zweimal das Arduino IDE und spiele, aus diesem Tutorial, ein bißchen mit dem Sender, auf Arduino 1, und dem Empfänger, auf dem Arduino 2. Mit diesem Aufbau kannst du einprüfen, ob Deine Hardware richtig verdrahtet ist und dann du kannst Dir einen Satz von Steuerkommandos überlegen. Dabei mach es dir so einfach wie möglch, z.B. eine übertragende '0' -> alles aus, eine übertragende '1' -> Licht einschalten, eine übertragende '2' -> Licht ausschalten, usw. Im ersten Schritt brauchste noch keine Taster für die Eingabe der Steuerkommandos, da langt die Eingabe über die Tastatur am IDE. Ich guck nachher mal nach einer einfachen Tastatur-Schnittstelle, die du zum Testen verwenden kannst, ok ?

p.s. müssen unbedingt die nRF24L01-WiFi Module eingestzt werden? Das HC-12 Funkmodul läßt sich sehr gut, auch ohne Verwendung von Biblioteken, in ein Projekt integieren.