ITTT Arduino Yun Schoolproject (4 / 4 steg)
Steg 4: Mer kod!
Öppna den bearbetning IDE och kopiera följande kod till en ny skiss:
import processing.serial.*; Import-bibliotek för seriell kommunikation
import java.awt.event.KeyEvent; Import biblioteket för att läsa data från den seriella porten import java.io.IOException; Seriella myPort; Definierar objekt följetong
Definierar nödvändiga variabler snöre vinkel = ""; Sträng avstånd = ""; Sträng data = ""; Sträng noObject; float pixsDistance; int iAngle, iDistance; int index1 = 0; int index2 = 0; PFont orcFont;
void setup() {storlek (1280, 720); / / skärm upplösning smooth(); myPort = ny följetong (this,"/dev/cu.usbmodemfa131", 9600); / / startar den seriell kommunikationen genom att registrera den seriella porten (måste vara i använda av Arduino för att fungera, men det skiljer sig också från Windows till Mac) myPort.bufferUntil('.'); / / läser in data från den seriella porten (vinkel och avstånd)}
Annullera draw() {fill(98,245,31); / / ger effekten av rörelse oskärpa och de långsamma fade rörliga linje noStroke(); fill(0,4); rect (0, 0, bredd, höjd höjd * 0,065); fill(98,245,31); / / kod för den gröna färgen / / funktioner för att rita radar drawRadar(); drawLine(); drawObject(); drawText();}
void serialEvent (Serial myPort) {/ / kod för att börja läsa data från serieporten data = myPort.readStringUntil('.'); data = data.substring(0,data.length()-1); index1 = data.indexOf(","); / / hitta tecknet ',' och placerar det i variabeln "index1" vinkeln = data.substring (0, index1); / / läsa data från läge "0" till positionen för den variabla index1 eller det är värdet av vinkeln Arduino styrelsen skickade in Serial Port avståndet = data.substring(index1+1 , data.length()); Läsa data från position "index1" till slutet av data pr som är värdet av distansera / / förvandlar String variabler till heltal iAngle = int(angle); iDistance = int(distance); }
void drawRadar() {/ / kod för att göra radar visas på skärmen pushMatrix(); translate(width/2,height-height*0.074); / / flyttar den börjar coordinats till ny plats noFill(); strokeWeight(2); stroke(98,245,31); / / drar arc linjer arc(0,0,(width-width*0.0625),(width-width*0.0625),PI,TWO_PI); arc(0,0,(width-width*0.27),(width-width*0.27),PI,TWO_PI); arc(0,0,(width-width*0.479),(width-width*0.479),PI,TWO_PI); arc(0,0,(width-width*0.687) (bredd bredd * 0.687), PI, TWO_PI); Drar den vinkel linjer line(-width/2,0,width/2,0); line(0,0,(-width/2)*cos(radians(30)),(-width/2)*sin(radians(30))); line(0,0,(-width/2)*cos(radians(60)),(-width/2)*sin(radians(60))); line(0,0,(-width/2)*cos(radians(90)),(-width/2)*sin(radians(90))); line(0,0,(-width/2)*cos(radians(120)),(-width/2)*sin(radians(120))); line(0,0,(-width/2)*cos(radians(150)),(-width/2)*sin(radians(150))); line((-width/2)*cos(radians(30)),0,width/2,0); popMatrix(); }
void drawObject() {pushMatrix(); translate(width/2,height-height*0.074); / / flyttar den börjar coordinats till ny plats strokeWeight(9); stroke(255,10,10); / / röd färg pixsDistance = iDistance*((height-height*0.1666)*0.025); / / fodral avståndet från sensorn från cm till pixlar / / gränser spänna till 40 cms if(iDistance<40) {/ / drar objektet enligt vinkel och avstånd line(pixsDistance*cos(radians(iAngle)) ,-pixsDistance*sin(radians(iAngle)),(width-width*0.505)*cos(radians(iAngle)),-(width-width*0.505)*sin(radians(iAngle))); } popMatrix(); }
void drawLine() {/ / kod om du vill rita linjerna pushMatrix(); strokeWeight(9); stroke(30,250,60); translate(width/2,height-height*0.074); / / flyttar den börjar coordinats till ny plats line(0,0,(height-height*0.12)*cos(radians(iAngle)),-(height-height*0.12)*sin(radians(iAngle))); / / drar gränsen enligt vinkel popMatrix();}
void drawText() {/ / kod för att göra texten på skärmen pushMatrix(); if(iDistance>40) {noObject = "av Range";} annat {noObject = "I rad";} fill(0,0,0); noStroke(); rect (0, höjd höjd * 0.0648, bredd, höjd); fill(98,245,31); textSize(25); text("10cm",width-width*0.3854,height-height*0.0833); text("20cm",width-width*0.281,height-height*0.0833); text("30cm",width-width*0.177,height-height*0.0833); text("40cm",width-width*0.0729,height-height*0.0833); textSize(40); text ("objekt : "+ noObject, bredd bredd * 0,875, höjd-höjd * 0.0277); text ("vinkel:" + iAngle + "°", bredd bredd * 0,48, höjd-höjd * 0.0277); text ("avstånd:", bredd bredd * 0,26, höjd-höjd * 0.0277); IF(iDistance<40) {text ("" + iDistance + "cm", bredd bredd * 0,225, höjd-höjd * 0.0277);} textSize(25); Fill(98,245,60); translate((width-width*0.4994)+width/2*cos(radians(30)),(height-height*0.0907)-width/2*sin(radians(30))); rotate(-radians(-60)); text("30°",0,0); resetMatrix(); translate((width-width*0.503)+width/2*cos(radians(60)),(height-height*0.0888)-width/2*sin(radians(60))); rotate(-radians(-30)); text("60°",0,0); resetMatrix(); translate((width-width*0.507)+width/2*cos(radians(90)),(height-height*0.0833)-width/2*sin(radians(90))); rotate(radians(0)); text("90°",0,0); resetMatrix(); translate(width-width*0.513+width/2*cos(radians(120)),(height-height*0.07129)-width/2*sin(radians(120))); rotate(radians(-30)); text("120°",0,0); resetMatrix(); translate((width-width*0.5104)+width/2*cos(radians(150)),(height-height*0.0574)-width/2*sin(radians(150))); rotate(radians(-60)); text("150°",0,0); popMatrix(); }
Efter detta köra och det bör öppna ett nytt fönster, med radarn visas som i bilden. Efter detta kan du spela med sensor för lite!