//sketch_3D_MyJet_MPU6050_V3 import processing.serial.*; Serial myPort; // The serial port float My=0; float Mz=0; float Mx=0; float Py=0; float Pz=0; float Px=0; void setup () { size(1000, 800, P3D); println(Serial.list()); myPort = new Serial(this, Serial.list()[1], 38400); myPort.bufferUntil('\n'); myPort.write("B"); } void draw () { background(0, 256, 256); lights(); noStroke(); fill(240, 240, 230); translate(width / 2, height / 2); translate(Px,Pz,Py); rotateX(Mx); rotateY(Mz); rotateZ(My); OB_A2();//Z軸回転体(胴体) OB_A3();//Z軸回転体(胴体先端) OB2();//主翼 OB3();//水平尾翼 OB4();//垂直尾翼 OB_A4();//Z軸回転体(エンジン) } void serialEvent(Serial myPort) { float r=0.2,Mxn,Myn; String myString = myPort.readStringUntil('\n'); myString = trim(myString); int sensors[] = int(split(myString, ',')); for (int sensorNum = 0; sensorNum < sensors.length; sensorNum++) { print(sensors[sensorNum] + "\t"); } println(); Mxn=1.0*atan2(sensors[1],sensors[2]);//重力方向 Myn=1.0*atan2(sensors[0],sensors[2]);//重力方向 if(abs(Mxn) < 3.2 && abs(Myn) < 3.2) { if(sensors[6]==1) { Mx=Mx*(1-r)+r*Mxn;//重力方向 My=My*(1-r)+r*Myn;//重力方向 Mz=sensors[5]/100000.0; } else { Px=Px*(1-r)+400*r*Mxn;//重力方向 Pz=Py*(1-r)+1000*r*Myn;//重力方向 Py=sensors[5]/400.0; } } myPort.write("A"); } void OB_A4()//Z軸回転体(エンジン) { int sides=16;//分割数 int Sn=6;//面数 float Pz[]={0,-1,-50,-60,-70,-70};//z座標 float R[]={15,20,20,15,15,1};//回転物半径 int i,j; float angleIncrement = TWO_PI/sides; pushMatrix(); translate(60, 36.3,-145); for(j=0;j