Hanoi TX VB 2008

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

 

VB2008 Express

Download : FishFaceTXVB.ZIP
Lösung für VB2008 und die FishFaceTX.DLL

Klasse HanoiTower

Imports FishFaceTX
Module
HanoiTower
   Dim hr As HanoiRobot

   Sub Main()
      hr = New HanoiRobot()
      Console.WriteLine("--- Main gestartet, Abbruch ESC-Taste ---")
      Console.WriteLine("--- Auf Grundstellung ---")
      hr.OpenController("COM4")
      hr.Grundstellung()
      Console.WriteLine("--- Bei der Arbeit ---")
      Hanoi(3, 2, 22, 38)
      Console.WriteLine("--- FINITO : RETURN drcken ---")
      hr.CloseController()
      Console.Read()
   End Sub

  Sub Hanoi(ByVal n As Integer, ByVal TAnf As Integer, _
           
ByVal TMit As Integer, ByVal TEnd As Integer
)
       If n = 1 Then
           Console.WriteLine("Scheibe {0:0} : von {1:00} nach {2:00}", n, TAnf, TEnd)
           hr.Ziehe(TAnf, TEnd)
        Else
             Hanoi(n - 1, TAnf, TEnd, TMit)
             Console.WriteLine("Scheibe {0:0} : von {1:00} nach {2:00}", n, TAnf, TEnd)
             hr.Ziehe(TAnf, TEnd)
             Hanoi(n - 1, TMit, TAnf, TEnd)
        End If
    End Sub

Hier wurde auf die Methode Action() verzichtet und deren Code in Main() untergebracht. VB nennt Console-Klassen Module und bastelt die fällige Instanzierung intern.

Klasse HanoiRobot

Class HanoiRobot
   Inherits FishFace
   
    Const SpeedFull As Integer = 512
    Const mSaule As Mot = Mot.M1
    Const mArm As Mot = Mot.M2
    Const iArmOben As Unv = Unv.I3
    Const iArmUnten As Unv = Unv.I4
    Const oGreifer As Out = Out.O5

    Dim robPos As Integer

   Sub Grundstellung()
        SetLamp(oGreifer, Dir.Off)
        ArmHeben()
        robPos = 9999
        SauleNach(0)
     End Sub

   Sub Ziehe(ByVal von As Integer, ByVal nach As Integer)
         SauleNach(von)
         ArmSenken()
         SetLamp(oGreifer, Dir.On)
         ArmHeben()
         SauleNach(nach)
         ArmSenken()
         SetLamp(oGreifer, Dir.Off)
         ArmHeben()
     End Sub

   Sub SauleNach(ByVal zielPos As Integer)
         If robPos < zielPos Then
             StartRobMotor(mSaule, Dir.Right, SpeedFull, zielPos - robPos)
             robPos = zielPos + WaitForMotor(mSaule)
          Else
               StartRobMotor(mSaule, Dir.Left, SpeedFull, robPos - zielPos)
               robPos = zielPos - WaitForMotor(mSaule)
          End If
      End Sub

    Sub ArmSenken()
           SetMotor(mArm, Dir.Left)
           WaitForInput(iArmUnten, True)
           SetMotor(mArm, Dir.Off)
       End Sub

    Sub ArmHeben()
           SetMotor(mArm, Dir.Right)
           WaitForInput(iArmOben, True)
           SetMotor(mArm, Dir.Off)
       End Sub
   End Class
End
Module

Hier wurde auf die Angabe der Zugriffsmodifizierer (Public/Private) verzichtet. So sieht es noch mehr nach Basic aus.

Stand : 19.04.2010