und hier der Link zum HC-12 Funkmodul
paulpaulson:
und hier der Link zum HC-12 Funkmodul
Und warum dass ?
Da der TO Anfänger ist und er sich gerade mit den NRF24L01 beschäftigt, sollte man ihne nicht auch och mit anderen Teilen verwirren. Einfacher wird das dadurch ganz sicher nicht.
Außer du steuerst ihm ein komplett funktionierendes Beispiel bei.
Vielen Dank an paulpaulson für die aufmunternden Worte, aber ich war etwas frustriert weil ich irgendwie in der Sackgasse steckte. Vielleicht ist das Forum hier auch nicht für Anfängerfragen geeignet, Ihr seit da wohl schon um Längen voraus.
Meine Verbindung ist stabil, die Stromversorgung auch. Ich habe alle Kondensatoren und Wiederstände verbaut.
Ich habe viel gelesen und probiert. Ich bin jetzt schon für mich Anfänger bei einem sehr respektablen Ergebnis. Ich habe die Schalter gesammelt und sende 1=1 bzw. 0, 2=1 bzw. 0 usw.
Das funktioniert auch schon super bis 6 Kanäle erreicht sind, Kanal 7 und 8 werden am seriellen Monitor als 0 angezeigt, kommen aber im Empfänger als 1 an. Vielleicht hat Jemand eine Idee? Habe ich irgendwo eine Datenmenge überschritten?
Code:
//NRF24 Moduls Sender
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
const uint64_t pipe = {0xB3B4B5B605LL};
RF24 radio(9, 10);
//int schalt[6];
int schalt[8];
int schalter1 =2;
int schalter2 =3;
int schalter3 =4;
int schalter4 =5;
int schalter5 =6;
int schalter6 =7;
int schalter7 =8;
int schalter8 =A1;
void setup() {
Serial.begin(9600);
radio.begin();
radio.openWritingPipe(pipe);
radio.stopListening();
Serial.println("gestartet");
pinMode(schalter1,INPUT);
pinMode(schalter2,INPUT);
pinMode(schalter3,INPUT);
pinMode(schalter4,INPUT);
pinMode(schalter5,INPUT);
pinMode(schalter6,INPUT);
pinMode(schalter7,INPUT);
pinMode(schalter8,INPUT);
}
void loop(){
schalt[0] = digitalRead(schalter1);
schalt[1] = digitalRead(schalter2);
schalt[2] = digitalRead(schalter3);
schalt[3] = digitalRead(schalter4);
schalt[4] = digitalRead(schalter5);
schalt[5] = digitalRead(schalter6);
schalt[6] = digitalRead(schalter7);
schalt[7] = digitalRead(schalter8);
radio.write( schalt, sizeof(schalt) );
delay(20);
Serial.print(" 1 = ");
Serial.print(digitalRead(schalter1));
Serial.print(" 2 = ");
Serial.print(digitalRead(schalter2));
Serial.print(" 3 = ");
Serial.print(digitalRead(schalter3));
Serial.print(" 4 = ");
Serial.print(digitalRead(schalter4));
Serial.print(" 5 = ");
Serial.print(digitalRead(schalter5));
Serial.print(" 6 = ");
Serial.print(digitalRead(schalter6));
Serial.print(" 7 = ");
Serial.print(digitalRead(schalter7));
Serial.print(" 8 = ");
Serial.print(digitalRead(schalter8));
}
Code:
//NRF24 Moduls Emfänger
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
const uint64_t pipe = {0xB3B4B5B605LL};
RF24 radio(9, 10);
#define led1 2
#define led2 3
#define led3 4
#define led4 5
#define led5 6
#define led6 7
#define led7 8
#define led8 A1
//int schalt[6];
int schalt[8];
int schalter1;
int schalter2;
int schalter3;
int schalter4;
int schalter5;
int schalter6;
int schalter7;
int schalter8;
void setup() {
Serial.begin(9600);
radio.begin();
radio.openReadingPipe(1,pipe);
radio.startListening();
Serial.println("gestartet");
pinMode(led1, OUTPUT);
pinMode(led2, OUTPUT);
pinMode(led3, OUTPUT);
pinMode(led4, OUTPUT);
pinMode(led5, OUTPUT);
pinMode(led6, OUTPUT);
pinMode(led7, OUTPUT);
pinMode(led8, OUTPUT);
}
void loop() {
if ( radio.available() )
{
radio.read( schalt, sizeof(schalt) );
int schalter1 = schalt[0];
int schalter2 = schalt[1];
int schalter3 = schalt[2];
int schalter4 = schalt[3];
int schalter5 = schalt[4];
int schalter6 = schalt[5];
int schalter7 = schalt[6];
int schalter8 = schalt[7];
if (schalter1 == LOW){
digitalWrite(led1, HIGH);}
else {
digitalWrite(led1, LOW);}
if (schalter2 == LOW){
digitalWrite(led2, HIGH);}
else {
digitalWrite(led2, LOW);}
if (schalter3 == LOW){
digitalWrite(led3, HIGH);}
else {
digitalWrite(led3, LOW);}
if (schalter4 == LOW){
digitalWrite(led4, HIGH);}
else {
digitalWrite(led4, LOW);}
if (schalter5 == LOW){
digitalWrite(led5, HIGH);}
else {
digitalWrite(led5, LOW);}
if (schalter6 == LOW){
digitalWrite(led6, HIGH);}
else {
digitalWrite(led6, LOW);}
if (schalter7 = LOW){
digitalWrite(led7, HIGH);}
else {
digitalWrite(led7, LOW);}
if (schalter8 = LOW){
digitalWrite(led8, HIGH);}
else {
digitalWrite(led8, LOW);}
}
delay(20);
Serial.print(" 1 = ");
Serial.print(digitalRead(schalter1));
Serial.print(" 2 = ");
Serial.print(digitalRead(schalter2));
Serial.print(" 3 = ");
Serial.print(digitalRead(schalter3));
Serial.print(" 4 = ");
Serial.print(digitalRead(schalter4));
Serial.print(" 5 = ");
Serial.print(digitalRead(schalter5));
Serial.print(" 6 = ");
Serial.print(digitalRead(schalter6));
Serial.print(" 7 = ");
Serial.print(digitalRead(schalter7));
Serial.print(" 8 = ");
Serial.print(digitalRead(schalter8));
}
suzukirv90:
Vielleicht ist das Forum hier auch nicht für Anfängerfragen geeignet, Ihr seit da wohl schon um Längen voraus.
Du irrst!
Das funktioniert auch schon super bis 6 Kanäle erreicht sind, Kanal 7 und 8 werden am seriellen Monitor als 0 angezeigt, kommen aber im Empfänger als 1 an. Vielleicht hat Jemand eine Idee? Habe ich irgendwo eine Datenmenge überschritten?
void loop(){
[...]
schalt[6] = digitalRead(schalter7);
schalt[7] = digitalRead(schalter8);
radio.write( schalt, sizeof(schalt) );
delay(20);
[....]
Serial.print(" 6 = ");
Serial.print(digitalRead(schalter6));
Serial.print(" 7 = ");
Serial.print(digitalRead(schalter7));
}
Knackpunkt:
Du liest ein, sendest das eingelesene.
wartest.
Du liest NEU ein und gibst das auf dem SerMon aus.
Wenn Du willst, das ein Zustand mehrfach verwendet werden soll, dann musst Du GENAU DIESEN Zustand verwenden.
Und nur als Frage vorab, da ich den Thread nicht ganz verfolgt habe:
Wie hast Du die PIN schalterX verdrahtet? Du hast da ein INPUT im setup() verwendet, das musst Du von aussen beschalten.
[edit]
Da noch nichts kam, ersetze im Sende alles ab radio.write:
radio.write( schalt, sizeof(schalt) );
for (int i = 0; i <= sizeof(schalt); i++)
{
Serial.print("Zustand Schalter ");
Serial.print(i + 1);
Serial.print(" = ");
Serial.println(schalt[i]);
}
und berichte.
Und für den Empfänger mal komplett versucht umzubauen:
// Forumsketch basiert auf:
// https://forum.arduino.cc/index.php?topic=719926.msg4840484#msg4840484
// NUR Empfänger
// runter gekürzt - komplett ungetestet
//
//NRF24 Moduls Emfänger
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
const uint64_t pipe = {0xB3B4B5B605LL};
RF24 radio(9, 10);
int schalt[8];
int led[] = {2, 3, 4, 5, 6, 7, 8, A1};
void setup() {
Serial.begin(9600);
radio.begin();
radio.openReadingPipe(1, pipe);
radio.startListening();
Serial.println("gestartet");
for (i = 0; i <= sizeof(led); i++)
{
pinMode(led[i], OUTPUT);
}
}
void loop() {
if (radio.available())
{
radio.read(schalt, sizeof(schalt));
for (int i = 0; i <= sizeof(schalt); i++)
{
digitalWrite(led[i], !schalt[i]);
Serial.print(" LED");
Serial.print(i + 1);
Serial.print(" = ");
Serial.println(schalt[i]);
}
}
}
Geht, geht vielleicht, geht nicht? - berichte!
Ich habe den analogen Pin weggenommen, kann jetzt 7 LED´s schalten, aber sie glimmen nur ganz leicht
Hallo
und herzlichen Dank für Deine Rückmeldung. Das Forum ist für Alle da, vom Anfänger mit einem Starterkit bis zum C++Guru.
Der Sketch ist von my_xy_projekt sinnvoll eingedünstet worden. Die analog-Pins kannst Du wie digitale-Pins verwenden, mit der Ausnahme von A6 unf A7, wenn vorhanden.
Im Empfänger ist eine Erweiterung des Sketches sinnvoll, die die Hardware, hier die LEDs, auf Verdrahtungsfehler beim Einschalten testet.
// ---------- schnipp ---------------
for (i = 0; i <= sizeof(led); i++)
{
pinMode(led[i], OUTPUT);
digitalWrite (led[i],HIGH);
delay (500);
digitalWrite (led[i],LOW);
delay (500);
}
// ---------- schnapp ---------------
Ich schaue mir nachher das Zeitverhalten des Sketches an. Schicke dazu Deinen aktuellen Sketch.
suzukirv90:
Ich habe den analogen Pin weggenommen, kann jetzt 7 LED´s schalten, aber sie glimmen nur ganz leicht
Mit welchem code?
Wenn mit dem Empfängercode von mir: Was wird auf dem seriellen Monitor ausgegeben?