INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
nrf 24 und sensoren auslesen
03.10.2015, 16:08
Beitrag #1
nrf 24 und sensoren auslesen
ich komme hier echt nicht weiter ich habe mir eine hausteuerung gebaut auf ein 7zoll display alles so weit fertig .Wo ich jetzt nicht weiter komme ist die Nrf24 geschichte ich habe mir den code mal mit den joystick angeschaut habe es um geschrieben das er mir einen blumen sensor auslesen soll klappt alles solange es nur 2 nrf 24 sind (SCHREIBEN und ABLESEN)
aber wenn ich ein 3.oder mehr haben möchte spiel alles verückt.kann mir da jemand weiter helfen .

Hier mal mein code:

////////////////////////////////////////////EMPFÄNGER
#include <SPI.h>
#include "nRF24L01.h"
#include "RF24.h"

int Wasser[3];
int Blumen[3];
int SER_Pin = 2; //pin 14 on the 75HC595
int RCLK_Pin = 3; //pin 12 on the 75HC595
int SRCLK_Pin = 5; //pin 11 on the 75HC595

#define number_of_74hc595s 4
//do not touch
#define numOfRegisterPins number_of_74hc595s * 8
boolean registers[numOfRegisterPins];
RF24 radio(9,10);
const uint64_t pipes[3] ={ 0xBABBCCDD00LL, 0xAABBCCDD11LL,0xAABBCCDD22LL};// Radio pipe addresses for the 2 nodes to communicate.
//const uint64_t pipes[2] = {0xF0F0F0F0E1LL, 0xF0F0F0F0D2LL};

void setup(void)
{
pinMode(SER_Pin, OUTPUT);
pinMode(RCLK_Pin, OUTPUT);
pinMode(SRCLK_Pin, OUTPUT);
Serial.begin(9600);
radio.begin();
//radio.openWritingPipe(pipes[1]);
radio.openReadingPipe(2,pipes[2]); //radio.openWritingPipe(pipes[0]);
radio.openReadingPipe(3,pipes[3]);
// radio.openReadingPipe(1,pipes[1]);
radio.startListening();
//reset all register pins
clearRegisters();
writeRegisters();
}
//set all register pins to LOW
void clearRegisters(){
for(int i = numOfRegisterPins - 1; i >= 0; i--){
registers[i] = LOW;
}
}


//Set and display registers
//Only call AFTER all values are set how you would like (slow otherwise)
void writeRegisters(){

digitalWrite(RCLK_Pin, LOW);

for(int i = numOfRegisterPins - 1; i >= 0; i--){
digitalWrite(SRCLK_Pin, LOW);

int val = registers[i];

digitalWrite(SER_Pin, val);
digitalWrite(SRCLK_Pin, HIGH);

}
digitalWrite(RCLK_Pin, HIGH);

}

//set an individual pin HIGH or LOW
void setRegisterPin(int index, int value){
registers[index] = value;
}

void loop(void)
{

if ( radio.available() )
{
bool done = false;
while (!done)
{
done = radio.read( Wasser, sizeof(Wasser) );
done = radio.read( Blumen, sizeof(Blumen) );




if(Wasser[1]<450)
{Serial.println(Wasser[1]);
Serial.println("KEIN WASSER");
setRegisterPin(1, HIGH);
}

else
{
Serial.println(" WASSER ist im dank");
setRegisterPin(1, LOW);
}




Serial.println(Blumen[1]);
if(Blumen[1]<450)
{

Serial.println("BLUMEN HABEN KEIN WASSER");
setRegisterPin(25, HIGH);
}
else
{
Serial.println("BLUMEN HABEN WASSER");
setRegisterPin(25, LOW);
}


// if(Blumen[2]>450)
//{
// setRegisterPin(11, HIGH);
// }
// else
// {
// setRegisterPin(11, LOW);
// }
// Serial.println(Blumen[1]);
// Serial.println(Blumen[2]);
writeRegisters();
}
}

else
{
Serial.println("Es wurde kein Sender gefunden");
}
// Delay para facilitar a visualização das informações no serial monitor
delay(10000);
}



