#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) {
}
}
}
}
이게 아두이노 속력값을 받아서 유니티로 속도내게 하려는건데 어떻게 해?>
유니티 쓰레기 해봐야 돈벌리겠냐?
호뤠이 열폭 - DCW