Java 6 BlueJ

ftComputing : Programme für die fischertechnik-Interfaces und -konstruktionskästen
  
ftComputing.de
Home
Back
Java 6 BlueJ IR2
Java 6 Swing IR2
Turm von Hanoi
Sitemap
Index
Links
Impressum
Mail

 

Java-Entwicklungsumgebung BlueJ

Eignet sich besonders zum Einsatz im Ausbildungs- Bereich. Sie bietet umfangreiche Möglichkeiten sowohl zur Ausführung einzelner Statements wie auch von Methoden instantiierter Klassen.

Download www.bluej.org 
Dort auch ein Link zum benötigten JDK6
(in jedem Fall - also auch Win7/64bit - muß JDK6 (Java Development Kit) für Windows x86 geladen und installiert werden, dann erst von bluej.org das bluejsetup-304.exe.

Erforderlich javaFish40.DLL, umFish40.DLL und die ftcomputing.robo.jar. Die DLLs werden am einfachsten in \Windows\System32 bzw SYSWOW64 installiert. Das Verzeichnis der jar muß über Menü | Werkzeuge | Einstellungen | Bibliotheken angegeben werden.

Anwendungen benötigen dementsprechend ein import ftcomputing.robo.*;

Downloads : workSpace34.zip

Mit Win7/64 erfolgreich getestet

Beispiele zur Nutzung der ftcomputing.robo.jar

Versuchsaufbau

Es wird kein besonderes Modell vorausgesetzt, sondern ein einfacher Versuchsaufbau :

  • Motor M3 mit Endtaster I5 und Impulstaster I6 (setMotor, Mot)
  • Motor M4 mit Endtaster I7 und Impulstaster I8
  • Taster an I1  (getInput, Inp)
  • Distanzsensor an D1 (getDistance, Inp)
  • Photowiderstand an AX (getAnalog, Inp)
  • NTC an AY (getAnalog, Inp)
  • Phototransistor an I4 (getInput, Inp)
  • Lampen an O1, O2, O3, O4 (setLamp, Out)

Konstruktor

  public class Elemente {
    private FishFace ft;
    public Elemente(){
      ft = new FishFace();
      ft.openInterface(0, 0);
    }
Instanzierung und Herstellen einer Verbindung zum ersten Robo Interface an USB

Schalten der Aktoren an M1 - M4 bzw. O1 - O8

public void outTest() {
  System.out.println("outTest gestartet");
  for(int i = 1; i <= 8; i++) {
    System.out.println("Out." + i);
    ft.setLamp(i, Dir.On);
    ft.waitForHigh(Inp.I1);
    ft.setLamp(i, Dir.Off);
  } 
  System.out.println("--- Finito ---");
}

Geschaltet wird hier einpolig ein und aus mit setLamp. Das funktioniert auch bei Motoren, da die Drehrichtung der Motoren hier durch Schaltung eines O-Ausganges bestimmt wird. Weitergeschaltet wird nach Drücken/Freigeben  des Tasters an I1 (waitForHigh)

Distanzsensor an D1

public void distSensor(int d) {
  System.out.println("DistanzSensor an : " + d);
  do {
    System.out.println("Entfernung [cm] : " + ft.getDistance(d));
    ft.waitForHigh(Inp.I1);
  } while(!ft.finish());
  System.out.println("--- Finito ---");
}

Anzeige der aktuellen Distanz in cm, nächster Wert Taster an I1. Abbruch der Endlosschleife durch ESC-Taste

Test der allgemeinen Sensoren

public void sensoren(int i) {
  do {
    switch(i) {
      case 1:
        System.out.println("NTC : " + ft.getAnalog(Inp.AY));
        break;
      case 2:
        System.out.println("Phototransistor : " + ft.getInput(Inp.I4));
        break;
      case 3:
        System.out.println("Photowiderstand : " + ft.getAnalog(Inp.AX));
        break;
      default:
    }
    ft.waitForHigh(Inp.I1);
  } while(!ft.finish());
  System.out.println("--- Finito ---");
}

Abgefragt wird der Sensor, dessen Nummer beim Aufruf der Methode übergeben wurde. Die Auswahl erfolgt über ein switch Konstrukt.

Motor zwischen Endtastern

public void motPendel() {
  System.out.println("Motor M3 links bis I5 und rechts bis I6");
  do{
    ft.setMotor(Mot.M3, Dir.Left);
    ft.waitForInput(Inp.I5, true);
    ft.setMotor(Mot.M3, Dir.Off);
    ft.pause(1234);
    ft.setMotor(Mot.M3, Dir.Right);
    ft.waitForInput(Inp.I6, true);
    ft.setMotor(Mot.M3, Dir.Off);
    ft.pause(1234); 
  } while(!ft.finish());
  System.out.println("--- Finito ---");
}

Der Motor an M3 dreht links bis zum Erreichen von Endtaster I5 und dann rechts bis zum Erreichen von I7. Das ergibt eine oszillierende Bewegung. Kann in abgewandelter Form zum Antrieb einer Parkhausschranke genutzt werden.

Motor läuft angegebene Zeit

public void motorTime(int mSek) {
  System.out.println("Motor gestartet");
  ft.setMotor(Mot.M3, Dir.Left);
  ft.pause(mSek);
  ft.setMotor(Mot.M3, Dir.Off);
  System.out.println("Finito nach " + mSek + " Millisekunden");
}

Die Zeit in Millisekunden wird über den Aufrufparameter der Methode mitgegeben.

Motor läuft für vorgegebene Impulszahl

public void motorCount(int iCount) {
  System.out.println("Motor gestartet");
  ft.setMotor(Mot.M3, Dir.Left, Speed.Full, iCount); 
  ft.waitForMotors(Mot.M3);
  System.out.println("--- Finito ---");
}

Motor an M3 mit fest zugeordnetem Endtaster an I5 und Impulstaster an I6 läuft für iCount Impulse. Der Motorbetrieb erfolgt asynchron, der Motor wird bei Erreichen der Impulszahl selbsttätig abgeschaltet. Die waitForMotors Methode schaltet den Motor nicht, deshalb könnten auch noch weitere Befehle zwischen setMotor und waitForMotors stehen.

Zwei Motoren simultan

public void motorRob(int iCount3, int iCount4) {
  System.out.println("Motor Home, wartet auf I5 und I7");
  ft.setMotor(Mot.M3, Dir.Left, Speed.Half, 9999);
  ft.setMotor(Mot.M4, Dir.Left, Speed.Full, 9999);
  ft.waitForMotors(0, Mot.M3, Mot.M4);
  System.out.println("Motor M3 to : " + iCount3);
  System.out.println("Motor M4 to : " + iCount4);
  ft.pause(1234);
  ft.setMotor(Mot.M3, Dir.Right, Speed.Full, iCount3);
  ft.setMotor(Mot.M4, Dir.Right, Speed.Half, iCount4);
  ft.waitForMotors(0, Mot.M3, Mot.M4);
  System.out.println("--- Finito ---");
}

Die Motoren an M3 und M4 (Endtaster I5, I7, Impulstaster I6 und I8) fahren zunächst auf ihre Home-Position : linksdrehend bis zum Erreichen des zugehörenden Endtasters. Um sie dazu zu bewegen, wird ein wenig getrickst : Es wird eine Impulszahl vorgegeben, die außerhalb des Fahrbereiches liegt. Das Erreichen der jeweiligen Home-Position wird mit einem gemeinsamen waitForMotors abgewartet. Anschließend nach rechts mit iCount3 und iCount4 Impulsen.

Zusätzlich : die Modellprogramme für das ROBO LT Beginner Lab

Stand : 23.07.2011