try this one:
http://t-o-f.info/pmwiki/index.php?n=Arduino.Firmata
its a modded firmata (servo only 9 & 10) and a processing library (dont use arduino library).
what i cant translate fast:
funktioniert wunderbar. nur da ich jetzt xbees als "kabel" nehme, hab ich selber was ohne firmata geschrieben. firmata wartet immer auf antwort, was bei mir zu keiner verbindung mit xbees führt. aber sonst sahne.
hier noch mein letzter kabel-sketch in processing mit tof-firmata
/* RC car project | Arduino UNO | zH32
08.01.2011
*/
import processing.serial.*;
import cc.firmata.*;
Firmata firmata;
import controlP5.*;
Serial myPort;
ControlP5 controlP5;
import procontroll.*;
import net.java.games.input.*;
import java.io.*;
ControllIO controll;
ControllDevice device;
ControllStick stick;
ControllStick stick1;
ControllButton button1;
ControllButton button;
int LED = 13;
int licht = 4; //LDR
int motorpin1 = 6; //when motorpin1 HIGH motorpin2 LOW = forward....
int motorpin2 = 7;
int motorpwm = 11;
int standby = 2;
int ledState;
int val;
long previousMillis = 0;
long interval = 200;
void firmataSetup (Firmata f)
{
println("Running setup function");
f.pinMode(motorpwm,firmata.PWM);
f.pinMode(9,firmata.SERVO);
f.pinMode(LED, firmata.OUTPUT);
f.digitalWrite(LED, firmata.LOW);
f.pinMode(licht, firmata.INPUT);
f.pinMode(motorpin1, firmata.OUTPUT);
f.pinMode(motorpin2, firmata.OUTPUT);
f.pinMode(standby, firmata.OUTPUT);
}
void setup()
{
size(1024,600);
println("Available ports:");
println(Firmata.list());
firmata = new Firmata(this, Firmata.list()[4], 115200);
String portName = Serial.list()[3];
frameRate(20);
PFont myFont;
myFont = createFont("Arial", 20);
textFont(myFont);
controlP5 = new ControlP5(this);
controlP5.addSlider("Lenkung in %",-100,100,50,10,50,400,40);
controlP5.addSlider("Power in %",-100,100,100,30,150,40,400);
controlP5.addSlider("Licht",0,100,25,200,150,40,400);
controll = ControllIO.getInstance(this);
device = controll.getDevice("Logitech Cordless RumblePad 2");
device.setTolerance(0.07f);
ControllSlider sliderX = device.getSlider("Z-Achse");
ControllSlider sliderY = device.getSlider("Z-Rotation");
ControllSlider sliderX1 = device.getSlider("X-Achse");
ControllSlider sliderY1 = device.getSlider("Y-Achse");
stick = new ControllStick(sliderX,sliderY);
stick1 = new ControllStick(sliderX1,sliderY1);
button = device.getButton("Taste 0");
button1 = device.getButton("Taste 2");
}
void draw()
{
background(150);
int speed = int(stick.getY()*255); // get right value for motor controller
int steer = int((stick1.getX()*40)+90); // get right value for servo
int lichtval = firmata.analogRead(licht);
float li = map(lichtval, 1024, 0, 0, 100);
controlP5.controller("Lenkung in %").setValue((steer-90)*2.5);
controlP5.controller("Power in %").setValue(-speed/2.55);
controlP5.controller("Licht").setValue(int(li));
if(button.pressed()){
long currentMillis = millis();
if(currentMillis - previousMillis > interval) {
// save the last time you blinked the LED
previousMillis = currentMillis;
if (ledState == firmata.LOW)
ledState = firmata.HIGH;
else
ledState = firmata.LOW;
// set the LED with the ledState of the variable:
firmata.digitalWrite(LED, ledState);
}
else
firmata.digitalWrite(LED, firmata.LOW);
}
//println(lichtval); //print different values for debuging
if(speed > 0){
firmata.digitalWrite(motorpin1, firmata.LOW);
firmata.digitalWrite(motorpin2, firmata.HIGH); //forward
firmata.digitalWrite(standby, firmata.HIGH);
firmata.analogWrite(motorpwm, speed);
}
if(speed < 0){
firmata.digitalWrite(motorpin1, firmata.HIGH);
firmata.digitalWrite(motorpin2, firmata.LOW); //back
firmata.digitalWrite(standby, firmata.HIGH);
firmata.analogWrite(motorpwm, speed*-1);
}
if(speed == 0){firmata.digitalWrite(standby, firmata.LOW);
}
firmata.analogWrite(9, steer); //steering
}