| |
Processing : Graphik-Programmierung auf Basis von Java
|
Eignet sich besonders zum Einsatz im
Ausbildungs- Bereich. Bietet besondere Möglichkeiten im Bereich der
Graphik-Programmierung. Die Verbindung mit dem Robo Interface in
Verbindung mit der graphischen Darstellung hat einen besonderen Reiz. Download
processing.org
Erforderlich javaFish50.DLL, umFish50.DLL und die ftcomputing.roboTX.jar.
Die DLLs werden am einfachsten in \Windows\System32 installiert. Das
Verzeichnis der jar muß im Verzeichnis von Processing\library installiert
werden.
Anwendungen benötigen dementsprechend ein import ftcomputing.roboTX.*; (
über Menü Sketch | Import Library=
Downloads : processingtx.zip
FishFace Java-Dokumentation : ftcomputing.robo.Doku Bücher zu Processing :
Erik Bartmann : Processing
O'Reilly Verlag, ISBN 978-3-89721-997-7 Getting Started with Processing
Casey Reas & Ben Fry
O'Reilly Verlage, ISBN 978-1-449-37980-3 |
Beispiel zur Nutzung der ftcomputing.roboTX.jar
Versuchsaufbau
Explorer - Basismodell aus ROBO TX Training Lab. Für den reinen Test tuts
aber auch eine Grundplatte mit zwei Motoren (mit Rädern)
Anzeige
|
Anzeige von Processing mit der Markierung des
durch die Maus angewählten Bereichs :
LinksVor, Vor, RechtsVor, LinksDrehen, Halt, RechtsDrehen,
LinksRück, Rück, RechtsRück.
Innerhalb des mit der Maus gewählten Bereichs kann man die
Geschwindigkeit der beiden Motoren einstellen. In der Version 2 anstelle
der Anzeige des aktuellen Bereichs, Anzeige aller Bereich und einer
Mausspur (Bild). Löschen der Mausspur durch LinksClick. |
Source Version 1
import ftcomputing.roboTX.*;
FishFaceTX tx = new FishFaceTX();
private int mitte, mitteOben, mitteUnten, mitteLinks, mitteRechts;
color farbe = color(255, 0, 0);
int speed(int pos) {
if(pos > mitteRechts) pos = pos - mitteRechts; else pos = mitteLinks - pos;
return (int)map(pos, 0, mitteLinks, 200, 512);
}
void setup() {
size(300, 300);
tx.openController("COM39");
println("TX Controller gestartet");
frameRate(333);
mitte = height / 5;
mitteOben = (height - mitte) / 2;
mitteUnten = (height + mitte) / 2;
mitteLinks = (width - mitte) / 2;
mitteRechts = (width + mitte) / 2;
mouseY = mitteOben + 1;
mouseX = mitteLinks + 1;
}
void draw() {
background(255);
fill(farbe);
if(tx.finish()) return;
if(mouseY < mitteOben & mouseX < mitteLinks) {
tx.speedMotor(Mot.M1, Dir.Left, speed(mouseX));
tx.speedMotor(Mot.M2, Dir.Left, speed(mouseY));
rect(0, 0, mitteLinks, mitteOben);
}
else if(mouseY < mitteOben & mouseX < mitteRechts) {
tx.speedMotor(Mot.M1, Dir.Left, speed(mouseY));
tx.speedMotor(Mot.M2, Dir.Left, speed(mouseY));
rect(mitteLinks, 0, mitte, mitteOben);
}
else if(mouseY < mitteOben) {
-----
else {
tx.speedMotor(Mot.M1, Dir.Right, speed(mouseY));
tx.speedMotor(Mot.M2, Dir.Right, speed(mouseX));
rect(mitteRechts, mitteUnten, mitteLinks, mitteOben);
}
}
In der Methode draw (von Processing vorgegebener Name) wird in regelmäßigen
Abständen (frameRate(12);
12 mal in der Sekunde) die aktuelle Mausposition ausgewertet :
- Bestimmung des Steuerbereichs und dessen Anzeige
- entsprechendes Schalten der Fahrmotoren.
- Ende von draw über ESC-Taste (if(tx.finish()))
Das Zubehör ist recht übersichtlich :
- verwendet wird das normale Package ftcomputing.roboTX.jar
- Instanzierung wie üblich.
- Zuweisung eines Farbnamens
- Herstellen der Verbindung zum TX Controller
- Bestimmen der Bereichsgrenzen anhand der Fenstergröße
- int speed : Abbilden der aktuellen
Mausposition auf einen Geschwindigkeitswert.
Source Version 2
void newBoard() {
background(rot);
line(mitteLinks, 0, mitteLinks, height);
line(mitteRechts, 0, mitteRechts, height);
line(0, mitteOben, width, mitteOben);
line(0, mitteUnten, width, mitteUnten);
fill(weiss);
rect(mitteLinks, mitteOben, mitte, mitte);
fill(gruen);
}
Hinzugekommen ist die Methode newBoard, die den Arbeitsbereich zeichnet.
Sie wird am Ende des setup() und bei if(
mousePressed) newBoard(); im draw()
aufgerufen.
void draw() {
if(tx.finish()) return;
if(mousePressed) newBoard();
ellipse(mouseX, mouseY, 16, 16);
if(mouseY < mitteOben & mouseX < mitteLinks) {
tx.speedMotor(Mot.M1, Dir.Left, speed(mouseX));
tx.speedMotor(Mot.M2, Dir.Left, speed(mouseY));
}
else if(mouseY < mitteOben & mouseX < mitteRechts) {
tx.speedMotor(Mot.M1, Dir.Left, speed(mouseY));
tx.speedMotor(Mot.M2, Dir.Left, speed(mouseY));
--------
Die aktuelle Mausposition wird mit ellipse gezeichnet. Bei den Motor-Befehlen
sind die rect-Befehle zur Kennzeichnung des Arbeitsbereichs entfallen.
Beispiel für das Robo Interface, weitere Explorer-Modelle
und das FTS
Stand : 06.10.2010
|