| |
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
|