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
struct-Objekt - Werte zuweisung zeigt merkwürdiges Verhalten
31.01.2020, 09:43
Beitrag #1
struct-Objekt - Werte zuweisung zeigt merkwürdiges Verhalten
Moin!

die intensiven Leser werden einen Zusammenhang zu anderen Threads sicherlich sehen. Aber da ich der Auffassung bin das hat nicht ganz etwas mit den anderen zu tun hier ein neues Posting.

Hinweis: der gesamte Sketch ist angehängt.

Ich habe ein struct-Objekt definiert:
Code:
struct _Signal {
  //String ref;
  byte pin_led_go;
  byte pin_led_stop;
  byte pin_relais;
  int status;
};

Das wird dann für zwei Signale belegt:
Code:
Signal[0].pin_led_go = 11; //---------- anpassen
    Signal[0].pin_led_stop = 12; //---------- anpassen
    Signal[0].pin_relais = 1; //---------- anpassen
    Signal[0].status = 0;

    // --- Fahrtrichtung "weite Welt"
    Signal[1].pin_led_go = 11; //---------- anpassen
    Signal[1].pin_led_stop = 12; //---------- anpassen
    Signal[1].pin_relais = 1; //---------- anpassen
    Signal[1].status = 0;

In einer Funktion werden Aktionen ausgeführt und dann wird der Status umgestellt. Bei dem Funktionsaufruf wird der Index übergeben um zu definieren welcher Datensatz zur Anwendung kommt.
Code:
void SwitchSignal(int Index)
{
  Serial.println("==========================");
  Serial.println("----> SwitchSignal");
  char buf[20];
  Serial.print("----> Index:=");
  Serial.println(Index);
  Serial.print("----> Status aktuell:=");
  Serial.println(Signal[Index].status);
  if (Signal[Index].status  == 0){ // --> GO
    Signal[Index].status = 1; // neuen Status setzen
  Serial.print("----> Status setzt:=");
  Serial.println(Signal[Index].status);
      
    sprintf(buf, "led_go_%02d 1\n", Index);
    bluetooth.println(buf);
    Serial.println(buf);  
    
    sprintf(buf, "led_stop_%02d 0\n", Index);
    bluetooth.println(buf);
    Serial.println(buf);
    
  } else { // --> STOP
    Signal[Index].status = 0; // neuen Status setzen
      Serial.print("----> Status setzt:=");
  Serial.println(Signal[Index].status);

    sprintf(buf, "led_go_%02d 0\n", Index);
    bluetooth.println(buf);
    Serial.println(buf);
    
    //bluetooth.println("led_go_00 1\n");
    sprintf(buf, "led_stop_%02d 1\n", Index);
    bluetooth.println(buf);
    Serial.println(buf);
  
  }
  bluetooth.println("--> erfolgt");
  Serial.println("--> erfolgt");
}//end-Action

Betrachte ich die Ausgabe auf den Monitor, dann ist für Index=0 alles ok
Zitat:Eingabe Switch 0
==========================
----> SwitchSignal
----> Index:=0
----> Status aktuell:=0
----> Status setzt:=1
led_go_00 1

led_stop_00 0

--> erfolgt
Eingabe Switch 0
==========================
----> SwitchSignal
----> Index:=0
----> Status aktuell:=1
----> Status setzt:=0
led_go_00 0

led_stop_00 1

--> erfolgt

Es wird auch der Status umgestellt.

Aber beim Aufruf mit Index=1 kommt dieses und der STATUS-Wert zeigt für mich ein merkwürdiges Verhalten.
Zitat:Eingabe Switch 1
==========================
----> SwitchSignal
----> Index:=1
----> Status aktuell:=26995
----> Status setzt:=0
led_go_01 0

led_stop_01 1

--> erfolgt
Eingabe Switch 1
==========================
----> SwitchSignal
----> Index:=1
----> Status aktuell:=26995
----> Status setzt:=0
led_go_01 0

led_stop_01 1

--> erfolgt

Kann mir das einer erklären oder sagen was ich falsch gemacht habe?

Gruß Jan


