| Würfeln : 8 Lampen an einem InterfaceLampen werden an die M-Ausgänge eines Interfaces angeschlossen, da sie aber nur ein- und ausgeschaltet werden müssen, kann man auf die Umpolung beim Schalten der M-Ausgänge verzichten : ein Lampen-Pol an einen M-Ausgang-Kontakt und ein Lampen-Pol an Masse Die Masse ist eine einzelne Buchse, beim Intelligent Interface über der LED,
beim Universal Interface ganz rechts im Buchsenfeld. Der Anschluß des zweiten
Pols erfolgt nach dem Schema Am einfachsten können so angeschlossene Lampen über den Befehl SetLamp(n) angesprochen werden. Beim Intelligent Interface ist zu beachten, daß die Lampen AN sind, wenn der Ausgang nicht geschaltet ist. Hier sollte man SetMotors &HFFFF zum Ausschalten aller Lampen gleich nach dem OpenInterface einsetzen (beim Unversal Interface : ClearMotors). Außerdem gibt es unterschiedliche Bauzustände des Intelligent Interface (gearbeitet wurde mit Softwarestand V2.10 vom 25.8.97). Man sollte da vorsichtig anfangen. Hier ein Modell dazu, das mit Visual Basic und FishFa30.DLL/umFish30.DLL (vbFish30Setup.EXE) betrieben wird, das Programm selber ist in Wuerfel.ZIP verpackt :
Das Programm ist eigentlich recht einfach (es basiert auf dem Template ftcomputing30), das meiste ist "SchnickSchnack". Interessant ist der Befehl : ft.SetMotors Wuerfel(i) mit dem die Augen des Würfels angezeigt werden, man könnte es natürlich auch mit einer Serie von ft.SetLamp Befehlen tun, aber so ist es bedeutend einfacher, wenn man erstmal die Tabelle Dim Wuerfel(1 To 6) erstellt und verstanden hat. Hier werden alle Lampen mit einem Schlag geschaltet (an und aus) : Der Reihe nach : Eine einzelne Lampe wird mit SetMotors MotorStatus durch Setzen des zugehörenden bits in MotorStatus geschaltet.
Dabei sind die Lampen folgendermaßen auf dem Modell angeordnet :
Will man nun mehrere Lampen gleichzeitig schalten, so sind die zugehörenden 1er bits im MotorStatus im entsprechend zu arrangieren (durch OR zu verknüpfen) z.B. für eine Würfelanzeige mit 3 Augen : Lampe 1 00 00 00 01 In der Tabelle Wuerfel(3) muß dann also &H49 stehen (bei VC++ 0x49). Da das Intelligente Interface das alles umgekehrt macht, ist dieser Wert dort mit NOT entsprechend zu "verwursteln" : NOT 49 = B6 = 10 11 01 10 Im Code ist deswegen auch eine entsprechende Abfrage :
If cboPortName.Text = "LPT" Then ft.SetMotors Wuerfel(i) _ Das wars. Mir ging ein Hinweis zum Intelligent Interface zu : Anstelle des Masseanschlusses kann man auch den Plus-Pol (links außen) nehmen. Vorteil : es wird dann nicht invertiert. Läuft dann also wie beim Universal Interface. Im Wuerfel-Programm kann die Abfrage If cboPortName ... entfernen und nur den True-Zweig verwenden. (Statt If .... also nur noch ft.SetMotors Wuerfel(i) bzw. ClearMotors). Nachteil : der Befehl SetLamp funktioniert dann (vorerst) nicht. ft.SetMotors(new int[] { 0x8, 0x41, 0x49, 0x63, 0x6B, 0x77 }[new Random().Next(1, 6)]);Eine modernere Version des gleichen Programmes in C# 2008 und für das ROBO Interface : public { FishFace ft = new FishFace(); int[] Wuerfel = { 0x8, 0x41, 0x49, 0x63, 0x6B, 0x77 }; Random rnd = new Random(); private void Action() { float summe = 0; int anz = 0; int w; do { w = rnd.Next(1, 7); anz++; summe += w; lblWurf.Text = w.ToString(); lblStatus.Text = String.Format("Mittelwert : {0:0.00} / {1:0} Werte"summe / anz, anz); ft.SetMotors(Wuerfel[w - 1]); ft.Pause(2222); } while (!ft.Finish()); lblWurf.Text = "0"; } ...... Hier läuft das Programm in einer Endlos-Runde, Abbruch durch HALT oder ESC-Taste. Die Überschriftszeile enthält übrigens die im Programm über mehrere Zeilen verteilten für die Zufallsanzeige auf dem ROBO Interface in einer einzigen Zeile. Stand : 09.02.2009
|