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
DS 2401 One Wire
16.06.2014, 15:14
Beitrag #9
RE: DS 2401 One Wire
Hi,
Du versuchst doch gar keinen Vergleich in Deinem Coding, was kann da scheitern?
Versuch mal für jede der gefundenen Adressen einen Vergleich mit den beiden, die Du suchst.
Gruß,
Thorsten

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
16.06.2014, 15:44
Beitrag #10
RE: DS 2401 One Wire
Hi,

wie gesagt, ich kann leider keinen Vergleich starten, da schon am Anfang Fehlermeldungen kommen.

Wo ich ds.search mit der DeviceAddress vergleichen wollte, kam Fehler wegen unterschiedlicher Datentypen.

Mein Problem ist gerade, dass ich bei dem Aufbau des Vergleiches scheitere.


Mit freundlichen Grüßen

Robin
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
16.06.2014, 16:12
Beitrag #11
RE: DS 2401 One Wire
Hi,
ich kann auch nur vermuten, was Du vorhast. Mit ds.search kannst Du nichts vergleichen. ds.search liefert Dir nur "true" oder "false". Das zeigt an, ob eine Adresse gefunden wurde. Falls ja, dann wird diese Adresse in den Speicherbereich geschrieben, den Du als Parameter mitgibst.
Außerdem kannst Du auch nicht direkt sowas schreiben wie if(addr == sensor3), da Du dann nur die Zeiger vergleichst. Das dürfte immer false ergeben.
Versuche mal folgendes: Innerhalb Deiner discover-Methode und nach dem Aufruf von ds.search und auch nur dann, wenn ds.search erfolgreich war:
Code:
if(memcmp(addr, sensor3, 8) == 0) {
    Serial.println("Sensor3 gefunden");
};
...oder so ähnlich.
Wenn Du damit Fehlermeldungen bekommst, dann bitte das gesamte Coding (und zwar das, was die Fehlermeldungen erzeugt) zusammen mit dem genauen Text der Fehlermeldungen hier reinkopieren.
Gruß,
Thorsten

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
16.06.2014, 17:12 (Dieser Beitrag wurde zuletzt bearbeitet: 16.06.2014 17:16 von robin.)
Beitrag #12
RE: DS 2401 One Wire
Hi,

Danke Thorsten, dass funktioniert soweit. Kann ich darüber eine eindeutige Zuordnung machen? Also vorhanden und nicht vorhanden? Das soll später eine Schalterabfragung werden.

Mit != bekommen alle anderen Sensoren den Status für nicht gefunden.

Und wo hast du den Befehl memcmp her? (würde gerne wissen, was ich bearbeite, man lernt ja nie aus)


Mit freundlichen Grüßen

Robin
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
16.06.2014, 17:17
Beitrag #13
RE: DS 2401 One Wire
(16.06.2014 17:12)robin schrieb:  Danke Thorsten, dass funktioniert soweit.
Gut.
Zitat: Kann ich darüber eine eindeutige Zuordnung machen?
Ja. Jedes 1-Wire-Gerät hat eine eindeutige Adresse. D.h. das ist sogar vielleicht etwas zu eindeutig. Wenn Du einen Sensor austauschst, dann musst Du Deinen Sketch ändern.

Zitat:Und wo hast du den Befehl memcmp her? (würde gerne wissen, was ich bearbeite, man lernt ja nie aus)
Das ist eigentlich C- bzw. C++-Standard. Es gibt in dem Zusammenhang auch noch memcpy und memset. Siehe hier: http://www.cplusplus.com/reference/cstring/memcmp/

Gruß,
Thorsten

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
16.06.2014, 17:45 (Dieser Beitrag wurde zuletzt bearbeitet: 16.06.2014 17:48 von robin.)
Beitrag #14
RE: DS 2401 One Wire
Hallo,

ich habe mal versucht, über Merker das Problem zu lösen, klappt aber leider nicht, da der Zustand TRUE gehalten wird, auch wenn der Sensor nicht mehr verbunden ist.

Hat jemand noch eine Lösung?

