mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Algorithmus für Modellwahl


Autor: Frank (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.




Autor: Stock Hecht (winkelmesser)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
unsigned char Modell[5];  //Array für 6 Modelle

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

Autor: Frank (Gast)
Datum:

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

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

Autor: dieter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
aber x[5] macht nur:

0 1 2 3 4

dieter

Autor: Frank (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ok,

dann wohl Modell[6]; Danke!

und irgendeine Idee für den Algorithmus?

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Frank (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hört sich gut an. Gibt es da irgendwo Beispiele zu...??

Autor: Simon K. (simon) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Frank (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.