Serielle Schnittstelle an verschiedenen Stellen auslesen

Hallo, ihr kennt mein Problem vermutlich shcon :slight_smile: ich will immer noch 2 Arduinos kommunizieren lassen. Klappt mittlerweile auch über eine serielle Schnittstelle:

Sender:

#include <INTERVAL.h>


 // ---------------------------------DHT11-Temperatur-Sensor 1----------------------------------------------------
    #include <dht11.h>          // Einbinden der Dht-Library -> Stellt Klasse zur Verfügung zur Ansteuerung des Temperatur-Sensors
    dht11 DHT11;              // Sensor-Objekt "DHT11" erstellen aus Klasse dht11
    #define dht11_pin 8       // Datenpin des Sensors definieren : 8

//-------------------------- Messung für Temp.sensor 1----------------------------------
unsigned long interval_Messung_T1 = 3000;    // Interval zwischen zwei Messungen(T1)



// ---------------------------------Initialisierung von Temperatur-Sensor 2-MLX90615 ---------------------------------------------------

    #include <MLX90615.h>       // Library für Temp-Sensor "MLX90615"
    #include <I2cMaster.h>     // Library für Temp-Sensor "MLX90615"
    #define SDA_PIN A0   //define the SDA pin
    #define SCL_PIN A1   //define the SCL pin
    SoftI2cMaster i2c(SDA_PIN, SCL_PIN);
    MLX90615 mlx90615(DEVICE_ADDR, &i2c);     // Sensor-Objekt "mlx90615" erstellen aus Klasse MLX90615

//-------------------------- Messung für Temp.sensor 2----------------------------------
    unsigned long interval_Messung_T2 = 3000;    // Interval zwischen zwei Messungen(T2)




void setup() {
  Serial.begin(9600);
}




void loop() {
  
// ######## MESSUNG SENSOR 1 - DHT11 ##################

          INTERVAL(interval_Messung_T1) 
    {          

              int chk = DHT11.read(dht11_pin);
              int wert_dht11 = DHT11.temperature;

              Serial.println("Temperatur-Station 1: ");
              Serial.println(wert_dht11);

      }
      
    
   // ######## MESSUNG SENSOR 2 - MLX90615 ##################

        INTERVAL(interval_Messung_T2)
        int wert_mlx90615 = mlx90615.getTemperature(MLX90615_AMBIENT_TEMPERATURE);
        
        Serial.println("Temperatur-Station 2: ");
        Serial.println(wert_mlx90615);
        }

}

Empfänger:

void setup() {
  Serial.begin(9600);
}



void loop() {
  if (Serial.available()>0){
    delay(100);
    while (Serial.available()>0){
    
      Serial.write(Serial.read());
    }
  }
}

Wie kann ich die unterschiedlichen Werte am Empfänger greifen? Ich weiss nur, wie ich die ganzen Daten aus der seriellen Schnittstelle auslese. Aber wie kann ich am Empfänger z.B. nur auf den 1.Sensorwert zugreifen?

Du müsstest schon mal beschreiben, über welche serielle Schnittstelle du die Sensordaten überträgst.

Im Sender sehe I2C, im Empfänger sehe ich nichts.

Bin absoluter Anfänger und hab noch nie was von serieller Schnittstelle gehört.

Versuche anhand von Tutorials mir die Kommunikation aufzubauen, dass ich einigermaßen verstehe, was da passiert.

Würde deine Frage also gerne beantworten, weiss aber nicht, was du meinst...

Mach eine vernünftige nichtblockierende Einleseroutine, die die Daten in einem c-string (char array, NICHT String Objekt) zwischenspeichert. Beispiele gibt es gute hier im Forum.
Such dann in dem eingelesenen String nach "Temperatur-Station 1: " und nimm den Wert, der danach kommt, mit atoi(). Wie man in einem char array sucht, musst du auch lernen.

amanera:
Bin absoluter Anfänger ...

Dann solltest Du Dir unbedingt angewöhnen, „schöneren“ Code zu schreiben.

