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
Arbeiten mit Arrays
07.03.2019, 11:16
Beitrag #17
RE: Arbeiten mit Arrays
Hallo Franz-Peter,

ich habe die Zeichnung gleich für eine Weiche mehr erstellt.

Jetzt noch einmal etwas "radiert" mit 2 Gleisen und einer Weiche wobei zu bedenken ist, dass aus Gleis 1 der Index 0 wird (nullbasiertes zählen)

   

Was soll das Programm machen?
* beide Gleise sind mit je einem Zug belegt.
* einer starte und fährt eine Runde.
* Am Reseter merkt das Programm, dass das Gleis auch verlassen wurde.
* Zug fährt wieder in sein altes Gleis ein.
* löst Signal aus.
* es wird ermittelt, welcher Zug jetzt weiter fährt und schaltet ggf. die Weichen um.

Man muss dazu wissen, dass Weichen von Rokuhan zum Einsatz kommen. Die können den Strom so schalten, dass das nicht befahrene Gleis dann automatisch stomlos geschaltet wird. Da zwei zum Einsatz kommt und diese gleichzeitig geschaltet werden - ist dann das ganze Gleis im Abschnitt des Zuges stromlos. Ein anderes wird mit Strom versorgt beim Schalten und dann kann somit der Zug starten.

Verständlicher?

Gruß Jan
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
07.03.2019, 14:10
Beitrag #18
RE: Arbeiten mit Arrays
Hallo Jan,
(07.03.2019 11:16)Jan99 schrieb:  Verständlicher?
ja, so wird das doch schon deutlich klarer. Nachdem Du den Gleisplan gezeigt hattest, habe ich mir schon gedacht, dass es in die Richtung hinausläuft. Wobei das mit den 3 Gleisen ja kein Fehler war. Ich denke, dass Programm sollte gleich so strukturiert werden, dass es auch für mehr Gleise funktioniert.

Willst Du auch einen Start/Stop Knopf integrieren? Sonst läuft das ganze ja sofort los, wenn Du den Strom einschaltest. Oder willst Du das nur über den Fahrregler festlegen, ob die Züge fahren.

Bleibt noch die Frage, wie die Sensoren funktionieren. Geben die nur ein kurzes Signal, wenn ein Zug drüberfährt, oder sind die dauerhaft aktiv, wenn ein Zug im Gleis steht?

Was Du auf jeden Fall machen solltest, ist die konstanten Werte ( PinNr. ) bereits beim Definieren der Variablen festlegen. Wie das geht, wurde dir ja schon ein paar mal gezeigt.
Und Du musst zwischen Gleis und Weiche unterscheiden, denn Du hast ja immer ein Gleis mehr als Weichen. Die Zahl der Gleise kannst Du mit der Zahl der Sensoren verknüpfen, denn jedes Gleis hat ja genau einen Sensor.
Dann wäre es auch kein Fehler, wenn Du dich schonmal mit dem Prinzip des 'endlichen Automaten' beschäftigst Wink . Denn darauf wird dein Programm hinauslaufen.

N.B. noch ein kleiner Tip zur Benennung der Variablen. Das ist zwar nicht unbedingt notwendig, dem Compiler ist das egal. Es gibt aber ein paar 'stillschweigende Vereinbarungen' .
Konstante Werte, die Du mit #define festlegst, werden üblicherweise mit Großbuchstaben geschrieben.
Bei Typvereeinbarungen ( bei dir die 'struct' ) ist es übersichtlich, da ein '_t' an den Namen anzuhängen. Und Namen die mit '_' beginnen, sind üblicherweise private Variable in Klassen. Ok, da hast Du jetzt noch nichts mit am Hut ( und vielleicht ändert sich das auch nie Wink ). Aber es schadet nicht, das dann für 'normale' Anwendungen nicht so zu machen.

Gruß, Franz-Peter
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
07.03.2019, 15:36
Beitrag #19
RE: Arbeiten mit Arrays
Hallo Franz-Peter,

danke für die Rückmeldung.

Du hast das geplante System richtig erkannt. Wink

Start-Knopf derzeit nicht geplant - das ist noch offen.

Derzeit habe ich noch IR-Sensoren vorhanden. Es sollen aber einmal andere Signalgeber an die Gleise angebunden werden. Noch offen.

Zur Endlichen Automation werde ich mal suchen ...

Die Pin-Belegung werde ich dann noch nachrüsten - gleiches gilt für die Variablenbenennung.

Aber wie gestalte ich es nun am besten mit den Gleisen und den zugehörigen Einstellungen, wie ich schon geschrieben habe und für _Gleis angedacht hatte?

Gruß Jan[/align]
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
07.03.2019, 20:35 (Dieser Beitrag wurde zuletzt bearbeitet: 07.03.2019 21:03 von MicroBahner.)
Beitrag #20
RE: Arbeiten mit Arrays
Hallo Jan,
ich glaube, Du machst den 2. Schritt vor dem erstenRolleyes.
Erst must Du dir den Ablauf im Detail klarmachen - dann kannst Du ans Programmieren gehen, und weist dann auch, was Du benötigst und welche Variablen und Merker Du einrichten musst. Im Moment sehe ich z.B. noch gar nicht, wozu Du den Reset-Sensor brauchst.
Wenn ein Zug startet werden die Weichen am Eingang und Ausgang des Gleis gestellt und der Zug fährt los. Dann kannst Du doch nur noch warten, bis der Zug wieder im Gleis ankommt. Und dann wird der nächste Zug gestartet - Wozu also den Reset-Pin?

Bei den Gleissensoren ist noch wichtig, ob die eindeutig auch melden ob ein Gleis belegt ist, wenn der Zug dort steht. Oder wird nur beim Überfahren ein Impuls ausgelöst. Denn wenn der Arduino startet - kann er dann erkennen, wo ein Zug steht und wo nicht?
Wie findet ein Zugwechsel statt. Willst Du da eine kleine Pause? Dann musst Du auch die Fahrspannung abschalten können. Sonst gibt es ja mit dem Umschalten der Weichen sofort einen 'fliegenden Wechsel'.

(07.03.2019 15:36)Jan99 schrieb:  Aber wie gestalte ich es nun am besten mit den Gleisen und den zugehörigen Einstellungen, wie ich schon geschrieben habe und für _Gleis angedacht hatte?
Es gibt so den alten Programmiererspruch: Stelle 5 Programmierern die gleiche Aufgabe und Du bekommst ( mindestens Wink ) 6 Lösungen.

Ich lege gern am Anfang des Sketches die HW-spezifischen Dinge fest. Muss mal etwas umverdrahtet werden, so muss ich nur dort anpassen, der Rest bleibt gleich. Das könnte bei dir z.B. so aussehen:
Code:
// Pinbelegungen
const byte SensorResetPin = 6;  // nötig??
const byte GleisSensPin[] = { 6, 7, 8 } ;
const byte GleisCount = sizeof( GleisSensPin );  // funktioniert so nur, da gleisSensPin 'byte' ist

const struct {
    byte pinLinks;
    byte pinRechts;
} Weiche[] = { { 9, 10 } , { 11, 12 } } ;
const byte WeichenCount = sizeof( Weiche ) / sizeof(Weiche[0]);

Als nächstes würde ich dann eine Tabelle mit den notwendigen Weichenstellungen für die Gleiszufahrt definieren:
Code:
// Tabelle der Weichenstellungen für die Gleiszufahrt
enum WStellung { LINKS, RECHTS, EGAL };
const WStellung WeichenZuGleis[GleisCount][WeichenCount] = {
    { RECHTS, EGAL } ,
    { LINKS,  RECHTS } ,
    { LINKS, LINKS }
};
Danach wären dann die globalen Variablen zu definieren. Da muss man aber schon den Ablauf im Detail wissen ( zumindest für den 'ersten Wurf' ), um zu entscheiden, was benötigt wird. Deshalb die Überlegungen oben.

Gruß, Franz-Peter
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
08.03.2019, 06:59
Beitrag #21
RE: Arbeiten mit Arrays
Moin!

Zitat:Im Moment sehe ich z.B. noch gar nicht, wozu Du den Reset-Sensor brauchst.

Das ist erforderlich. Wenn ich mit einer Lichtschranke (IR) oder auch mit einem Gleisesensor arbeite, dann kann es immer noch passieren, dass die Wagen oder der hintere Teil der Lok wieder einen Gleisbefahrung melden und dann klemmt es einfach ...

Mit dem Reset - ist fest definiert, wenn der Bahnhof verlassen wurde.

Was ich suche wird vermutlich der hintere Code-Block sein. Allerdings habe ich mir diesen noch nicht so ganz verinnnerlicht.

