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
virtual wire empfänger-sender
11.04.2019, 18:42
Beitrag #1
virtual wire empfänger-sender
Hallo zusammen.
Ich möchte mit meinem Programm 2 Sender(Arduino mini) mit einem Empfänger(Arduino Uno) auslesen. Nun mit einem Sender geht es aber bei zwei gibt es Probleme, da ich die Daten gerne speichern möchte. Kann mir vielleich jemand da weiterhelfen?
Gruss
Peter


Hier mein Programm.
Code:
//arduino uno empfänger
#include <VirtualWire.h>
#include <SPI.h>
#include <SD.h>

const int chipSelect = 4;
int h;
float t;
float tt;
int hh;
int t_as_int;
int tt_as_int;
int gh;
int fe;
int id;
int iid;
char StringReceived[22];
char display[22];
File myFile1;
File myFile2;
//*******************************************************

void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600);
  vw_setup(2000);
  vw_set_rx_pin(7);
  // Start the receiver PLL running
  vw_rx_start();
//*********************************************************
  while (!Serial) {
    ; // wait for serial port to connect. Needed for native USB port only
  }
  Serial.print("Initializing SD card...");
  if (!SD.begin(4)) {
    Serial.println("initialization failed!");
    while (1);
  }
  Serial.println("initialization done.");
  if (SD.exists("mess1.txt")) {
    Serial.println("mess1.txt exists.");
  } else {
    Serial.println("mess1.txt doesn't exist.");
  }
  myFile1 = SD.open("mess1.txt", FILE_WRITE);
  myFile1.close();
  myFile2 = SD.open("mess2.txt", FILE_WRITE);
  myFile2.close();
}
//***********************************
void loop() {
  // put your main code here, to run repeatedly:
  n99(); //gartenhaus
  n90(); //fenster
}
//******************************************
void n90()  //fenster
{
  uint8_t buf[VW_MAX_MESSAGE_LEN];
  uint8_t buflen = VW_MAX_MESSAGE_LEN;

  //Taking the data from the control base
  if (vw_get_message(buf, &buflen))
  {
    int ia;
    // Message with a good checksum received, dump it.
    for (ia = 0; ia < 10; ia++)
    {

      StringReceived[ia] = char(buf[ia]);

    }

    sscanf(StringReceived, "%d,%d,%d", &id , &h, &t_as_int);
    if (id = 90)
    {
      t = 0.1 * t_as_int;
      // Turn off light to and await next message
      Serial.print("ID ");
      Serial.print(id);
      Serial.print(" ");
      Serial.print(h);
      Serial.print(" " );
      Serial.print(t);
      Serial.print(" ");
      Serial.println(" ");
      m90();
    }
  }
}
//**********************************************
void n99() //gartenhaus
{
  uint8_t buf[VW_MAX_MESSAGE_LEN];
  uint8_t buflen = VW_MAX_MESSAGE_LEN;

  //Taking the data from the control base
  if (vw_get_message(buf, &buflen))
  {
    int i;
    // Message with a good checksum received, dump it.
    for (i = 0; i < 10; i++)
    {

      display[i] = char(buf[i]);
    }

    sscanf(display, "%d,%d,%d", &iid , &hh, &tt_as_int);
    if (id > 90)
    {
      tt = 0.1 * tt_as_int;
      // Turn off light to and await next message
      Serial.print("ID ");
      Serial.print(iid);
      Serial.print(" ");
      Serial.print(hh);
      Serial.print(" " );
      Serial.print(tt);
      Serial.print(" ");
      Serial.println(" ");
      m99();
    }
  }
}
//*****************************************
void m90()
{

  uint8_t buf[VW_MAX_MESSAGE_LEN];
  uint8_t buflen = VW_MAX_MESSAGE_LEN;

  //Taking the data from the control base
  if (vw_get_message(buf, &buflen))
  {
    int ia;
    // Message with a good checksum received, dump it.
    for (ia = 0; ia < 10; ia++)
    {

      StringReceived[ia] = char(buf[ia]);

    }

    sscanf(StringReceived, "%d,%d,%d", &id , &h, &t_as_int);
    myFile1 = SD.open("mess1.txt", FILE_WRITE | O_APPEND);
    myFile1.print(h);
    myFile1.print(" ");
    myFile1.print(t);
    myFile1.print(" ");
    myFile1.close();
    Serial.println("90 gespeichert");
  }
}
//*************************************************
void m99()
{
  uint8_t buf[VW_MAX_MESSAGE_LEN];
  uint8_t buflen = VW_MAX_MESSAGE_LEN;

  //Taking the data from the control base
  if (vw_get_message(buf, &buflen))
  {
    int i;
    // Message with a good checksum received, dump it.
    for (i = 0; i < 10; i++)
    {
      display[i] = char(buf[i]);
    }
    sscanf(display, "%d,%d,%d", &iid , &hh, &tt_as_int);
    myFile2 = SD.open("mess2.txt", FILE_WRITE | O_APPEND );
    myFile2.print(h);
    myFile2.print(" ");
    myFile2.print(t);
    myFile2.print(" ");
    myFile2.close();
    Serial.println("99 gespeichert");
  }
}
//*************SENDER*********************

