Komma igång med avstånd sensorer och Arduino (6 / 8 steg)
Steg 6: Visa storleken på 3D-objekt på skärmen i förhållande till avstånd med bearbetning
Målet här var att se avståndet mer bildligt än bara ett nummer på skärmen. Objekten storlek varierar beroende på avståndet MaxSonic läser av ett objekt.
Bearbetar koden:
import processing.serial.*;
Seriella myPort; Den seriella porten, kommer inte att kunna ansluta om seril kontrollorganet i arduino är öppen så se till att stänga den
String inBuffer = null; lagrar en rad med data från serieporten
int x, y, z;
int lf = 10; Radmatning i ASCII
void setup() {
storlek (640, 360, P3D);
noStroke();
println(Serial.list());
myPort = ny följetong (denna, Serial.list() [5], 9600); Serial.list[1] för usb [0] för direkt seriell
}
void draw() {
IF(x<60) {
x = 40;
}
Lights();
Background(204);
float cameraY = höjd/2.0;
flyta fov = (x/float(width)) + 0,2 * PI/2.
flyta cameraZ = cameraY / tan(fov / 2.0);
flyta aspekt = float(width)/float(height);
om (mousePressed) {
höjd = aspekt / 2,0;
}
perspektiv (fov, aspekt, cameraZ/10,0, cameraZ * 10,0);
Fill(150,0,0);
Översätt (bredd/2 + 30, höjd/2, 0);
rotateX(-PI/6);
rotateY (PI/3 + 7/8 * PI);
Box(45);
Översätt (0, 0, -50);
Box(30);
}
void serialEvent(Serial myPort) {
inBuffer = myPort.readStringUntil(lf); lagra serieport buffert i globala var inBuffer (läsa strängen tills radmatning (int lf = 10; / / radmatning i ASCII) etc
om (inBuffer! = null) {
println ("SERIAL:" + inBuffer); ut linefrom sedan seriell in
försök {
flyta [] dat = float (split (inBuffer, ",")); tolka kommaavgränsad nummer sträng till nummer array
x = int (dat[0]);
y = int (dat[1]);
z = int (dat[2]);
}
fånga (undantag e) {/ / om det finns en icke parsible sträng dess deklarerade null
inBuffer = null;
}
println (x);
}
}
Vi fick här koden från Nicholas Stevens.
Arduino kod:
Behaga bli respektfullt genom att erkänna författaren i koden om du använder eller ändra den. < br > / / författare: Bruce Allen
Datum: 23/07/09
Digital stift 7 för läsning i puls bredd från MaxSonar enheten.
Denna variabel är en konstant eftersom den PIN-kod inte ändras under hela utförandet av denna kod.
CONST int pwPin = 7.
variabler som behövs för att lagra värden
lång puls, tum, cm;
int utgång;
void setup() {
Detta öppnar upp en seriell anslutning till skjuta resultaten tillbaka till PC konsolen
Serial.BEGIN(9600);
}
void loop() {< br > pinMode (pwPin, ingång); < br > //Used att läsa i den puls som skickas av MaxSonar enheten.
Puls bredd representation med en skalfaktor av 147 USA per tum. < br > puls = pulseIn (pwPin, hög);
147uS per tum
inches = puls/147;
ändra tum till centimeter
cm = inches * 2,54; < br > / / Serial.print(inches);
Serial.Print ("in");
Serial.Print(cm);
Serial.Print("cm");
Serial.println();
output = map(cm,0,645,0,1023); Serial.println(output); < br > < br > delay(1); < br >}
Vi hittade koden här, under PW: http://playground.arduino.cc/Main/MaxSonar (Allen, 09.10.14)
Vi ändrade koden, produktionen är endast cm (cm och tum).