OPENLABS

코스 전체목록

닫기

프로젝트:: 완성

 

최종코드

 

import processing.serial.*;

Serial myPort;
String myString = null;
int angle = 0;
int distance = 0;

void setup(){
  size(1200, 700);
  background(0);
  myPort = new Serial(this, "COM14", 9600);
}

void draw(){
  noStroke();
  fill(0,7);
  rect(0,0,width,height);
  drawRader();
  drawLine();
  drawObject();
}

void serialEvent(Serial p){
  try{
    myString = p.readStringUntil('.');
    String[] list = split(myString, ',');
    angle = int(list[0]);
    distance = int(list[1].replace(".",""));
  }catch(Exception e){
    print(e);
  }
}

void drawRader(){
  pushMatrix();
  translate(width/2, height);
  noFill();
  strokeWeight(2);
  stroke(98, 245, 31);
  
  // draw the arc lines
  arc(0, 0, width, width, PI, TWO_PI);
  arc(0, 0, width*2/3, width*2/3, PI, TWO_PI);
  arc(0, 0, width*1/3, width*1/3, PI, TWO_PI);
  
  // draw the angle lines
  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)));
  
  // draw text
  textSize(15);
  fill(98, 245, 31);
  textAlign(RIGHT);
  text("10cm", width*1/6, 0);
  text("20cm", width*2/6, 0);
  text("30cm", width*3/6, 0);

  popMatrix();
}

void drawLine(){
  pushMatrix();
  translate(width/2, height);
  strokeWeight(4);
  stroke(98, 245, 31);
  line(0, 0, width/2*cos(radians(angle)), -width/2*sin(radians(angle)));
  popMatrix();
}

void drawObject(){
  pushMatrix();
  translate(width/2, height);
  strokeWeight(4);
  stroke(255, 10, 10); // red color
  float d = (width/2.0/30.0)*(float)distance;
  
  if( d < width/2)
    line(d*cos(radians(angle)), -d*sin(radians(angle)), width/2*cos(radians(angle)), -width/2*sin(radians(angle)));
  popMatrix();
}

테스트 영상

 

댓글

댓글 본문
버전 관리
YJ
현재 버전
선택 버전
graphittie 자세히 보기