//Hier ist nur ein Sender, es sind jedoch 2 in Betrieb
//Sender für Gartenhaus ID 90
//Sender für Fenster    ID 99
//**************************
#include "DHT.h"
#include <VirtualWire.h>
#include <PCF8574_HD44780_I2C.h>
PCF8574_HD44780_I2C lcd(0x27, 20, 4);// scl pin4/weiss    sda pin5/schwarz
int h = 0;
int t = 0;

#define DHT1PIN 8
#define DHT1TYPE DHT22
int ID = 90;              // identifikations Nummer 90
DHT dht1(DHT1PIN, DHT1TYPE);

int LCD = 7;
int DHTVCC = 6;
int update = 10000;
int LEDpin = 13;

char Sensor1CharMsg[21];

void setup()
{
  lcd.begin(16, 2);
  Serial.begin(9600);
  Serial.println("DHT22 - Test!");
  dht1.begin();
  pinMode(DHTVCC, OUTPUT);
  pinMode(LCD, OUTPUT);
  pinMode(LEDpin, OUTPUT);
  digitalWrite(DHTVCC, HIGH);
  digitalWrite(LCD, HIGH);

  vw_setup(2000);
  vw_set_tx_pin(12);
}

void loop()
{
  float h = dht1.readHumidity();     //Luftfeuchte auslesen
  float t = dht1.readTemperature();  //Temperatur auslesen
  int h_as_int = round(h);  // ordentlich runden und nicht abschneiden
  int t_as_int = round(t * 10);  // Komma verschieben und runden
  int id1 = 90; //vor dem Fenster
  //int h_as_int = h;
  //int t_as_int = t;
  sprintf (Sensor1CharMsg, "%d,%d,%d,", id1, h_as_int, t_as_int);
  // sprintf (Sensor1CharMsg, "%d,%d,", h, t);
  if (isnan(t) || isnan(h))
  {
    lcd.clear();
    Serial.println("DHT22 konnte nicht ausgelesen werden");
    lcd.print("Auslesen");
    lcd.setCursor(0, 1);
    lcd.print("fehlgeschlagen");
    delay(1000);
    lcd.clear();
  }
  else
  {
    lcd.setCursor(0, 0);
    lcd.print("ID ");
    lcd.print(id1);
    lcd.print(" Gartenhaus");
    lcd.setCursor(0, 1);
    lcd.print("Feuchte: ");
    lcd.print(h);
    lcd.print(" %\t");
    lcd.setCursor(0, 2);
    lcd.print("Temp: ");
    lcd.print(t);
    lcd.print(" C");
    lcd.setCursor(0, 3);
    //*******************************
    Serial.print("ID ");
    Serial.println(id1);
    Serial.print("Luftfeuchte: ");
    Serial.print(h);
    Serial.print(" %\t");
    Serial.print("Temperatur: ");
    Serial.print(t);
    Serial.println(" C");
    vw_send((uint8_t *)Sensor1CharMsg, strlen(Sensor1CharMsg));
    vw_wait_tx();
    delay(update);
  }
}
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
11.04.2019, 18:53
Beitrag #2
RE: virtual wire empfänger-sender
Ich habe keine Erfahrung mit virtualWire, könnte mir aber vorstellen, dass sich beide Sender ins Gehege kommen.
Auf der anderen Seite schreibst Du, dass Du Probleme beim Speichern hast. Das läßt evtl. vermuten, dass Du beide Sender empfangen kannst. Da Du anscheinend eine ID mitschickst, kannst Du die Datenpackete auch auseinander halten.

Du solltest nochmal klarer beschreiben, wo genau das Problem liegt. Da wir nicht immer die nötige Hardware zur Verfügung haben, um es selbst zu testen, müssen wir uns mehr auf die Fehlerbeschreibungen stützen.

Gruß Tommy

"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
11.04.2019, 19:06
Beitrag #3
RE: virtual wire empfänger-sender
Deine Sketche sind schon ungewöhnlich und schlecht lesbar, da nicht dokumentiert.
Das ist für uns meist sehr schwer da durchzusteigen.

So verstehe ich nicht, warum du im Empfängersketch 4 mal den Empfänger jeweils unterschiedlich ausliest. Einmal sollte doch reichen und die empfangenen Daten danach auswerten.

Was du mit 2 Sendern meinst, verstehe ich nicht. Ich sehe im Sketch nur einen Sender.

Somit solltest du uns mehr Informationen liefern.

