Geld mit C# 2005

ftComputing : Programme für die fischertechnik-Interfaces und -konstruktionskästen
  
ftComputing.de
Home
Back
Sitemap
Index
Links
Impressum
Mail
 

Das C# 2005 Programm mit FishFa2005.DLL

Der LLWin Terminal Baustein wurde durch eine CS Form ersetzt in die auch die Auswahl des Interface-Anschlusses integriert wurde. Nun die CS Lösung zum LLWin Hauptprogramm :

private void Action() {
  lblStatus.Text =
"Fahren auf Grundstellung";
  ft.SetMotor(mSchieber, (
int)Dir.Right);
  ft.WaitForInput(eSchieberHinten,
false);
  ft.SetMotor(mSchieber, (
int)Dir.Off);
  ft.SetMotor(mSchlitten, (
int)Dir.Left);
  ft.WaitForInput(eSchlittenEnde,
true);
  ft.SetMotor(mSchlitten, (
int)Dir.Off);

  lblStatus.Text = "Schacht rechts anfahren";
  ft.SetMotor(mSchlitten, (
int)Dir.Right);
  ft.WaitForChange(eSchlittenImpuls, 20);
  ft.SetMotor(mSchlitten, (
int)Dir.Off);
  Schieber((
int)num50.Value);

  lblStatus.Text = "Schacht Mitte anfahren";
  ft.SetMotor(mSchlitten, (
int)Dir.Right);
  ft.WaitForChange(eSchlittenImpuls, 70);
  ft.SetMotor(mSchlitten, (
int)Dir.Off);
  Schieber((
int)num100.Value);

  lblStatus.Text = "Schacht links anfahren";
  ft.SetMotor(mSchlitten, (
int)Dir.Right);
  ft.WaitForChange(eSchlittenImpuls, 70);
  ft.SetMotor(mSchlitten, (
int)Dir.Off);
  Schieber((
int)num200.Value);
  
  lblStatus.Text =
"FINIS";
}

Was passiert da :

Eine Menge, dass sich wiederholt : Das Anfahren der Schächte Rechts, Mitte und Links mit unterschiedlichen Werten für die Position und die Anzahl der auszugebenden Münzen. Vorher wird noch die Home Position am Taster I3 an der rechten Seite angefahren.

ft.SetMotor startet jeweils den Schlittenmotor, ft.WaitForChange zählt die Tasterimpulse, bei Erreichen der vorgegebenen Anzahl (Positionsangabe) wird der Schlittenmotor mit ft.SetMotor wieder ausgeschaltet. Bei Erreichen der Position wird das Unterprogramm Schieber aufgerufen, das die gewünschte Anzahl Münzen (Wert aus dem entsprechenden Feld der Form) ausgibt. Das ist schon (fast) alles.

Das Unterprogramm Schieber sieht so aus :

private void Schieber(int Anz) {
  lblStatus.Text = "Münzausgabe";
  for (int i = 1; i <= Anz; i++) {
    ft.SetMotor(mSchieber, (int)Dir.Left);
    ft.WaitForInput(eSchieberVorn, true);
    ft.SetMotor(mSchieber, (int)Dir.Right);
    ft.WaitForInput(eSchieberHinten, false);
    ft.SetMotor(mSchieber, (int)Dir.Off);
  }
}

In einer for Schleife für die Anzahl der auszugebenden Münzen wird der Schiebermotor gestartet (ft.SetMotor), dann wird gewartet bis der Schlitten vorn ist (ft.WaitForInput, der Taster muß öffnen, die meiste Zeit liegt er auf dem Zahnstangegetriebe und ist geschlossen). Wenn der Schieber vorn angekommen ist, wird der Schiebermotor umgepolt, d.h. der Schieber fährt gleich wieder zurück, der Motor wird abgeschaltet.

Erweiterung : Betragseingabe anstelle der Stückelung

Betrag = (int)numBetrag.Value;
Z200 = 0;
while (Betrag - 200 >= 0) { Betrag -= 200; Z200++; } ;
Z100 = 0;
while (Betrag - 100 >= 0) {Betrag -= 100; Z100++; } ;
Z50 = 0;
while (Betrag - 50 >= 0) { Betrag -= 50; Z50++; };

Der eingegebene Betrag wird in die verfügbaren Münzen "zerlegt". Die daraus resultierende Stückelung wird in den Z-Feldern aufaddiert und wie gehabt an Methode Schieber übergeben.

Man kann natürlich dann auch noch prüfen, ob der Betrag durch 50 €Cent teilbar ist, auf Höchstbetrag prüfen und Zähler für die vorhandenen Münzen einführen .... Viel Vergnügen.

Stand : 24.06.2007