Code:
Code:
............
if (M0 == TRUE)
{Serial.println(" SENSOR GEFUNDEN");
}
if (M0 == FALSE)
{Serial.println(" SENSOR NICHT GEFUNDEN");


}
Serial.print("Merker1: ");
Serial.println(M0);


  Serial.print("Suche nach 1-Wire Geräten...\n\r");
  while (ds.search(addr)) {
        Serial.print("\n\rGefunden \'1-Wire\' Gerät mit Adresse:\n\r");
    for ( i = 0; i < 8; i++) {
      Serial.print("0x");
      if (addr[i] < 16) {
        Serial.print('0');
      }
      Serial.print(addr[i], HEX);
      if (i < 7) {
        Serial.print(", ");
      }
    }
    if ( OneWire::crc8( addr, 7) != addr[7]) {
      Serial.print("CRC nicht korrekt!\n");
            return;
       }
      
      
       if(memcmp(addr, sensor21, 8) == 0) {
        M0 = TRUE;
    
  }
  }
  Serial.print("\n\r\n\rFertig!\r\n");
  ds.reset_search();
  return;

Es sollen halt nur die 2 Flanken ausgewertet werden, Sensor vorhanden, Sensor nicht vorhanden...
Kann man nicht irgendwie den Befehl für das Suchen auf dem Bus, auf eine Adresse reduzieren? Also so, dass man für jeden Sensor den Befehl ausführen müsste...

Mit freundlichen Grüßen

Robin
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
16.06.2014, 18:30
Beitrag #15
RE: DS 2401 One Wire
(16.06.2014 17:45)robin schrieb:  ich habe mal versucht, über Merker das Problem zu lösen, klappt aber leider nicht, da der Zustand TRUE gehalten wird, auch wenn der Sensor nicht mehr verbunden ist.
Warum sollte die Variable auch ihren Wert ändern bevor Du das im Coding sagst? Außerdem setzt Du M0 nur dann, wenn Du den Sensor gefunden hast. Wenn nicht, dann halt nicht...

Zitat:Hat jemand noch eine Lösung?
Es gibt immer mehrere...

Zitat:
Code:
if(memcmp(addr, sensor21, 8) == 0) {
        M0 = TRUE;
  }
Versuch mal sowas wie
Code:
M0 = (memcmp(addr, sensor21, 8) == 0);

Zitat:Es sollen halt nur die 2 Flanken ausgewertet werden, Sensor vorhanden, Sensor nicht vorhanden...
Eine Flanke ist eine Änderung, kein Zustand.

Zitat:Kann man nicht irgendwie den Befehl für das Suchen auf dem Bus, auf eine Adresse reduzieren? Also so, dass man für jeden Sensor den Befehl ausführen müsste...
Theoretisch könntest Du versuchen, aus dem Sensor etwas zu lesen und die CRC prüfen. Wenn Müll zurück kommt könnte man annehmen, dass der Sensor weg ist.
Wahrscheinlich wirst Du ja sowieso irgendwann versuchen, das Gerät auszulesen. Dann ergibt sich eine Fehlerbehandlung normalerweise sowieso.

Ansonsten könntest Du Dir so eine Funktion auch selbst schreiben. Im Prinzip der Discovery-Funktion eine Adresse mitgeben und eben mit der vergleichen. Wenn gefunden dann "return true", ansonsten (wenn keine Geräte mehr gefunden) "return false".

Gruß,
Thorsten

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
16.06.2014, 19:29
Beitrag #16
RE: DS 2401 One Wire
Hallo Thorsten,

erstmal vielen Dank für deine Hilfe. Das eine Flanke, ein Zustandsänderung ist, ist mir bekannt. (SPS Programmierung)

Also dein Beispiel funktioniert, vielen Dank.
M0 auf FALSE konnte ich nicht setzen, da er sonst bei den anderen Sensoren FALSE geschrieben hat.

Danke für die Unterstützung und schönen Abend noch.


Mit freundlichen Grüßen

Robin
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  DUE und WIRE Stephan_56 9 987 14.03.2016 21:36
Letzter Beitrag: Stephan_56
  1-Wire gemischte Versorgung? rkuehle 0 899 02.03.2014 18:48
Letzter Beitrag: rkuehle

Gehe zu:


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