Paso 5: código
-Arduino código es igual que el paso 2.-Descargue Jmyron y proCONTROLL e instalarlos.
-El siguiente es el código de procesamiento.
Ajustar el valor de servoneutral y COM no.
Ajuste xa calcular fórmula en vacío serialEvent() y keyPressed() vacío. (Ajustar 33 y 99. 33 es dirección a derecha max y 99 es que a la izquierda.)
XA = (33-99) /(camWidth_*k_) * x + 99; 0--> 99, camWidth_/2 * k--> 66, camWidth_ * k--> 33
(camWidth_/2 * k = 352/2 * 2 = 352, camWidth_ * k = 352 * 2 = 704, estas 0, 353, 704 son coordenadas en la pantalla x.)
Código de procesamiento
/*
* Coche No.02
* Servo, variador, motor Force GT y Webcam
* Procesamiento---CARNO02
* Arduino Duemilanove---SVSC_A
*/
Import processing.serial.*;
Import procontroll.*;
Import net.java.games.input.*;
Import JMyron.*;
Port01 serial;
Control de ControllIO;
Dispositivo de ControllDevice;
ControllSlider slider0;
ControllSlider slider2;
Slider3 de ControllSlider;
ControllButton button1;
ControllButton button13;
ControllButton button14;
JMyron cam;
Microsoft LifeCam Show RLA-00007
Float camWidth_ = 352;
Float camHeight_ = 288;
int camWidth = int(camWidth_);
int camHeight = int(camHeight_);
flotador de k_ = 2;
int k = int(k_);
flotador de k1 = camWidth_/127 * k;
flotador de k2 = camHeight_/127 * k;
Float x;
Float y;
xa de flotador;
flotador de ya;
int adelante = 0;
int servoneutral = 66; Servoneutral valor varía por cada servo.
int speedcontrollerneutral = 63;
steval int = servoneutral;
int velval = speedcontrollerneutral;
reversea int = 'F';
Boolean reverseb = false;
void setup() {}
Size(camWidth*k,camHeight*k);
Stroke(128);
port01 = nuevo Serial(this,"COM43",115200); COM no. varía por cada PC.
port01.Clear();
control = ControllIO.getInstance(this);
dispositivo = controll.getDevice ("Logitech Driving Force GT USB"); Consulte al administrador de dispositivos. Logitech puede Logicool.
device.printSliders();
device.printButtons();
device.setTolerance(0.05f);
slider0 = device.getSlider(0); Rueda de manejo
slider2 = device.getSlider(2); Pedal de descanso
slider3 = device.getSlider(3); Pedal del acelerador
button1 = device.getButton(1); Cruz de botón
button13 = device.getButton(13); Engranaje cambio palanca extracción
button14 = device.getButton(14); Engranaje cambio palanca Push
Fill(0);
rectMode(CENTER);
Cam = new JMyron();
Cam.Start(camWidth,camHeight);
cam.findGlobs(0);
}
void draw() {}
Cam.Update();
int [] camPixels = cam.image();
loadPixels();
para (int i2 = 0; i2 < altura; i2 ++) {}
para (int i1 = 0; i1 < ancho; i1 ++) {}
pixeles [i2 * ancho + i1] = camPixels [floor ((altura-1-i2) / k) * camWidth + floor((width-1-i1)/k)];
}
}
updatePixels();
x = (constrain((1+slider0.getValue())*width/2,0,width));
if(Button1.pressed()) {adelante = 0; y = altura/2; reversea = 'F'; reverseb = true;}
if(button13.pressed()) {adelante = 1; y = altura/2; reversea = 'F'; reverseb = true;}
if(button14.pressed()) {adelante = -1; y = altura/2; reversea = 'R'; reverseb = false;}
if(Forward ==1) {}
if(slider2.GetValue() < 0) {y = limitar (y + slider2.getValue()*8*k,height/2,height);}
if(slider3.GetValue() < 0) {y = limitar (y - slider3.getValue()*4*k,height/2,height);}
if(slider2.GetValue() > 0 & & slider3.getValue() > 0 & & y < altura * 2/3) {}
y = (limitar (y + slider2.getValue()*0.6*k,height/2,height*2/3));
} else if(slider2.getValue() > 0 & & slider3.getValue() > 0 & & y > altura * 2/3) {}
y = (limitar (y - slider3.getValue()*0.3*k,height*2/3,height));
}
}
Si (adelante == -1) {}
if(slider2.GetValue() < 0) {y = limitar (y - slider2.getValue()*8*k,0,height/2);}
if(slider3.GetValue() < 0) {y = limitar (y + slider3.getValue()*4*k,0,height/2);}
Si (y < = altura * 5/12 & & reverseb == false) {y = altura/2; reverseb = true;}
if(slider2.GetValue() > 0 & & slider3.getValue() > 0 & & y > altura * 1/3) {}
y = (limitar (y - slider2.getValue()*0.6*k,height*1/3,height/2));
} else if(slider2.getValue() > 0 & & slider3.getValue() > 0 & & y < altura * 1/3) {}
y = (limitar (y + slider3.getValue()*0.3*k,0,height*1/3));
}
}
línea (x, 0 x, altura);
línea (0, y de altura, anchura, y altura);
}
void serialEvent(Serial p) {}
XA = (33-99) /(camWidth_*k_) * x + 99; 0--> 99, 352/2 * k--> 66, 352 * k--> 33
steval = int(xa);
velval = int(y/k2);
if(p.Available() > 0) {}
port01.Write(steval+128);
port01.Write(velval);
port01.Write(reversea);
Print(steval);print(",");print(velval);print(",");println(Char(reversea));
}
}
{} void keyPressed()
{if(Key=='s')}
adelante = 0;
x = ancho/2;
y = altura/2;
XA = (33-99) /(camWidth_*k_) * x + 99;
steval = int(xa);
velval = int(y/k2);
port01.Write(steval+128);
port01.Write(velval);
port01.Write(reversea);
}
}