Angehängte Datei(en)
.ino  Blocksignal_Bruhnkaten.ino (Größe: 5,01 KB / Downloads: 28)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
31.01.2020, 10:10 (Dieser Beitrag wurde zuletzt bearbeitet: 31.01.2020 10:14 von MicroBahner.)
Beitrag #2
RE: struct-Objekt - Werte zuweisung zeigt merkwürdiges Verhalten
Hallo Jan,
Du legst nur ein Element deines struct an:
Code:
#define SignalCount 2 // Anzahl der Signale
....
_Signal Signal[SignalCount - 1];
Damit überschreibt dein Index 1 irgendwelche andere Werte im Ram.
Du musst beim Anlegen des Array schon die tatsächliche Elementzahl angeben. Nur dein maximaler Index ist dann Anzahl-1

Anzahl 2: Index 0 und 1

Gruß, Franz-Peter
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
31.01.2020, 10:54 (Dieser Beitrag wurde zuletzt bearbeitet: 31.01.2020 11:01 von Jan99.)
Beitrag #3
RE: struct-Objekt - Werte zuweisung zeigt merkwürdiges Verhalten
(31.01.2020 10:10)MicroBahner schrieb:  Hallo Jan,
Du legst nur ein Element deines struct an:
Code:
#define SignalCount 2 // Anzahl der Signale
....
_Signal Signal[SignalCount - 1];
Damit überschreibt dein Index 1 irgendwelche andere Werte im Ram.
Du musst beim Anlegen des Array schon die tatsächliche Elementzahl angeben. Nur dein maximaler Index ist dann Anzahl-1

Anzahl 2: Index 0 und 1

Hi!

danke - das war wohl ein großes Brett vor dem Kopf.

Aber ich wollte gerne die Anzahl der Signale in einer Konstanten hinterlegen.

Das wäre dann ja

Code:
_Signal Signal[SignalCount];

Aber auch das wirft noch Fehler:
Zitat:Blocksignal_Bruhnkaten:29:21: error: expected unqualified-id before numeric constant

#define SignalCount 2 // Anzahl der Signale

^

G:\Modellbahn\Elektronik\Bruhnkarten_Signale\Blocksignal_Bruhnkaten\Blocksignal_​Bruhnkaten.ino:32:5: note: in expansion of macro 'SignalCount'

int SignalCount = 2; // Anzahl der Signale

Jan
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
31.01.2020, 12:10
Beitrag #4
RE: struct-Objekt - Werte zuweisung zeigt merkwürdiges Verhalten
Du kannst nicht 2 mal Signalcount definieren.
Lass beides weg und nimm:
Code:
const byte SignalCount = 2;

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
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  Werte im Sketch in Variablen speichern Bitklopfer 4 230 06.09.2020 10:25
Letzter Beitrag: Bitklopfer
  Serielle Werte in String einlesen um damit zu rechnen 425t 2 240 26.08.2020 13:19
Letzter Beitrag: 425t
  Merkwürdiges Verhalten mit Timer1 am Nano Craiden 2 379 28.07.2020 11:56
Letzter Beitrag: Retian
  NodeMCU steuert Nano und sendet Werte an Maria DB daniel_hh 11 932 15.07.2020 15:26
Letzter Beitrag: Tommy56
  Array Werte in einen String ChriscoGT 3 556 12.05.2020 15:41
Letzter Beitrag: Tommy56
  Merkwürdiges Verhalten einer globalen Variable Anders_Hamburg 6 651 29.03.2020 10:46
Letzter Beitrag: Fips
  Umwandlung eines Strings in ein time_t-Objekt jalu4601 1 541 02.01.2020 10:56
Letzter Beitrag: RolandF
  zwei Werte im Eeprom ablegen senseman 2 928 14.12.2019 22:50
Letzter Beitrag: senseman
  DS3234 Werte auf Nextion Kurt 10 1.330 01.12.2019 16:27
Letzter Beitrag: Kurt
  I2C: Arduino DUE -- DS3231: Merkwürdiges Problem GuaAck 9 1.485 16.11.2019 22:39
Letzter Beitrag: hotsystems

Gehe zu:


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