// Programm zur Übermittlung eines Schalterzustandes mit einem 2,4 GHz NRF24 Modul
// Die Betriebsspannung vom NRF24 Modul MUSS!! an 3,3V vom Arduino angeschlossen werden
// ACHTUNG!!! ca 10 nF Elko zwischen 3,3V und Masse schalten um die Übertragung zu stabilisieren
// Bibliotheken zur Bedienung des NRF24 Moduls
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
// Variablen und Instanzendefinition für das NRF Modul
RF24 radio(8, 9); // CE, CSN - die Zahlen geben die Digitalports am Arduino an, Instatz um das Modul zu starten
const byte address1[6] = "00001"; //Adresse, auf dem die Empfangsdaten gesendet werden sollen. Der Empfänger benötigt dieselbe Adresse!
const byte address2[6] = "00002";
boolean button_state = 0;
boolean antwort = 0;
int button_pin = 7; // Signalpin zum Einlesen des Schaltsignals (Taster, Bewegungsmelder etc.)
void setup() {
Serial.begin(9600); // Start des seriellen Ausgabe per USB an einen PC
pinMode(button_pin, INPUT); // Port zum Einlesen des Schalterzustandes konfigurieren
radio.begin(); // Start der 2,4 GHz Wireless Kommunikation
radio.openWritingPipe(address1); // Setzen der Sendeadresse zur Übermittlung der Daten
radio.openReadingPipe(1, address2); // Die 1,... ist nicht nötig gewesen aber es lief irgendwie flüssiger am Ausgabe Pin vom Empfänge
radio.setPALevel(RF24_PA_HIGH); // Leistung des NRF Moduls je nach Entfernung kann man von MIN bis MAX einstellen (MAX,HIGH,LOW,MIN)
//radio.stopListening(); // Das angeschlossene Modul wird als Sender konfigurieret
}
void loop()
{
radio.stopListening();
button_state = digitalRead(button_pin); // Einlesen des Schalterzustandes
// Serial.println(button_state); // Kontrollausgabe des Schalterzustandes am PC-Monitor
if(button_state == HIGH)
{
const char text[] = "Your Button State is HIGH"; // Erstelle Zeichenkette als Textmitteilung
radio.write(&text, sizeof(text)); //Sende Zeichenkette zum Empfänger
}
else
{
const char text[] = "Your Button State is LOW"; // Erstelle Zeichenkette als Textmitteilung
radio.write(&text, sizeof(text)); //Sende Zeichenkette zum Empfänger
}
// const char text[] = "Your Button State"; // Erstellen einer Zeichenkette als Textmitteilung
// radio.write(&text, sizeof(text)); // Senden der Zeichenkette zum Empfänger
radio.write(&button_state, sizeof(button_state)); //Senden des Schalterstatus zum Empfänger
radio.startListening();
if (radio.available()) //Looking for the data.
{
Serial.println("empfange!");
radio.read(&antwort, sizeof(antwort));
Serial.println(antwort);
}
delay(50);
}
// Bibliotheken für 2,4 GHz Modul
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
RF24 radio(8, 9); // CE, CSN
const byte address1[6] = "00001";
const byte address2[6] = "00002";
boolean button_state = 0;
boolean antwort = 0;
int led_pin = 7;
void setup() {
pinMode(7, OUTPUT);
Serial.begin(9600);
radio.begin();
radio.openReadingPipe(0, address1); //Setting the address at which we will receive the data
radio.openWritingPipe(address2);
radio.setPALevel(RF24_PA_HIGH); //You can set this as minimum or maximum depending on the distance between the transmitter and receiver.
//radio.startListening(); //This sets the module as receiver
Serial.println("gestartet");
}
void loop()
{
radio.startListening();
if (radio.available()) //Looking for the data.
{
Serial.println("empfange!");
char text[32] = ""; //Saving the incoming data
radio.read(&text, sizeof(text)); //Reading the data
radio.read(&button_state, sizeof(button_state)); //Reading the data
if(button_state == HIGH)
{
digitalWrite(7, HIGH);
Serial.println(text);
radio.stopListening();
antwort = (1);
radio.write(&antwort, sizeof(antwort));
}
else
{
digitalWrite(7, LOW);
Serial.println(text);}
}
delay(50);
}
Wenn ich ein „delay“ dazwischen setze hört er ja die zeit über nicht die Quittierung: „empfange 1“.Ich habe das Gefühl, als wenn die Zeiten zwischen den "Rollenänderungen" zu kurz sind. Das mußt Du wohl anders lösen.
// Sender
// Programm zur Übermittlung eines Schalterzustandes mit einem 2,4 GHz NRF24 Modul
// Die Betriebsspannung vom NRF24 Modul MUSS!! an 3,3V vom Arduino angeschlossen werden
// ACHTUNG!!! ca 10 nF Elko zwischen 3,3V und Masse schalten um die Übertragung zu stabilisieren
// Bibliotheken zur Bedienung des NRF24 Moduls
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
// Variablen und Instanzendefinition für das NRF Modul
RF24 radio(8, 9); // CE, CSN - die Zahlen geben die Digitalports am Arduino an, Instatz um das Modul zu starten
const byte address[6] = "00001"; //Adresse, auf dem die Empfangsdaten gesendet werden sollen. Der Empfänger benötigt dieselbe Adresse!
boolean button_state = 0;
int antwort = 0;
int horchen ;
int button_pin = 7; // Signalpin zum Einlesen des Schaltsignals (Taster, Bewegungsmelder etc.)
void setup() {
Serial.begin(9600); // Start des seriellen Ausgabe per USB an einen PC
pinMode(button_pin, INPUT); // Port zum Einlesen des Schalterzustandes konfigurieren
radio.begin(); // Start der 2,4 GHz Wireless Kommunikation
radio.openWritingPipe(address); // Setzen der Sendeadresse zur Übermittlung der Daten
radio.setPALevel(RF24_PA_HIGH); // Leistung des NRF Moduls je nach Entfernung kann man von MIN bis MAX einstellen (MAX,HIGH,LOW,MIN)
// radio.stopListening(); // Das angeschlossene Modul wird als Sender konfigurieret
}
void loop()
{
radio.stopListening();
button_state = digitalRead(button_pin); // Einlesen des Schalterzustandes
Serial.println(button_state); // Kontrollausgabe des Schalterzustandes am PC-Monitor
if(button_state == HIGH)
{
const char text[] = "Your Button State is HIGH"; // Erstelle Zeichenkette als Textmitteilung
radio.write(&text, sizeof(text)); //Sende Zeichenkette zum Empfänger
}
else
{
const char text[] = "Your Button State is LOW"; // Erstelle Zeichenkette als Textmitteilung
radio.write(&text, sizeof(text)); //Sende Zeichenkette zum Empfänger
}
// const char text[] = "Your Button State"; // Erstellen einer Zeichenkette als Textmitteilung
// radio.write(&text, sizeof(text)); // Senden der Zeichenkette zum Empfänger
radio.write(&button_state, sizeof(button_state)); //Senden des Schalterstatus zum Empfänger
radio.startListening();
horchen=0 ; // Wert für horchen zurücksetzen
while(horchen<=4) //Schleife läuft solange durch bis horchen = 4 ist.
{
if (radio.available()) //Wenn Daten abgelegt sind dann...
{
Serial.print("empfange!");
radio.read(&antwort, sizeof(antwort));
Serial.println(antwort); // das ..In kann eigentlich weg
horchen=4; // horchen auf 4 weil Schleife beendet werden kann.
}
else // Bei einem Empfang setzt er horchen auf 4 und sollte eigentlich von hier ...
{
if( horchen>=4)
{
Serial.println("4 X Versucht" ); // Fehlermeldung bei 4 erfolglosen Durchgängen
}
horchen++; // horchen wird um einen versuch erhört
Serial.print("horchen auf ! ");
Serial.println(horchen);
delay(10); // kleine Verzögerung
} // ...Bis hier, alles überspringen. Tut das Programm aber nicht !
}
delay(50);
}
while(horchen<=4) //Schleife läuft solange durch bis horchen = 4 ist.
{
if (radio.available()) //Wenn Daten abgelegt sind dann...
{
Serial.print("empfange!");
radio.read(&antwort, sizeof(antwort));
Serial.println(antwort); // das ..In kann eigentlich weg
horchen=5; // horchen auf 4 weil Schleife beendet werden kann.
}
else // else Funktion mit dernächten if Bedingung nicht ganz kompatibel aber läuft mit ==4
{
if( horchen==4) // Fehlermeldung bei 4 erfolglosen Durchgängen
{
Serial.println("4 X Versucht Fehler Fehler " );
}
horchen++; // horchen wird um einen versuch erhört
Serial.print("horchen auf ! ");
Serial.println(horchen);
delay(20); // kleine Verzögerung
}
}
// Date and time functions using just software, based on millis() & timer
#include <nRF24L01.h>
#include <RF24.h>
#include "RTClib.h"
RTC_Millis rtc;
RF24 radio(8, 9); // CE, CSN - die Zahlen geben die Digitalports am Arduino an, Instatz um das Modul zu starten
byte address[6] = "00011"; //Adresse, auf dem die Empfangsdaten gesendet werden sollen. Der Empfänger benötigt dieselbe Adresse!
boolean button_state = 0; // Rolladen hoch
boolean button_state2 = 0; // Rolladen runter
boolean Anderung = 0;
boolean Wochentag = 0; // So.-Do. = HIGH
boolean Arbeitstag = 0; // Mo.-Fr. = HIGH
boolean Frei =0; // Fr.-SO
void setup () {
pinMode(7, OUTPUT);
pinMode(5, OUTPUT);
Serial.begin(57600);
radio.begin();
radio.openWritingPipe(address); // Setzen der Sendeadresse zur Übermittlung der Daten
radio.setPALevel(RF24_PA_HIGH); // Leistung des NRF Moduls je nach Entfernung kann man von MIN bis MAX einstellen (MAX,HIGH,LOW,MIN)
//rtc.begin(DateTime(F(__DATE__), F(__TIME__)));
// rtc.adjust(DateTime(2020,1,5, 8, 59, 55)); // Zeit hoch
rtc.adjust(DateTime(2020,1,5, 22, 29, 55)); // Zeit runter
}
void loop ()
{
DateTime now = rtc.now();
// Wochentag -1 ermitteln ( So. bis Do. )
if ( now.dayOfTheWeek() == 0||now.dayOfTheWeek() ==1||now.dayOfTheWeek() ==2||now.dayOfTheWeek() ==3||now.dayOfTheWeek() ==4 )
{
Wochentag = HIGH;
}
else
{
Wochentag = LOW;
}
// Arbeitstag ermitteln ( Mo. bis Fr. )
if (now.dayOfTheWeek() ==1||now.dayOfTheWeek() ==2||now.dayOfTheWeek() ==3||now.dayOfTheWeek() ==4 ||now.dayOfTheWeek() == 5 )
{
Arbeitstag = HIGH;
}
else
{
Arbeitstag = LOW;
}
// Frei ermitteln ( Fr. 12Uhr bis So. 12Uhr )
if (Wochentag == LOW && Arbeitstag == LOW||now.dayOfTheWeek() == 5 && now.hour()>= 12 ||now.dayOfTheWeek() == 0 && now.hour()<= 11 )
{
Frei = HIGH;
}
else
{
Frei = LOW;
}
// Serial.println (Wochentag);
//Serial.println (Arbeitstag);
Serial.println (Frei);
// An Arbeitstagen um 6:30 Signal ( Pin 7 HIGH ) für 10 Sek.
if (Arbeitstag==HIGH && now.hour()== 6 && now.minute()== 30&&now.second()<= 10 || Frei == HIGH &&now.hour()== 9&& now.minute()== 00&& now.second()<= 10 )
{
if (button_state == LOW )
{
Anderung = HIGH;
}
digitalWrite(7, HIGH);
button_state = HIGH;
}
else
{
if (button_state == HIGH )
{
Anderung = HIGH;
}
digitalWrite(7, LOW);
button_state = LOW;
}
// An Wochentag um 22:30 Signal ( Pin 4 HIGH ) für 10 Sek.
if (Wochentag==HIGH && now.hour()== 22 && now.minute()== 30&&now.second()<= 10 || Frei == HIGH &&now.hour()== 23&& now.minute()== 59&&now.second()<= 10 )
{
if (button_state2 == LOW )
{
Anderung = HIGH;
}
digitalWrite(4, HIGH);
button_state2 = HIGH;
}
else
{
if (button_state2 == HIGH )
{
Anderung = HIGH;
}
digitalWrite(4, LOW);
button_state2 = LOW;
}
Serial.println (Anderung);
// Zeitangabe
Serial.print(now.year(), DEC);
Serial.print('/');
Serial.print(now.month(), DEC);
Serial.print('/');
Serial.print(now.dayOfTheWeek(), DEC);
Serial.print(' ');
Serial.print(now.hour(), DEC);
Serial.print(':');
Serial.print(now.minute(), DEC);
Serial.print(':');
Serial.print(now.second(), DEC);
Serial.println();
// Übertragung an Modul
if(Anderung == HIGH)
{
radio.stopListening();
radio.write(&button_state, sizeof(button_state)); //Sende Zeichenkette zum Empfänger
//delay(10);
byte address[6] = "00001";
radio.write(&button_state2, sizeof(button_state2)); //Sende Zeichenkette zum Empfänger
//delay(10);
Anderung = LOW;
}
Serial.println(button_state); // Kontrollausgabe des Schalterzustandes am PC-Monitor
Serial.println(button_state2);
Serial.println(' ');
Serial.println(address[6]);
Serial.println(' ');
delay(30);
}
// Bibliotheken für 2,4 GHz Modul
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
RF24 radio(8, 9); // CE, CSN
const byte address[6] = "00011";
boolean button_state ;
boolean button_state2 ;
int led_pin = 7;
int led_pin2 = 6;
void setup() {
pinMode(7, OUTPUT);
pinMode(6, OUTPUT);
Serial.begin(57600);
radio.begin();
radio.openReadingPipe(0, address); //Setting the address at which we will receive the data
radio.setPALevel(RF24_PA_MIN); //You can set this as minimum or maximum depending on the distance between the transmitter and receiver.
radio.startListening(); //This sets the module as receiver
Serial.println("gestartet");
}
void loop()
{
// Empfange
radio.startListening();
if (radio.available()) //Looking for the data.
{
Serial.println("empfange!");
radio.read(&button_state, sizeof(button_state)); //Reading the data
if(button_state == HIGH)
{
digitalWrite(7, LOW);
Serial.println(" 7 HIGH ");
}
if(button_state == LOW)
{
digitalWrite(7, HIGH);
Serial.println(" 7 LOW ");
}
radio.read(&button_state2, sizeof(button_state2)); //Reading the data
if(button_state2 == HIGH)
{
digitalWrite(6, LOW);
Serial.println("6 HIGH");
}
if(button_state2 == LOW)
{
digitalWrite(6, HIGH);
Serial.println("6 LOW");
}
}
delay(50);
}
Ja genau das habe ich ja versucht. ( Ende vom Sender code )Dann wirst Du weitere Adressen definieren und wechseln müssen. D.h., dass beim Sender im laufenden Betrieb eine alternative Adresse eingestellt werden muss, auf die der zweite Empfänger reagiert.