Étape 5: Code
-Arduino code est la même que l’étape 2.-Télécharger Jmyron et proCONTROLL et les installer.
-Voici le code de traitement.
Ajuster la valeur servoneutral et no COM
Ajuster xa calcul formule Sub serialEvent() et keyPressed() Sub. (Ajuster 33 et 99. 33 est max de direction à droite et 99 qui est à gauche.)
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, ces 0, 353, 704 sont abscisse dans la fenêtre d’affichage.)
Code de traitement
/*
* Voiture No.02
* Servo, variateur, moteur Force GT & Webcam
* Transformation---CARNO02
* Arduino Duemilanove---SVSC_A
*/
Import processing.serial.* ;
Import procontroll.* ;
Import net.java.games.input.* ;
Import JMyron.* ;
Série port01 ;
Contrôle de le ControllIO ;
Dispositif de ControllDevice ;
ControllSlider slider0 ;
ControllSlider slider2 ;
ControllSlider slider3 ;
ControllButton button1 ;
ControllButton button13 ;
ControllButton button14 ;
Cam JMyron ;
Microsoft LifeCam Show RLA-00007
float camWidth_ = 352 ;
float camHeight_ = 288 ;
int camWidth = int(camWidth_) ;
int camHeight = int(camHeight_) ;
flotteur k_ = 2 ;
int k = int(k_) ;
flotteur k1 = camWidth_/127 * k ;
flotteur k2 = camHeight_/127 * k ;
float x ;
float y ;
flotteur xa ;
flotteur ya ;
int vers l’avant = 0 ;
int servoneutral = 66 ; Servoneutral valeur varie selon chaque servo.
int speedcontrollerneutral = 63 ;
steval int = servoneutral ;
int velval = speedcontrollerneutral ;
int reversea = « F » ;
reverseb booléen = false ;
void setup() {}
Size(camWidth*k,camHeight*k) ;
Stroke(128) ;
port01 = new Serial(this,"COM43",115200) ; COM no varie selon chaque PC.
port01.Clear() ;
Controll = ControllIO.getInstance(this) ;
Device = controll.getDevice ("Logitech Driving Force GT USB") ; Se référer au gestionnaire de périphériques. Logitech peut être Logicool.
device.printSliders() ;
device.printButtons() ;
device.setTolerance(0.05f) ;
slider0 = device.getSlider(0) ; Volant de direction
slider2 = device.getSlider(2) ; Pédale de pause
slider3 = device.getSlider(3) ; Pédale d’accélérateur
Button1 = device.getButton(1) ; Traverser la touche
button13 = device.getButton(13) ; Gear Shift levier Pull
button14 = device.getButton(14) ; Gear Shift levier poussoir
Fill(0) ;
rectMode(CENTER) ;
Cam = new JMyron() ;
Cam.Start(camWidth,camHeight) ;
cam.findGlobs(0) ;
}
{} void draw()
Cam.Update() ;
int [] camPixels = cam.image() ;
loadPixels() ;
pour (int i2 = 0; i2 < hauteur ; i2 ++) {}
pour (i1 int = 0; i1 < largeur ; i1 ++) {}
pixels [i2 * largeur + i1] = camPixels [floor ((hauteur-1-i2) / k) * camWidth + floor((width-1-i1)/k)] ;
}
}
updatePixels() ;
x = (constrain((1+slider0.getValue())*width/2,0,width)) ;
if(Button1.Pressed()) {forward = 0; y = hauteur/2 ; reversea = « F »; reverseb = true;}
if(button13.Pressed()) {forward = 1; y = hauteur/2 ; reversea = « F »; reverseb = true;}
if(button14.Pressed()) {forward = -1; y = hauteur/2 ; reversea = "R"; reverseb = false;}
if(Forward ==1) {}
if(slider2.GetValue() < 0) {y = contraindre (y + slider2.getValue()*8*k,height/2,height);}
if(slider3.GetValue() < 0) {y = contraindre (y - slider3.getValue()*4*k,height/2,height);}
if(slider2.GetValue() > 0 & & slider3.getValue() > 0 & & y < hauteur * 2/3) {}
y = (contraindre (y + slider2.getValue()*0.6*k,height/2,height*2/3)) ;
} else if(slider2.getValue() > 0 & & slider3.getValue() > 0 & & y > hauteur * 2/3) {}
y = (contraindre (y - slider3.getValue()*0.3*k,height*2/3,height)) ;
}
}
Si (avant == -1) {}
if(slider2.GetValue() < 0) {y = contraindre (y - slider2.getValue()*8*k,0,height/2);}
if(slider3.GetValue() < 0) {y = contraindre (y + slider3.getValue()*4*k,0,height/2);}
Si (y < = hauteur * 5/12 & & reverseb == false) {y = hauteur/2 ; reverseb = true;}
if(slider2.GetValue() > 0 & & slider3.getValue() > 0 & & y > hauteur * 1/3) {}
y = (contraindre (y - slider2.getValue()*0.6*k,height*1/3,height/2)) ;
} else if(slider2.getValue() > 0 & & slider3.getValue() > 0 & & y < hauteur * 1/3) {}
y = (contraindre (y + slider3.getValue()*0.3*k,0,height*1/3)) ;
}
}
ligne (x, 0, x, hauteur) ;
ligne (0, hauteur-y, largeur, hauteur-y) ;
}
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)) ;
}
}
keyPressed() Sub {}
{if(Key=='s')}
Forward = 0 ;
x = largeur/2 ;
y = hauteur/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) ;
}
}