Damit meine ich z. B., dass Du die Dinge passend einrückst und Klammern so setzt, dass man nicht erst suchen muss, wo ein Block anfängt und aufhört.

Damit hilfst Du nicht nur denjenigen, die Deinen Code lesen und verstehen sollen, sondern das hilft insbesondere Dir, Fehler zu vermeiden und den Überblick nicht zu verlieren.

Das ist einfach nur ein nett gemeinter Rat und ich würde Dir gerne einen Link bieten, der das, was ich meine, verdeutlicht. Aber ich kenne keine solche Seite.

Als schnelle Sofortmaßnahme: Lasse Deinen Code mal von der IDE formatieren. „Werkzeuge/Automatische Formatierung“ (Strg-T) ist schonmal ganz gut.

Gruß

Gregor

amanera:
Bin absoluter Anfänger und hab noch nie was von serieller Schnittstelle gehört.

Versuche anhand von Tutorials mir die Kommunikation aufzubauen, dass ich einigermaßen verstehe, was da passiert.

Würde deine Frage also gerne beantworten, weiss aber nicht, was du meinst...

Da machst du mich jetzt aber sprachlos. :relaxed:
Du schreibst von einer seriellen Schnittstelle die Daten übertragen soll, kannst aber nicht sagen was das ist.

Dann lerne bitte die Grundlagen, damit du uns verstehst.
Du hast in deinem Sketch die I2C-Library eingebunden, wofür ?

ich würde sagen, für den 2. Sensor mlx90615

ElEspanol:
ich würde sagen, für den 2. Sensor mlx90615

Ja, stimmt.
Aber warum nimmt er nicht die Hardwar-I2C ?

weil das vermutlich nur zusammen kopiert wurde. Davon ist auszugehen, wenn man die eigentliche Frage betrachtet

ElEspanol:
weil das vermutlich nur zusammen kopiert wurde. Davon ist auszugehen, wenn man die eigentliche Frage betrachtet

Somit liege ich mit meiner Aussage Post #5 richtig.

Der TO sollte erst mal lernen und dann wieder kommen.

Hier sind zwei Optionen um Zahlen zu übertragen:
http://forum.arduino.cc/index.php?topic=359203.msg2486412#msg2486412

Das Linefeed bekommst du einfach wenn du am Ende println() machst (macht genaugenommen CR+LF, aber das CR wird verworfen)

HotSystems:
Somit liege ich mit meiner Aussage Post #5 richtig.

Der TO sollte erst mal lernen und dann wieder kommen.

Genau deswegen ist der TO ja hier, um zu lernen

Etwas weniger von oben runter und etwas mehr Information würden ihm helfen.

Mein Junior ist 8, deswegen bin ich jetzt hier. Er will/soll programmieren lernen. Und so ein Arduino ist da nicht das schlechteste, weil was blinkt und was bewegt. Er kopiert sich aber auch nur Dinge zusammen oder schreibt sie ab. Den Rest muss ich ihm erklären so gut es geht. Und so nach und nach versteht er warum es so funktioniert und was er da eigentlich macht.

So fängt nunmal jeder an, ob 8 oder 80. Nur weils den Arduino seit ca 6-7 jahren gibt heist das nicht, das es nicht auch nich blutige Anfänger gibt die nicht wissen was serielle Schnittstelle ist. Aber die wissen, wenn 2 Geräte mit speziellen Kabeln verbindet und den richtigen Code kopiert funktioniert irgendwas.

So fängt nunmal jeder an, ob 8 oder 80. Nur weils den Arduino seit ca 6-7 jahren gibt heist das nicht, das es nicht auch nich blutige Anfänger gibt die nicht wissen was serielle Schnittstelle ist. Aber die wissen, wenn 2 Geräte mit speziellen Kabeln verbindet und den richtigen Code kopiert funktioniert irgendwas.

