Processing

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

 

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