No.02 ratt köra R/C bil med Arduino, webbkamera och net. USB etc. (5 / 7 steg)
Steg 5: kod
-Arduino koden är samma som steg 2.-Ladda ner Jmyron och proCONTROLL och installera dem.
-Följande är bearbetning koden.
Justera servoneutral värde och COM nr.
Justera xa beräkna formeln i void serialEvent() och ogiltiga keyPressed(). (Justera 33 och 99. 33 är max styrning till höger och 99 är det till vänster.)
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, dessa 0, 353, 704 är x-koordinat i teckenfönstret.)
Bearbetning av kod
/*
* Bil No.02
* Servo, Speed Controller, Driving Force GT & Webcam
* Bearbetning---CARNO02
* Arduino Duemilanove---SVSC_A
*/
import processing.serial.*;
import procontroll.*;
import net.java.games.input.*;
import JMyron.*;
Seriella port01;
ControllIO kontroll;
ControllDevice enhet.
ControllSlider slider0;
ControllSlider slider2;
ControllSlider slider3;
ControllButton Knapp1;
ControllButton button13;
ControllButton button14;
JMyron cam;
Microsoft LifeCam Show RLA-00007
flyta camWidth_ = 352;
flyta camHeight_ = 288;
int camWidth = int(camWidth_);
int camHeight = int(camHeight_);
flyta K00 = 2;
int k = int(k_);
flyta k1 = camWidth_/127 * k;
flyta k2 = camHeight_/127 * k;
float x;
float y;
float xa;
flyta ya;
int framåt = 0;
int servoneutral = 66; Servoneutral värde varierar beroende på varje servo.
int speedcontrollerneutral = 63.
int steval = servoneutral;
int velval = speedcontrollerneutral;
int reversea = 'F';
booleska reverseb = false;
void setup() {
size(camWidth*k,camHeight*k);
stroke(128);
port01 = ny Serial(this,"COM43",115200); COM nr. varierar beroende på varje dator.
port01.Clear();
Controll = ControllIO.getInstance(this);
Device = controll.getDevice ("Logitech Driving Force GT USB"); Hänvisa till Enhetshanteraren. Logitech kan vara Logicool.
device.printSliders();
device.printButtons();
device.setTolerance(0.05f);
slider0 = device.getSlider(0); Ratt
slider2 = device.getSlider(2); Bryta Pedal
slider3 = device.getSlider(3); Gaspedalen
Knapp1 = device.getButton(1); Cross knappen
button13 = device.getButton(13); Redskap SKIFT spaken Pull
button14 = device.getButton(14); Redskap SKIFT spaken Push
Fill(0);
rectMode(CENTER);
cam = nya JMyron();
cam.start(camWidth,camHeight);
cam.findGlobs(0);
}
void draw() {
cam.Update();
int [] camPixels = cam.image();
loadPixels();
för (int i2 = 0; i2 < höjd; i2 ++) {
för (int i1 = 0; i1 < bredd; i1 ++) {
pixlar [i2 * bredd + i1] = camPixels [golvet ((höjd-1-i2) /k) * camWidth + floor((width-1-i1)/k)];
}
}
updatePixels();
x = (constrain((1+slider0.getValue())*width/2,0,width));
IF(button1.Pressed()) {framåt = 0, y = höjd/2; reversea = "F"; reverseb = true;}
IF(button13.Pressed()) {framåt = 1; y = höjd/2; reversea = "F"; reverseb = true;}
IF(button14.Pressed()) {framåt = -1; y = höjd/2; reversea = "R"; reverseb = false;}
IF(forward ==1) {
IF(slider2.getValue() < 0) {y = begränsa (y + slider2.getValue()*8*k,height/2,height);}
IF(slider3.getValue() < 0) {y = begränsa (y - slider3.getValue()*4*k,height/2,height);}
IF(slider2.getValue() > 0 & & slider3.getValue() > 0 & & y < höjd * 2/3) {
y = (begränsa (y + slider2.getValue()*0.6*k,height/2,height*2/3));
} annat if(slider2.getValue() > 0 & & slider3.getValue() > 0 & & y > höjd * 2/3) {
y = (begränsa (y - slider3.getValue()*0.3*k,height*2/3,height));
}
}
om (fram == -1) {
IF(slider2.getValue() < 0) {y = begränsa (y - slider2.getValue()*8*k,0,height/2);}
IF(slider3.getValue() < 0) {y = begränsa (y + slider3.getValue()*4*k,0,height/2);}
om (y < = höjd * 5/12 & & reverseb == false) {y = höjd/2; reverseb = true;}
IF(slider2.getValue() > 0 & & slider3.getValue() > 0 & & y > höjd * 1/3) {
y = (begränsa (y - slider2.getValue()*0.6*k,height*1/3,height/2));
} annat if(slider2.getValue() > 0 & & slider3.getValue() > 0 & & y < höjd * 1/3) {
y = (begränsa (y + slider3.getValue()*0.3*k,0,height*1/3));
}
}
rad (x, 0, x, höjd);
linje (0, höjd-y, bredd, höjd-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));
}
}
void keyPressed() {
IF(Key=='s') {
framåt = 0;
x = bredd/2;
y = höjd/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);
}
}