Ich verstehe deine Argumentation, bin aber andererseits auch nicht bereit hier Wikipedia vorzulesen.
Wir alle mussten die Sprachen lernen, welche wir verwenden. Dazu gibt es gute Bücher und fertige Tutorials.
Auch diese werde ich nicht vorlesen.
Ebenso liegt das Datenblatt des verwendeten Prozessor als PDF vor. Dieses freut sich darauf, gelesen zu werden.

Wir können sicherlich bei konkreten Problemen helfen. Anstöße liefern.
Aber das lernen an sich, können wir keinem abnehmen, das ist ein individueller Prozess, wo jeder selber durch muss.

Tipp:
Wenn man nicht weiß, was eine serielle Schnittstelle ist, kann man "serielle Schnittstelle" in Google rein hacken.
Zusätzlich kann man das Datenblatt des Prozessors befragen, welche seriellen der Baustein überhaupt bedienen kann.
Und auch die Arduino Referenz ist da recht auskunftsfreudig.

Ich habe Google("serielle Schnittstelle") mal gemacht, und möchte diese Lektüre empfehlen: http://www.netzmafia.de/skripten/hardware/Control/schnittstellen.pdf

chefin:
Genau deswegen ist der TO ja hier, um zu lernen

Etwas weniger von oben runter und etwas mehr Information würden ihm helfen.

Mein Junior ist 8, deswegen bin ich jetzt hier. Er will/soll programmieren lernen. Und so ein Arduino ist da nicht das schlechteste, weil was blinkt und was bewegt. Er kopiert sich aber auch nur Dinge zusammen oder schreibt sie ab. Den Rest muss ich ihm erklären so gut es geht. Und so nach und nach versteht er warum es so funktioniert und was er da eigentlich macht.

So fängt nunmal jeder an, ob 8 oder 80. Nur weils den Arduino seit ca 6-7 jahren gibt heist das nicht, das es nicht auch nich blutige Anfänger gibt die nicht wissen was serielle Schnittstelle ist. Aber die wissen, wenn 2 Geräte mit speziellen Kabeln verbindet und den richtigen Code kopiert funktioniert irgendwas.

Boah, da hast du dem TO aber echt geholfen.

Allerdings kann ich keinerlei helfende Informationen sehen, die du selbst ansprichst.
Also bitte nicht runter fallen. :wink:

Falls du es noch nicht gemerkt hast, wir helfen hier allen, aber die müssen schon verstehen, was wir denen schreiben. Ohne eigene Initiative wird das leider nichts.

@amanera
Mit einfachen Worten zu den seriellen Schnittstellen:

Da werden die Daten zwischen den einzelnen Geräten/Modulen seriell, also hintereinander übertragen.
Dadurch ist die Datenübertragung teilweise etwas langsamer.
In deinem Fall verwendest du I2C zur Steuerung des Sensors und seriell zur Anzeige am seriellen Monitor. Beides kannst du zur Datenübertragung einsetzen.

Du musst jetzt entscheiden (Der Link von combie ist dafür ausgezeichnet) welche Schnittstelle du verwenden möchtest.

Ein Tipp für die I2C-Schnittstelle:
Um einen I2C-Sensor zu betreiben, brauchst du nicht unbedingt die I2C-Master. Den Sensor kannst du auch direkt an die Hardware-I2C des Uno anschließen.

Ich bin beim Arduino nicht fit genug um jetzt selbst gleich zu wissen, wie das umgesetzt wird. Ich Kann dir gerne sagen, wie man Profibus programmiert oder auch KNX. Auch mit GPIO habe ich zu tun.

Hilft nur hier nicht weiter.

Man muss auch nicht Wikipedia vorlesen, aber man kann die richtigen Stichworte einwerfen. Und das halt ohne dabei den Eindruck zu erwecken der Threadstarter wäre zu Dumm um aus dem Bus zu kucken.

Im zweiten Posting konntest du es dann ja viel besser rüber bringen. Hätte weiter oben aber auch schon funktioniert

chefin:
Hätte weiter oben aber auch schon funktioniert

Nein, das es unbedingt deinen Kommentar dazu braucht.

Kritik üben, ohne selbst konstruktiv zu sein, braucht hier keiner.