///////////////////////////////////////////////////sender 1
#include <SPI.h>
#include "nRF24L01.h"
#include "RF24.h"
#include "DHT.h"

//#define DHTPIN A3
//#define DHTTYPE DHT11
//DHT dht(DHTPIN, DHTTYPE);
int Blumen[3];

//float dht_nem[3];

RF24 radio(9,10);
const uint64_t pipes[] ={ 0xAABBCCDD11LL};//,0xE8E8F0F0D2LL,0xE8E8F0F0E3LL};

void setup(void)
{ Serial.begin(9600);
//dht.begin();
radio.begin();
radio.openWritingPipe(pipes[0]);
//radio.openReadingPipe(1,pipes[0]);
}

void loop(void)
{
// float t = dht.readTemperature();

Blumen[0] = analogRead(A0);
Blumen[1] = analogRead(A1);
Blumen[2] = analogRead(A2);
//Blumen[3] =analogRead(A3);//DHT.temperature;
// DHT.temperature;//analogRead(A3);

radio.write( Blumen, sizeof(Blumen) );
Serial.println(Blumen[1]);
}


/////////////////////////////////////////////////sender 2[/php]
#include <SPI.h>
#include "nRF24L01.h"
#include "RF24.h"
#include "DHT.h"

//#define DHTPIN A3
//#define DHTTYPE DHT11
//DHT dht(DHTPIN, DHTTYPE);
int Wasser[3];

//float dht_nem[3];

RF24 radio(9,10);
const uint64_t pipes[] ={ 0xAABBCCDD22LL};//,0xE8E8F0F0D2LL,0xE8E8F0F0E3LL};

void setup(void)
{ Serial.begin(9600);
//dht.begin();
radio.begin();
radio.openWritingPipe(pipes[0]);
//radio.openReadingPipe(1,pipes[0]);
}

void loop(void)
{
// float t = dht.readTemperature();

Wasser[0] = analogRead(A0);
Wasser[1] = analogRead(A1);
Wasser[2] = analogRead(A2);
//Blumen[3] =analogRead(A3);//DHT.temperature;
// DHT.temperature;//analogRead(A3);

radio.write( Wasser, sizeof(Wasser) );
Serial.println(Wasser[1]);
}

Geht nicht gibt es nicht
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
03.10.2015, 16:29
Beitrag #2
RE: nrf 24 und sensoren auslesen
Du solltest deinen Sketch mal richtig dokumentieren, damit wir auch erkennen, was dieser machen soll. So dauert es für uns einfach zu lange, um uns einzuarbeiten.

Und dann setze deinen Sketch in Code-Tags hier rein, so wird er auch besser lesbar.

Gruß Dieter

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. Cool
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
05.10.2015, 22:10
Beitrag #3
RE: nrf 24 und sensoren auslesen
Sobald ich die Woche Zeit habe setze ich nochmal den code beschriftet rein mit den tags muss ich schauen ob ich das hin bekomme weiß nicht wo man das hier macht. MFG schlappy

Geht nicht gibt es nicht
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
05.10.2015, 22:14
Beitrag #4
RE: nrf 24 und sensoren auslesen
(05.10.2015 22:10)schlappy82 schrieb:  Sobald ich die Woche Zeit habe setze ich nochmal den code beschriftet rein mit den tags muss ich schauen ob ich das hin bekomme weiß nicht wo man das hier macht. MFG schlappy

Wenn du im letzten Post auf "Reply" klickst, hast du oben die Schaltflächen und drückst auf "#" "für formatierten Code einsetzen".

Gruß Dieter

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. Cool
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
05.10.2015, 22:34
Beitrag #5
RE: nrf 24 und sensoren auslesen
...oder man setzt vor das coding ein "[ code ]" (ohne die Blanks und Anfuehrungszeichen) und danach ein "[ /code ]" (auch ohne Blanks und Anfuehrungszeichen).

