ワークショップで作ったスクリプトその4くらい
using UnityEngine;
using System.Collections;
using Uniduino; //aruduino tukau nara hitsu you
public class analog_test : MonoBehaviour {// haifun wa tsukae nai no?
public Arduino arduino;//
public int pin = 0;//?
public int pinValue;//pin level get
public int yValue;
public int zValue;
public int pinValueX;
public int pinValueY;
public int pinValueZ;
public float spinSpeed;//kaiten sokudo
public GameObject rotBone;//add my bone here
public double rotZ = 0;
//ここあらネットで拾ったスクリプト組み合わせ大会
ArrayList pinValueListX = new ArrayList();
ArrayList pinValueListY = new ArrayList();
ArrayList pinValueListZ = new ArrayList();
// smoothing回数 多いほど滑らか
int SMOOTHING_LENGTH = 20;
void Start () {//初期化など
arduino = Arduino.global;
arduino.Log = (s) => Debug.Log("Arduino: " +s);//log dakara huyou?
arduino.Setup(ConfigurePins); //call ConfigurePins function
//cube = GameObject.Find("Cube");
}
void ConfigurePins( )
{
//arduino.pinMode(pin, PinMode.ANALOG); //
//arduino.reportAnalog(pin, 1); //pin number 1 is enable(1)
arduino.pinMode(0, PinMode.ANALOG);
arduino.reportAnalog(0, 1);
arduino.pinMode(1, PinMode.ANALOG);
arduino.reportAnalog(1, 1);
arduino.pinMode(2, PinMode.ANALOG);
arduino.reportAnalog(2, 1);
// spinSpeed = 0.1;
}
void Update () {
//以下も追加
updatePinValueList (
arduino.analogRead (0),
arduino.analogRead (1),
arduino.analogRead (2)
);
pinValueX = getSmoothedValue (pinValueListX);
pinValueY = getSmoothedValue (pinValueListY);
pinValueZ = getSmoothedValue (pinValueListZ);
///追加
double degX = Mathf.Atan2(pinValueX - 536, pinValueZ - 500) / 3.14159 * 180.0 ;//角度を加速度から
double degY = Mathf.Atan2(pinValueY - 530, pinValueZ - 500) / 3.14159 * 180.0 ;//climb
//double degZ = Mathf.Atan2(pinValueZ - 500, pinValueX - 533) / 3.14159 * 180.0 ;//角度を加速度から
double degZ = Mathf.Atan2(pinValueZ - 500, pinValueY - 530) / 3.14159 * 180.0 ;//角度を加速度から
if(degX > 1)
{
rotZ = rotZ - (degX * 0.01);
}if(degX < -1){
rotZ = rotZ - (degX * 0.01);
};
}
void updatePinValueList(int x, int y, int z){
if (pinValueListX.Count > SMOOTHING_LENGTH) {
pinValueListX.RemoveAt(0);
}
if (pinValueListY.Count > SMOOTHING_LENGTH) {
pinValueListY.RemoveAt(0);
}
if (pinValueListZ.Count > SMOOTHING_LENGTH) {
pinValueListZ.RemoveAt(0);
}
// smoothingしたの値
pinValueListX.Add (x);
pinValueListY.Add (y);
pinValueListZ.Add (z);
}
int getSmoothedValue(ArrayList list){
if (list.Count < SMOOTHING_LENGTH) {
return 0;
}
int sum = 0;
for (int i=0; i<list.Count; i++){
sum += (int)list[i];
}
return (int)(sum / SMOOTHING_LENGTH);
}
}