Hanoi TX C# 2008

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

 

C# 2008 Express

Download : FishFaceTXCS.ZIP
Lösung für C# 2008 und die FishFaceTX.DLL

Klasse HanoiTower

using FishFaceTX;
namespace
HanoiTower {
    class HanoiTower {
        HanoiRobot hr;
        static void Main(string[] args) {
             HanoiTower ht = new HanoiTower();
             ht.Action();
         }

   void Action() {
   
   hr = new HanoiRobot       
    Console
.WriteLine("--- Main gestartet ---"
       Console.WriteLine("--- Beenden : Escape-Taste ---"
       hr.OpenController("COM4");
       Console.WriteLine("Fährt auf Grundstellung");
       hr.Grundstellung();
       Console.WriteLine("Bei der Arbeit" );     
       Hanoi(3, 2, 22, 38);       
    Console
.WriteLine("--- FINIS ---"
       
    hr.CloseController();
       
    Console
.WriteLine("--- RETURN Taste drcken ---"
       
    Console
.ReadLine();
    }

   void Hanoi(int n, int TAnf, int TMit, int TEnd) {
        if (n == 1) {
           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);
          }
       }

Klasse HanoiRobot

class HanoiRobot : FishFace {
   const int SpeedFull = 512;
   const Mot mSaule = Mot.M1;
   const Mot mArm = Mot.M2;
   const Unv iArmOben = Unv.I3;
   const Unv iArmUnten = Unv.I4;
   const Out oGreifer = Out.O5;
   
    int robPos;

   public void Grundstellung() {
         SetLamp(oGreifer, Dir.Off);
         ArmHeben();
         robPos = 9999;
         SauleNach(0);
      }

   public void Ziehe(int von, int nach) {
        SauleNach(von);
        ArmSenken();
        SetLamp(oGreifer, Dir.On);
        ArmHeben();
        SauleNach(nach);
        ArmSenken();
        SetLamp(oGreifer, Dir.Off);
        ArmHeben();
     }

   void SauleNach(int zielPos) {
    
if (robPos < zielPos) {
           StartRobMotor(mSaule, Dir.Right, SpeedFull, zielPos - robPos);
           robPos = zielPos + WaitForMotor(mSaule);
        } else {
              StartRobMotor(mSaule, Dir.Left, SpeedFull, robPos - zielPos);
              robPos = zielPos - WaitForMotor(mSaule);
        }
     }

   void ArmSenken() {
        SetMotor(mArm, Dir.Left);
        WaitForInput(iArmUnten, true);
        SetMotor(mArm, Dir.Off);
     }

   void ArmHeben() {
        SetMotor(mArm, Dir.Right);
        WaitForInput(iArmOben, true);
        SetMotor(mArm, Dir.Off);
     }}}}

Stand : 19.04.2010