Falls ich mit einer Antwort helfen konnte, wuerde ich mich freuen, ein paar Fotos oder auch ein kleines Filmchen des zugehoerigen Projekts zu sehen.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
06.10.2015, 13:47
Beitrag #6
RE: nrf 24 und sensoren auslesen
(03.10.2015 16:08)schlappy82 schrieb:  ich komme hier echt nicht weiter ich habe mir eine hausteuerung gebaut auf ein 7zoll display alles so weit fertig .Wo ich jetzt nicht weiter komme ist die Nrf24 geschichte ich habe mir den code mal mit den joystick angeschaut habe es um geschrieben das er mir einen blumen sensor auslesen soll klappt alles solange es nur 2 nrf 24 sind (SCHREIBEN und ABLESEN)
aber wenn ich ein 3.oder mehr haben möchte spiel alles verückt.kann mir da jemand weiter helfen .

Hallo,
ich habe den Code nur kurz überflogen, aber es sieht so aus als ob deine Sender alle senden wann sie wollen. Also völlig unkoordiniert. Das finde ich nicht gut.

Vorschlag:
Nutze zum Senden und empfangen bei allen Teilnehmern nur pipe 0/1.
Baue im Empfänger einen Code ein der die Sender reihum zum senden auffordert. Wenn der angeforderte Sender geantwortet hat wird der nächste angefordert. u.s.w.

So bist du dann mit der Anzahl der Sender nicht an die maximale Anzahl der pipes gefunden und das Ganze läuft koordiniert ab.

Gruß
Arne

Gruß Arne
Mit zunehmender Anzahl qualifizierter Informationen bei einer Fragestellung, erhöht sich zwangsläufig die Gefahr auf eine zielführende Antwort.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
13.10.2015, 15:41
Beitrag #7
RE: nrf 24 und sensoren auslesen
Schau dir mal das Beispiel "startping" an... Um es dir einfacher zu machen- ich habe aus diesem Beispiel mal die "Zentrale" extrahiert- das ist dann dein "Node1" und die "Antworter"- die mußt du dann mit "Node2" bis "Node6" betiteln.... damit kannst du schon mal beliebige Daten von den 5 Antwortern zu der Zentrale schicken und die Zentrale darauf antworten lassen...

Code:
#include <SPI.h>
#include <EEPROM.h>
#include "nRF24L01.h"
#include "RF24.h"
#include "printf.h"

long Sensor = 1;
int SensorPIN = A7;

RF24 radio(9,10);

const uint64_t talking_pipes[5] = { 0xF0F0F0F0D2LL, 0xF0F0F0F0C3LL, 0xF0F0F0F0B4LL, 0xF0F0F0F0A5LL, 0xF0F0F0F096LL };
const uint64_t listening_pipes[5] = { 0x3A3A3A3AD2LL, 0x3A3A3A3AC3LL, 0x3A3A3A3AB4LL, 0x3A3A3A3AA5LL, 0x3A3A3A3A96LL };

typedef enum { role_invalid = 0, role_ping_out, role_pong_back } role_e;
const char* role_friendly_name[] = { "Ungültig", "Sender", "Anwortender"};
role_e role;
const uint8_t address_at_eeprom_location = 0;
uint8_t node_address;

void setup(void)
{
  pinMode(SensorPIN, INPUT);
  
    role = role_ping_out;
    node_address = 2; //Adresse 2- 6 gültige

  Serial.begin(57600);
  printf_begin();
  printf("\n\rRF24/examples/starping/\n\r");
  printf("ROLE: %s\n\r",role_friendly_name[role]);
  printf("ADDRESS: %i\n\r",node_address);
  
  radio.begin();

    radio.openWritingPipe(talking_pipes[node_address-2]);
    radio.openReadingPipe(1,listening_pipes[node_address-2]);
  
  radio.startListening();
  radio.printDetails();
}

void loop(void)
{
    Sensor = analogRead(SensorPIN);
  
    radio.stopListening();
    printf("Sende Sensorwert %lu...",Sensor);
    radio.write( &Sensor, sizeof(unsigned long) );
    
    radio.startListening();
    unsigned long started_waiting_at = millis();
    bool timeout = false;
    while ( ! radio.available() && ! timeout )
      if (millis() - started_waiting_at > 250 )
        timeout = true;
        
    if ( timeout )
    {
      printf("fehlgeschlagen- die Zeit wurde ueberschritten.\n\r");
    }
    else
    {
      unsigned long Szene;
      radio.read( &Szene, sizeof(unsigned long) );
      printf("Antwort erhalten %lu\n\r",Szene);
    }
    delay(1000);
}