Gruß Dieter

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. Cool
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
11.04.2019, 20:54
Beitrag #4
RE: virtual wire empfänger-sender
(11.04.2019 18:53)Tommy56 schrieb:  Ich habe keine Erfahrung mit virtualWire, könnte mir aber vorstellen, dass sich beide Sender ins Gehege kommen.
Auf der anderen Seite schreibst Du, dass Du Probleme beim Speichern hast. Das läßt evtl. vermuten, dass Du beide Sender empfangen kannst. Da Du anscheinend eine ID mitschickst, kannst Du die Datenpackete auch auseinander halten.

Du solltest nochmal klarer beschreiben, wo genau das Problem liegt. Da wir nicht immer die nötige Hardware zur Verfügung haben, um es selbst zu testen, müssen wir uns mehr auf die Fehlerbeschreibungen stützen.

Gruß Tommy
Hallo Tommy56
Also ich habe 2 gleiche sender nur gib ich eine andere ID mit einmal 90 und einmal 99.
Nun möchte ich diese auseinanderhalten mit der ID um separat zu speichern.
Ich empfange zwar von beiden die Daten kann sie aber nicht auseinander halten.
um separat zu speichern.
Gruss Peter
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
11.04.2019, 20:58 (Dieser Beitrag wurde zuletzt bearbeitet: 11.04.2019 20:59 von Tommy56.)
Beitrag #5
RE: virtual wire empfänger-sender
(11.04.2019 20:54)peterfried schrieb:  Also ich habe 2 gleiche sender nur gib ich eine andere ID mit einmal 90 und einmal 99.
Wenn Du die Daten empfängst, hast Du ja die ID - richtig?

Dann kannst Du die Daten doch mit der ID in ein gtemeinsames File abspeichern oder pro ID (Filename) ein eigenes File zum Append öffnen.

Ich sehe Dein Problem noch nicht in Deiner Beschreibung.

Gruß Tommy

"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
11.04.2019, 21:00
Beitrag #6
RE: virtual wire empfänger-sender
Dein Gedankengang ist vermutlich grundlegend fehlerhaft.
2 Sender können sich gegenseitig stören. Wie verhinderst du das ?

Gruß Dieter

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. Cool
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
11.04.2019, 21:01
Beitrag #7
RE: virtual wire empfänger-sender
(11.04.2019 19:06)hotsystems schrieb:  Deine Sketche sind schon ungewöhnlich und schlecht lesbar, da nicht dokumentiert.
Das ist für uns meist sehr schwer da durchzusteigen.

So verstehe ich nicht, warum du im Empfängersketch 4 mal den Empfänger jeweils unterschiedlich ausliest. Einmal sollte doch reichen und die empfangenen Daten danach auswerten.

Was du mit 2 Sendern meinst, verstehe ich nicht. Ich sehe im Sketch nur einen Sender.

Somit solltest du uns mehr Informationen liefern.

Guten Abend
Ich bin da nicht so ein geübter Programmierer darum ist es vielleicht etwas kompliziert.
Ich habe nur ein Sender eingefügt weil beide gleich sind nur die ID ändert.
Ich wäre froh wenn mir jemand einen tipp gibt was ich andern kann.
Gruss Peter
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
11.04.2019, 21:05
Beitrag #8
RE: virtual wire empfänger-sender
(11.04.2019 21:01)peterfried schrieb:  Guten Abend
Ich bin da nicht so ein geübter Programmierer darum ist es vielleicht etwas kompliziert.
Ich habe nur ein Sender eingefügt weil beide gleich sind nur die ID ändert.
Ich wäre froh wenn mir jemand einen tipp gibt was ich andern kann.
Gruss Peter

Mir ist immer noch nicht klar, warum du mit 2 Sendern arbeiten musst ?
Das geht doch auch und viel einfacher mit einem Sender.

Gruß Dieter

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. Cool
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  [Vorstellung] Serieller Sender ohne 2. MC Tommy56 2 136 13.04.2019 22:03
Letzter Beitrag: Tommy56
  Probleme mit DCF-77 Empfänger von Pollin unkreativ 11 444 04.04.2019 10:48
Letzter Beitrag: unkreativ
  Wire.requestFrom Blende8 7 353 27.03.2019 15:54
Letzter Beitrag: Blende8
  Wire.write und Client Socket LiVe 3 441 11.01.2019 13:51
Letzter Beitrag: Tommy56
  Funknetz mit vielen Sendern und einem Empfänger Hi72 18 1.249 20.12.2018 12:48
Letzter Beitrag: Hi72
  Problem mit Wire.available() abfrage avoid 1 866 11.01.2018 13:40
Letzter Beitrag: Tommy56
  [gelöst] wire.h blockiert analogRead Rupert 6 3.047 08.12.2016 18:03
Letzter Beitrag: hotsystems
  DCF77 Empfänger paq 19 4.963 23.07.2016 17:16
Letzter Beitrag: rkuehle
  Mega: Hardware i2c bus speed (Wire.) verändern? HaWe 10 8.826 14.07.2016 20:09
Letzter Beitrag: Mathias
  Empfänger RF 433 peterfried 6 1.261 10.06.2016 23:01
Letzter Beitrag: hotsystems

Gehe zu:


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