Vorerst Gruß
Jan
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
08.03.2019, 09:37 (Dieser Beitrag wurde zuletzt bearbeitet: 08.03.2019 10:06 von MicroBahner.)
Beitrag #22
RE: Arbeiten mit Arrays
Hallo Jan,
das verstehe ich noch nicht so ganz. Wer meldet da wie eine 'Gleisbefahrung'? Du solltest nochmal genau beschreiben, wie deine Gleissensoren arbeiten und wann sie unter welchen Umständen ein Signal abgeben. Das ist essentiell für den gesamten Ablauf.
Mit deinem Reset-Sensor stellt sich auch die Frage, wie der in den Ablauf eingebunden werden soll. Was genau soll passieren, wenn der anspricht?

N.B. zu Ablaufsteuerungen mit dem Arduino habe ich mal hier ein Tutorial speziell für ModellbahnerWink geschrieben. Als Beispiel ist da zwar eine andere Funktion hergenommen ( Wechselblinker und Ampelsteuerung ) und es geht schwerpunktmäßig auch um Zeitsteuerung ohne delay(). Das Prinzip ist aber eigentlich immer dasselbe, und ob das Umschalten der Zustände durch Zeitablauf, oder durch ein externes Ereignis ( Sensor ) erfolgt ist egal. Vielleicht hilft dir das ja auch ein wenig, wie man so eine Ablaufsteuerung ('Endlicher Automat') programmiert. Und die Zeitsteuerungen ohne delay() wirst Du wohl auch noch brauchen.

P.S. Ich glaub' ich hab's jetzt verstanden: Ist es richtig, dass dein Gleissensor beim Überfahren des Zuges mehrfach ein- und ausschalten kann? Dann kann dein 'Reset-Sensor' den Ablauf in der Tat vereinfachen.
Wie ist das dann aber, wenn der Zug im Gleis steht. Ist es dann auch möglich, dass der Sensor da auf 'Aus' steht, und den Zug nicht meldet?

Gruß, Franz-Peter
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
08.03.2019, 10:02
Beitrag #23
RE: Arbeiten mit Arrays
hi !

ich lese mir das mal durch. Den entgültigen Sensor gibt es noch nicht und deshalb wollte ich für das Develop erst einmal mit IR-Sensoren arbeiten.

Gruß Jan
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
08.03.2019, 10:10 (Dieser Beitrag wurde zuletzt bearbeitet: 08.03.2019 10:32 von MicroBahner.)
Beitrag #24
RE: Arbeiten mit Arrays
(08.03.2019 10:02)Jan99 schrieb:  Den entgültigen Sensor gibt es noch nicht und deshalb wollte ich für das Develop erst einmal mit IR-Sensoren arbeiten.
Wie das Programm aufgebaut werden muss, hängt aber schon von der Arbeitsweise der Sensoren ab. Wird es da Unterschiede geben, wenn die endgültigen Sensoren eingebaut sind? Wie arbeiten die denn?
Leider beantwortest Du meine Fragen zu den Sensoren nicht.

Gruß, Franz-Peter
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  Brauche Hilfe bei Arrays mega-hz 23 1.236 10.07.2019 15:59
Letzter Beitrag: MartinZ
  mehrdim. Arrays wert der ersten dimension ausgeben sepp01 19 1.663 14.10.2018 06:55
Letzter Beitrag: sepp01
  mit Mengen(?) arbeiten uweq 16 1.929 12.08.2018 19:10
Letzter Beitrag: uweq
  Arrays of String in C Diskusguppy 3 1.346 16.12.2017 10:12
Letzter Beitrag: Diskusguppy
  Ablaufstruktur beim arbeiten mit Sensorwerten? Jan_OL 22 4.261 02.11.2017 00:08
Letzter Beitrag: georg01
  Übergabe von Arrays an Funktionen Marcel 4 2.452 31.10.2017 13:28
Letzter Beitrag: Tommy56
  Arbeiten mit millis Franz54 5 1.784 07.03.2017 20:43
Letzter Beitrag: Tommy56
  große 2-dim float-Arrays schnell auf SD speichern und zurücklesen? HaWe 25 5.035 22.06.2015 14:41
Letzter Beitrag: Thorsten Pferdekämper
  wieder mal: Problem mit arrays als Fkt.-Parameter HaWe 13 3.331 13.05.2015 09:29
Letzter Beitrag: Thorsten Pferdekämper
  einfache Initialisierung mehrdim. Arrays HaWe 8 2.950 29.04.2015 11:17
Letzter Beitrag: HaWe

Gehe zu:


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