Code:
#include <SPI.h>
#include <EEPROM.h>
#include "nRF24L01.h"
#include "RF24.h"
#include "printf.h"

int Szene = 1;

RF24 radio(9,10);

const uint64_t talking_pipes[5] = { 0xF0F0F0F0D2LL, 0xF0F0F0F0C3LL, 0xF0F0F0F0B4LL, 0xF0F0F0F0A5LL, 0xF0F0F0F096LL };
const uint64_t listening_pipes[5] = { 0x3A3A3A3AD2LL, 0x3A3A3A3AC3LL, 0x3A3A3A3AB4LL, 0x3A3A3A3AA5LL, 0x3A3A3A3A96LL };

typedef enum { role_invalid = 0, role_ping_out, role_pong_back } role_e;
const char* role_friendly_name[] = { "Ungueltig", "Antworter", "Sender"};
role_e role;
const uint8_t address_at_eeprom_location = 0;
uint8_t node_address;

void setup(void)
{
    role = role_pong_back;
    node_address = 1;
  
  Serial.begin(57600);
  printf_begin();
  printf("\n\rRF24/examples/starping/\n\r");
  printf("ROLE: %s\n\r",role_friendly_name[role]);
  printf("ADDRESS: %i\n\r",node_address);
  
  radio.begin();

    radio.openReadingPipe(1,talking_pipes[0]);
    radio.openReadingPipe(2,talking_pipes[1]);
    radio.openReadingPipe(3,talking_pipes[2]);
    radio.openReadingPipe(4,talking_pipes[3]);
    radio.openReadingPipe(5,talking_pipes[4]);
    
  radio.startListening();
  radio.printDetails();
}

void loop(void)
{
    uint8_t pipe_num;
    if ( radio.available(&pipe_num) )
    {
      unsigned long Status;
      bool done = false;
      while (!done)
      {
        done = radio.read( &Status, sizeof(unsigned long) );
        printf("Empfange payload %lu von node %i...",Status,pipe_num+1);
      }
      
      radio.stopListening();
      radio.openWritingPipe(listening_pipes[pipe_num-1]);
      uint16_t pipe_id = listening_pipes[pipe_num-1] & 0xffff;

      radio.write( &Szene, sizeof(unsigned long) );
      printf("Sende Rueckmeldung %lu an %04x.\n\r",Szene,pipe_id);

      radio.startListening();
    }
}
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  Arduino DMX wert mit serial port auslesen Arduino DMX Master 2 593 10.06.2020 16:27
Letzter Beitrag: Chopp
  Motordaten von Zusatzsensoren per Arduino auslesen PingPong92 14 3.500 19.04.2020 09:28
Letzter Beitrag: Tommy56
  Temperatursensor DS18B20 direkt auslesen Igom 9 1.124 26.03.2020 19:21
Letzter Beitrag: hotsystems
  Den Wert eines PWM Pins auslesen - was mache ich falsch? Gelegenheitsbastler 8 1.421 25.11.2019 10:49
Letzter Beitrag: MicroBahner
  Zwei Sensoren für Zwei Relais Madflo 28 3.866 10.07.2019 13:13
Letzter Beitrag: Tommy56
  Zeit vom Nextion Enhanced mit Arduino auslesen MarkoM 47 9.532 06.03.2019 18:08
Letzter Beitrag: Tommy56
  Keypad auslesen Dieter_T 10 2.444 11.02.2019 20:46
Letzter Beitrag: Dieter_T
  2 Pt1000 über externen AD wandler auslesen Noob63 16 3.855 15.11.2018 20:10
Letzter Beitrag: ardu_arne
  mcp2515 CAN BUS nur eine ID auslesen Golf_Cabrio 6 2.806 24.10.2018 20:51
Letzter Beitrag: Golf_Cabrio
  Sensor mit 10 Hz auslesen Olafson Larson 7 2.292 05.07.2018 15:59
Letzter Beitrag: Tommy56

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste