Calliope mini - Spaß durch Programmieren

Listen übertragen

Ziel: Von einem Calliope wird auf einen anderen Calliope eine Liste von Zahlen übertragen. Die Listenelemente werden auf dem Empfänger in der richtigen Reihenfolge in eine neue Liste eingetragen.

Das Problem besteht darin, dass mit dem Befehl zum Senden einer Information immer nur eine Zahl übertragen werden kann. Es müssen aber zwei Informationen gesendet werden: Die eigentliche Zahl und die Position in der Liste. Um das zu realisieren, wären zwei Lösungen möglich:

  1. Im Handshake-Verfahren werden die Zahlen nacheinander übertragen. Der Empfänger quitiert den Empfang einer Zahl. Erst danach darf der Sender die nächste Zahl senden.
  2. Die Zahlen und Positionen werden mathematisch verknüpft und im Empfänger wieder entknüpft. Der Empfänger sendet an den Sender eine Bestätigung, wenn er alle Zahlen erhalten hat.

Im Folgenden wird die 2. Lösung realisiert.

1. Anzahl der Listenelemente übertragen:

Der Sender erzeugt eine Liste mit Zufallszahlen. Danach sendet er die Anzahl der Listenelemente solange an der Empfänger, bis dieser den Empfang bestätigt hat.

Davor sind zwei Variable zu erzeugen:

  1. anzahl: Anzahl der Listenelemente
  2. liste: eine leere Liste vom Typ Zahlen

In der ersten Zählschleife wird die Liste mit zufälligen Zahlen zwischen 1 und 100 gefüllt.

Der Empfänger wartet, bis die empfangene Zahl ungleich 0 ist und zeigt dann die empfangene Anzahl zur Kontrolle an. Die farbige LED symbolisiert den jeweiligen Zustand der Übertragung.

2. Die Listenelemente übertragen

Im nächsten Schritt werden die einzelnen Elemente der Liste maskiert zum Empfänger gesendet. Wenn der Empfänger alle Elemente erhalten hat, sendet er eine Bestätigung zurück und die Übertragung ist beendet.

Das Maskieren erfolgt so, dass

Damit bei der Multiplikation keine 0 entsteht, muss die Schleife mit 1 beginnen und beim Holen des jeweiligen Listenelements das berücksichtigt werden.

500 380 bedeudet also, dass in der Liste das Element mit der Nummer 4 den Wert 380 hat.

3. Liste empfangen:

Der Listenempfang wird mit einer Funktion realisiert. Dadurch wird das Programm übersichtlicher.

Es wird eine Zahl empfangen und dann in ihre Bestandteile zerlegt. Damit hat man die Nummer des Eintrages in der Liste und den Inhalt.

Zur Kontrolle kann man sich die Werte auf dem seriellen Monitor anschauen. Das kann dann wieder entfernt werden.

Wie weiß man nun, dass alle Elemente übertragen wurden? Dazu wird eine Kontrollliste erzeugt, die genau so viele Elemente hat, wie üübertragen werden sollen. Jedes Eintrag in dieser Liste wird auf 1 gesetzt.

Wird eine Zahl übertragen und in die eigentliche Liste eingetragen, wird sofort danach in der Kontrolliste das Element mit der gleichen Nummer auf 0 gesetzt. Das geht solange, bis in der Kontrolliste alle Werte auf 0 gesetzt sind.Dann ist man fertig.

zurück