#include <Time.h>

#include <LiquidCrystal.h>


float radius = 20; // 바퀴당 이동 거리를 확인 하기 위해 자전거 바퀴의 반지름을 입력해 줍니다.(Cm 단위)

float circle = (2 * radius * 3.14) / 100;  // 자전거 바퀴의 둘레를 계산(단위를 m로 바꿔주기 위해 100을 나눕니다.)


float bySpeed = 0; // 자전거의 속도

float ckTime = 0;  // 리드스위치가 

float uckTime = 0; // Unckecked

float cycleTime = 0;  // 리드스위치가 인식이 안됬을 시간 부터 인식됬을 때까지의 시간 

float distance = 0; // 자전거의 누적 이동 거리

float lcdDis = 0; // 자전거의 이동 거리를 LCD출력에 맞게 바꿔즌 값.(단위 수정 or 소숫점 제거)


int count = 0;  // 리드스위치의 노이즈를 제거하기 위해 카운트를 넣어줍니다.

boolean temp = 0;  // 리드 스위치가 닫혔는지 확인하는 변수


LiquidCrystal lcd(12,11,5,4,3,2);   //RS 핀, E핀, 데이터 핀 4개



void setup(){

  Serial.begin(9600);  // 측정된 값을 시리얼 모니터로 확인하기 위해 bps를 설정해 줍니다.

  

  lcd.begin(16,2); // LCD 크기 지정, 2줄 16칸

  lcd.clear();     // 화면 초기화

}


void loop(){

  boolean check = digitalRead(A0); // 리드스위치의 상태를 확인합니다.

  

  if(check == 1 && temp == 0){  // 리드 스위치가 열릴 때(닫힘 -> 열림)

    ckTime = millis();  // 시간을 확인해서 저장합니다.

    temp = 1;  // temp값을 1로 바꿔줍니다.(리드스위치가 열려있는 상태값 저장)

  }

  

  else if(check == 0 && temp == 1 && count > 5){  // 리드 스위치가 닫히고(열림 -> 닫힘), 노이즈 방지 카운트가 5이상일때

    uckTime = millis();  // 시간을 확인해서 저장합니다.

      

    cycleTime = (uckTime - ckTime) / 1000;

    // 열릴 때 시각과 닫힐 때 시각의 차를 이용하여 바퀴가 한바퀴 돌때 걸린 시간을 계산합니다.

    bySpeed = (circle / cycleTime) * 3.6; // 바퀴가 한바퀴 돌때의 거리와 시간을 가지고 속도를 구해줍니다.(단위는 Km/h입니다.)

    temp = 0; 

    count = 0; 

    distance += circle;  // 한바퀴 돌았으면 이동거리를 누적 이동거리에 더해줍니다.

  }

  

  if(check == 1){  // 리드 스위치가 열려있으면 카운트를 1씩 증가 시켜 줍니다.

    count++;

    if(count > 150){ // 카운트가 150이 넘어가면(자전거가 멈췄을 때) 속도를 0으로 바꿔줍니다.

      bySpeed = 0;

    }

  }

  

  if(digitalRead(A1) == 0){  // 버튼을 누르면 누적거리를 0으로 초기화 합니다.

    distance = 0;

  }



  lcd.setCursor(0,0);          //커서를 0,0에 지정

  lcd.print("Speed: "); 

  if(bySpeed < 10){            // 속도가 한자리라면 앞에 0을 붙여 줍니다.

    lcd.print('0');

  }

  lcd.print(bySpeed);               

  lcd.print("Km/h");           // 속도를 lcd에 출력합니다.("Speed: xx.xxKm/h");

  

  lcdDis = distance / 1000;  

  lcd.setCursor(0,1);          // 커서를 0,1에 지정

  lcd.print("Distance: ");  

  if(lcdDis >= 100){           // 이동거리가 100Km가 넘어가면 소숫점을 지워줍니다.

    lcd.print((int)lcdDis);

  }

  else{

    lcd.print(lcdDis);               

  }            

  lcd.print("Km");             // 이동거리를 lcd에 출력합니다.("Distance: xx.xxKm")

  

  lcd.print("               ");        //전 글씨 삭제

  if (Serial.available()) {

  if (Serial.read() == 'p') {

  Serial.print("Speed : ");

  Serial.write(0xff);

  Serial.println(" km/h");             // 시리얼 모니터를 이용하여 속도를 확인합니다.

  }

  }

}

이게 아두이노 소스 속력구하는거고





using UnityEngine;

using System.Collections;

using System.IO.Ports;


public class Mm : MonoBehaviour {

SerialPort sp = new SerialPort("COM5", 9600);  //set Serial port

float bySpeed ;



// Use this for initializatioS

void Start() {

sp.Open();  //Serial port open

sp.ReadTimeout = 1;  //set Serial timeout


}

// Update is called once per frame

void Update() {


if (sp.IsOpen) {

try {

sp.Write ("p");  //send start data

bySpeed = sp.ReadExisting ();  //read a byte

if (bySpeed > 10) {  //check start byte


transform.Translate (Vector3.forward * bySpeed);

}



} catch (System.Exception) {

}

}

}

}


이게 아두이노 속력값을 받아서 유니티로 속도내게 하려는건데 어떻게 해?>