Skip to content

Instantly share code, notes, and snippets.

@hecomi
Last active January 5, 2020 16:24
Show Gist options
  • Save hecomi/f7dce92617d46b01358bd8e280a31e09 to your computer and use it in GitHub Desktop.
Save hecomi/f7dce92617d46b01358bd8e280a31e09 to your computer and use it in GitHub Desktop.
using UnityEngine;
public class SerialCube : MonoBehaviour
{
public SerialHandler serialHandler;
public float threshold = 30f;
public Vector3 velocity = new Vector3(0f, 0.5f, 0f);
void Start()
{
serialHandler.OnDataReceived += OnDataReceived;
}
void OnDataReceived(string message)
{
var data = message.Split(
new string[] { "\t" },
System.StringSplitOptions.None);
if (data.Length < 2) return;
try
{
var temperature = float.Parse(data[0]);
if (temperature > threshold)
{
transform.localPosition += velocity * Time.deltaTime;
}
}
catch (System.Exception e)
{
Debug.LogWarning(e.Message);
}
}
}
@mitatoshi
Copy link

あけましておめでとうございます。Arduinoにて温度センサーの値を移動平均にて平滑化するコード自分なりに書いてみたのですが、少し間違っているのか平滑化ができていないと言われました。どのように変更すればよろしいのでしょうか?お時間がありましたら教えて頂きたいです。

//温度センサーの値を移動平均にて平滑化する
#define n 100
int sensorPin = A1; //アナログ1番ピンを指定
float sensorValue = 0;
int f[n]={0};

void setup() {
Serial.begin(9600); //シリアルモニタに表示するための設定
Serial.println("start");
}

void loop() {
sensorValue = analogRead(sensorPin); 
for(int i=n-1;i>0;i--)f[i]=f[i-1];
f[0]=analogRead(1);
for(int i=0;i<n;i++) sensorValue+=f[i];
sensorValue =(float)sensorValue/n;

Serial.print(sensorValue);
Serial.print("\t");
Serial.println("");
delay(50);
}

@hecomi
Copy link
Author

hecomi commented Jan 1, 2020

※ Gist でのコード記述は新規で作成した方がコードが読みやすいかもしれませんね。

  • analogReadA1 を読んだり 1 を読んだりしていますがあっていますでしょうか?
  • sensorValue には f[0] が重複してカウントされてしまっているように思われます。単純に以下のように平均を求める式の方が簡単かもしれませんね
float sensorValue = 0.f;
for (int i=0; i<n; i++) sensorValue+=f[i];
sensorValue /= n;

また、

少し間違っているのか平滑化ができていないと言われました。

とのことですが、これはどなたに言われた内容でしょうか?そちらの方にお聞きいただいた方が、より直接的なコミュニケーションが取れて効率的かな、と思いました。

@mitatoshi
Copy link

ご返事ありがとうございます。#Gistを使い始めたばかりですので、これから使えるようになっていきたいです。
指摘していただけたanlogReadやsensorValueの重複に関しましては訂正させていただきました。ありがとうございます。
また、平滑化ができていないというのはterateilと呼ばれるサイトにて尋ねたところ、ADコンでは0から1023の値を出すのに1023*100/99の計算をしているからおかしいと言われました。

@hecomi
Copy link
Author

hecomi commented Jan 2, 2020

  • https://teratail.com/questions/232722
    こちらだと思われますが、ご指摘されているようにまずどのような値が出てきて何が間違っていると考えているか把握されるところからスタートするのが良いと思われます。間違っていると言われても間違っていないこともあります、まずはご自身で確認して具体的に出てきた値を見て、それが理想とする値とどのように違うのかの原因を考えた上でご質問いただけますとよりスムーズだと思います。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment