Forum: Compiler & IDEs Problem mit ser. Monitor in for-Schleife


von Michael (oti)


Angehängte Dateien:

Lesenswert?

Hänge an einer for Schleife, in der die USER-ID und Adressen zweier 
DS18B20 ausgegeben werden sollen.

Code:
void setup(void) {
  Serial.begin(115200);
  DS18B20.begin();
  Numbers_Of_18B20 = DS18B20.getDeviceCount();
  Serial.println("Anzahl Sensoren:\t" + String(Numbers_Of_18B20));
  if (Numbers_Of_18B20 >0){            //Hole Adressen und Userbytes
    for (int i=0; i < Numbers_Of_18B20; i++)   {  //Numbers_Of_18B20
      DS18B20_Address[8]=DS18B20.getAddress(DS18B20_Address, 1);
      Serial.print("\n\rSensor " + String(i+1)); Serial.print(":\t"); 
print_8bit_Array(DS18B20_Address);   // i. Adresse
      Serial.print("\tSensorID:\t" + 
String(DS18B20.getUserData(DS18B20_Address)));    // i. ID

/*      DS18B20_Address[8]=DS18B20.getAddress(DS18B20_Address, i); 
// hole Adresse 1. Sensor am Anfang
      Serial.print("\n\rSensor " + String(1+1)); Serial.print(":\t"); 
print_8bit_Array(DS18B20_Address);   // 2. Adresse
      Serial.print("\tSensorID:\t" + 
String(DS18B20.getUserData(DS18B20_Address)));*/
 }
 }
}
Der serielle Monitor gibt immer nur 1. Adresse aus. Nehme ich den 
globalen kommentar heraus und eliminiere die for-SChleife wirden alle 
Adressen angezeigt. Ersetze ich den Schleifencode durch println(i) ist 
alles ok.
Nun habe ich keine IDEE mehr. Vllt einer von euch?

Sollen 2 Frühbeetheizungen gesteuert werden. Damit meine Frau die 
Sensoren im Bedarfsfall selbst wechseln, sollen sie als Sensor 1/2 
angesprochen werden.

Danke und schönen Sonntag noch. Die main im Anhang
Nachtrag: 1 main hat fehler in schleife steht 1 statt i, Deshalb main 
nochmal. Setze ich i von hand (i=1) wird 2. Sensor angezeigt, i=2 for 
wird nicht ausgeführt.

: Bearbeitet durch User
von Oliver S. (oliverso)


Lesenswert?

> uint8_t DS18B20_Address[8];
>...
> DS18B20_Address[8]=...

ist schon mal ein Ritt ins Verderben. Den Rest habe ich mir nicht 
angeschaut.

Oliver

von Michael (oti)


Lesenswert?

und warum und wenn, welche Alternative?

gruß

von Andreas S. (Firma: Schweigstill IT) (schweigstill) Benutzerseite


Lesenswert?

Michael schrieb:
> und warum und wenn, welche Alternative?

Beschäftige Dich erst einmal mit den allereinfachsten Grundlagen von 
C/C++, bevor Du hier solch einen Schrottcode hinrotzt und selbst bei 
einem direkten Hinweis auf einen schweren Fehler völlig ahnungslos tust.

von Sebastian W. (wangnick)


Lesenswert?

Andreas S. schrieb:
> [Kasernenhofton]

Gute Güte. Und höchstwahrscheinlich hält der Autor diesen Beitrag für 
absolut konstruktiv und hilfreich ...

Michael schrieb:
> und warum und wenn, welche Alternative?

DallasTemperature::getAddress ist so definiert:
1
bool getAddress(uint8_t*, uint8_t)
Der Rückgabewert gibt an, ob die Adresse erfolgreich gefunden wurde. Du 
speichert diesen Rückgabewert in DS18B20_Address[8], also an Stelle 9 in 
deinem 8-stelligen Array -> Oops.

LG, Sebastian

: Bearbeitet durch User
von Michael (oti)


Lesenswert?

Sebastian W. schrieb:
> Andreas S. schrieb:
>> [Kasernenhofton]
>
> Gute Güte. Und höchstwahrscheinlich hält der Autor diesen Beitrag für
> absolut konstruktiv und hilfreich ...
>
> LG, Sebastian

Ich freue mich immer, wenn es Experten gibt. Erinnern mich sehr an 
manche Minister. Wahrscheinlich kann er es nicht in einen Satz (ohne 
Nebensatz) formulieren.

LG, M.

von Michael (oti)


Lesenswert?

Sebastian W. schrieb:
> Andreas S. schrieb:
>
> DallasTemperature::getAddress ist so definiert:
>
1
> bool getAddress(uint8_t*, uint8_t)
2
>
> Der Rückgabewert gibt an, ob die Adresse erfolgreich gefunden wurde. Du
> speichert diesen Rückgabewert in DS18B20_Address[8], also an Stelle 9 in
> deinem 8-stelligen Array -> Oops.
>

thx. guck ich mir morgen an. muss gleich meine familie anfangen zu 
verköstigen (verfressende Bande).

schönen Abend M.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.