Forum: Mikrocontroller und Digitale Elektronik Algorithmus für Modellwahl


von Frank (Gast)


Lesenswert?

Hallo,

ich bin gerade dabei einen kleinen Algorithmus für eine Modellwahl zu 
schreiben. Leider komm ich im Moment nicht wirklich weiter. Vielleicht 
hat hier jemand nen guten Tip für mich.

Es geht darum Modelle nacheinander an einer Station anzumelden. Nehmen 
wir mal an es sind drei Modelle mit ihren Kennungen 10, 20, 30. Diese 
drei Modelle versuchen sich gleichzeitig anzumelden. Jedoch kann immer 
nur ein Modelle angemeldet sein und Daten austauschen.

Beim allerersten Anmelden ist es rein Zufällig, welches Modell eine 
Verbindung aufbaut. Das ist ok. Nehmen wir an es ist Modell 3. Die 
Kennung 30 wird gespeichert, Daten ausgetauscht und die Verbindung 
beendet. Beim nächsten anmelden soll das Modell 3 aber erst einmal 
hinten angestellt werden, so das die anderen beiden sich Anmelden und 
Kennungen hinterlassen können. Wenn alle drei Modell ihre Kenung 
hinterlassen haben, soll das Anmelden bzw. die Verbindung im Wechsel 
geschehen.

Hätte da jetzt erst mal so angefangen:

unsigned char Kennung;    //Kennung der Modelle
unsigned char Modell[5];  //Array für 6 Modelle
unsigned char i = 0;
unsigned char d;

if((Modell[i] == 0) &&(!(Kennung == (Modell[i-1])))
{
  Modell[i] = Kennung;
  i++;
}

Haut leider nur für die ersten beiden Fahrzeuge hin, ab dem dritten 
könnte sich das erste auch wieder abmelden. Wäre super wenn mir einer 
nen guten Tip geben könnte.




von Stock H. (winkelmesser)


Lesenswert?

unsigned char Modell[5];  //Array für 6 Modelle

muss sein: unsigned char Modell[6]; //für 6 modelle

von Frank (Gast)


Lesenswert?

> muss sein: unsigned char Modell[6]; //für 6 modelle

Modell[0] ist das erste. Also reicht Modell[5] für 6 Modelle....

von dieter (Gast)


Lesenswert?

aber x[5] macht nur:

0 1 2 3 4

dieter

von Frank (Gast)


Lesenswert?

Ok,

dann wohl Modell[6]; Danke!

und irgendeine Idee für den Algorithmus?

von Peter D. (peda)


Lesenswert?

Das nennt sich Round-Robin.

Du hast nen Zähler, der auf ne Liste aller Modelle zeigt. Ist nichts zu 
tun, bleibt er stehen.

Ist ein Modell anzumelden, dann zählt er hoch und prüft, ob es dasjenige 
Modell ist. Er zählt solange, bis er es in der Liste findet.

Bis sich das gleiche Modell wieder anmelden kann, muß er also komplett 
rumgezählt haben, d.h. alle anderen Modelle kriegen erstmal ne Chance.


Peter

von Frank (Gast)


Lesenswert?

Hört sich gut an. Gibt es da irgendwo Beispiele zu...??

von Simon K. (simon) Benutzerseite


Lesenswert?

Frank wrote:
> Hört sich gut an. Gibt es da irgendwo Beispiele zu...??

Auf keinen Fall!

PS: http://www.google.de/search?q=round-robin+algorithm

von Frank (Gast)


Lesenswert?

Gut hab ich gefunden;-)

Aber fang ich jetzt erst mal klein an.

Ich denke der erste Schritt ist eine Liste oder ein Array, wo die 
verschiedenen Kennungen abspeichert werden. Natürlich dürfen Kennungen 
dort nicht doppelt vorkommen.

Das wäre mein erster Ansatz:

unsigned char Kennung;    //Kennung der Modelle
unsigned char Modell[6];  //Array für 6 Modelle
unsigned char i;

if(!(Kennung == 0))
{
  i = 0;

  while(!(Modell[i] == 0)) && (!(Kennung == Modell[i])))
  {
    i++;
  }

  Modell[i] = Kennung;
}

Müsste doch so klappen. Oder?

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.