node.js 개발을 위한 편집기를 소개합니다.

Visual Studio에서 제공하는 code의 설치 방법에 대해 간략히 설명 합니다.

 

Visual Studio Code 다운로드

사이트에 들어가면 무료로 다운로드를 받으실 수 있습니다.

운영체제가 윈도우가 아니라면 [Download for Windows] 우측을 눌러 필요한 파일을 다운 받습니다.





오늘 다운받으니 버전은 VSCodeUserSetup-x64-1.28.1.exe 입니다.


다운받은 파일을 실행을 해서 설치를 합니다.




[실행] 버튼을 클릭 합니다.


Visual Studio Code


[다음] 버튼을 클릭 합니다.


이거 또 괜히 만드는 듯한 느낌이 오네




계약에 동의함을 선택하고

[다음] 버튼을 클릭 합니다.



 

설치 위치를 선택합니다.

저는 C:\60GB 짜리라 공간이 얼마 안 남아 D:\에 설치 합니다.




메뉴 폴더를 설정합니다.

[다음] 버튼을 선택 합니다.




특별히 설정할게 없어서 저는 기본으로 두고

[다음] 버튼을 선택 합니다.




설치를 위한 환경설정이 완료 되었습니다.

[설치] 버튼을 눌러 설치를 진행 합니다.




설치가 잘 진행 되고 있습니다.




설치가 완료되었습니다.

 

[마침] 버튼을 선택하여 설치를 종료합니다.




code가 실행된 화면입니다.

단순 깔끔하네요.



설치 메뉴얼이 또 욕먹게 생겨서 뭐 하나 해보겠습니다.


 

Start에 있는 New file을 선택하면 편집화면으로 넘어갑니다.


스크립트를 하나 작성합니다.


아는게 없어서

console.log("Hello World!");

를 적어봤습니다.



코드를 작성했으면 저장을 해야겠죠.


상단 메뉴에서


File > Save As …를 선택해서 파일로 저장을 합니다.


파일형식을 JavaScript(*.js,…)로 설정하고 저장 합니다.


저는 HelloWorld.js로 저장 했습니다.



이제 콘솔 창을 하나 열어서 파일이 있는지 확인을 하고


node HelloWorld.js [엔터]

하면 Hello World!가 찍힙니다.



그렇습니다.


Visual Studio Code는 에디터라 실행은 console에 가서 해줘야 합니다.


그래도 일반 텍스트 편집기 보다는 한가지 편한게



요렇게 자동완성 기능이 있습니다.

 

다음에는 eclipse로 한방에 실행을 할 수 있도록 해보겠습니다.


- copy coding -


요즘 사용 하는 곳이 점점 늘어나는 것 같아 뭔가 궁금해서 설치를 해보았습니다.

 

node.js 설치는 너무 간단해서 간략히 설명 드립니다.

 

node.js 사이트에 접속을 합니다.  


https://nodejs.org/ko/




안정적인 버전이 좌측에 있습니다. 계속 버전이 갱신 되겠지만 좌측에 있는걸 다운 받습니다.


운영 체제가 윈도우가 아니면 하단에서 [다른운영체제]를 클릭 합니다.




다운 받는동안 눌러 봤습니다. 운영체제 별, bit별로 정리되고 소스도 공개 되어있네요.

 


이제 다운받은 파일을 설치해 보겠습니다.


node-v8.12.0-x64.msi 파일을 실행 합니다.

 


[실행] 버튼을 클릭 합니다.


nodejs download install


[Next] 버튼을 클릭 합니다.



I accept the terms in the License Agreement를 체크하고

[Next] 버튼을 클릭 합니다.



설치 위치를 변경하려면 Change…로 다른 디렉토리를 선택 하고

[Next] 버튼을 클릭 합니다.



마음에 안드는게 있으면 빼버리고

[Next] 버튼을 클릭 합니다.



설치 관련 설정이 끝났다는군요.

[Install]을 클릭해서 설치를 진행 합니다.



설치가 잘 진행 되네요.



설치가 끝났답니다.

[Finish]를 클릭 합니다.



정말 설치가 잘 되었는지 확인하기 위해 command 창을 하나 열고

node를 치고 엔터



진짜 잘 설치 되었네요.


- copy coding -



중력 센서(TYPE_GRAVITY)는 중력 가속도에 대한 값을 반환하는 센서 입니다.

중력 센서를 가속도 센서 비교 (TYPE_ACCELEROMETER / TYPE_LINEAR_ACCELERATION)를 할 때

다루지 않은 이유는 가속센서는 조금만 움직여도 가속도 값이 더해져서 표시가 됩니다.


중력 센서는 그냥 중력만 표시할 뿐 그 이외의 어떠한 값이 포함 되지 않습니다.

, 아무리 핸드폰을 흔들고 달려보아도 총 중력 값이 변하지 않고 항상 9.8의 값을 유지 합니다.

이 말은 z축의 값이 9.8이 되도록 한다면 핸드폰은 완전한 평형을 이루고 있다는 뜻이고

중력 센서를 이용하면 간단하게라도 수평계를 만들 수 있습니다.

 


1 중력 센서



1.1 중력 센서 이벤트 값


TYPE_GRAVITY 센서가 작동 되면 리턴되는 값으로 다음과 같은 value를 넘겨 주며 단위는 가속도(m/s2) 입니다.


Sensor 

 Sensor event data

 표현 값

 측정 단위

 TYPE_GRAVITY

 SensorEvent.values[0]

 x축 중력 강도

 m/s²

 TYPE_GRAVITY

 SensorEvent.values[1]

 y축 중력 강도

 m/s²

 TYPE_GRAVITY

 SensorEvent.values[2]

 z축 중력 강도

 m/s²


 

2 중력 센서 프로젝트

 


2.1 신규 프로젝트 생성


안드로이드 스튜디오에서 적당한 이름으로 프로젝트를 하나 생성합니다.

 

2.2 Layout 작성


activity_main.xml

 

중력 센서가 보내오는 x, y, z축의 m/s2 값들을 출력할 수 있는 TextView를 작성합니다.

 


<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <TextView
        android:id="@+id/tvTitle"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Gravity Sensor"
        android:layout_marginTop="50dp"
        android:textSize="30dp"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent" />
    <TextView
        android:id="@+id/tvXaxis"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:layout_constraintTop_toBottomOf="@+id/tvTitle"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        android:textSize="25dp"
        android:text="X axis : 0"
        />
    <TextView
        android:id="@+id/tvYaxis"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:layout_constraintTop_toBottomOf="@+id/tvXaxis"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        android:textSize="25dp"
        android:text="Y axis : 0"
        />
    <TextView
        android:id="@+id/tvZaxis"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:layout_constraintTop_toBottomOf="@+id/tvYaxis"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        android:textSize="25dp"
        android:text="Z axis : 0"
        />
    <TextView
        android:id="@+id/tvGravity"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:layout_constraintTop_toBottomOf="@+id/tvZaxis"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        android:textSize="25dp"
        android:text="Total Gravity : 0"
        />
</android.support.constraint.ConstraintLayout>


2.3 Java Source


MainActivity.java

소스를 보면 알겠지만 기존 센서와 동일한 프로세스로 작동이 됩니다.

핸드폰이 움직일 때 마다 각 축으로부터 받는 중력을 합한 중력 총량을 구합니다.



package com.example.desk.sensorgravity;

import android.content.Context;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity implements SensorEventListener {

    private SensorManager sensorManager;
    private Sensor gravitySensor;
    private double total;
    TextView tvXaxis, tvYaxis, tvZaxis, tvGravity;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        tvXaxis = (TextView)findViewById(R.id.tvXaxis);
        tvYaxis = (TextView)findViewById(R.id.tvYaxis);
        tvZaxis = (TextView)findViewById(R.id.tvZaxis);



        tvGravity = (TextView)findViewById(R.id.tvGravity);

        sensorManager = (SensorManager)getSystemService(Context.SENSOR_SERVICE);
        gravitySensor = sensorManager.getDefaultSensor(Sensor.TYPE_GRAVITY);
    }

    @Override
    protected void onResume() {
        super.onResume();
        sensorManager.registerListener(this, gravitySensor, SensorManager.SENSOR_DELAY_NORMAL);
    }

    @Override
    protected void onPause() {
        super.onPause();
        sensorManager.unregisterListener(this);
    }

    @Override
    public void onSensorChanged(SensorEvent event) {
        if(event.sensor == gravitySensor) {

            total = Math.sqrt(Math.pow(event.values[0],2) + Math.pow(event.values[1], 2) + Math.pow(event.values[2] , 2));

            tvXaxis.setText("X axis : " + String.format("%.2f", event.values[0]));
            tvYaxis.setText("Y axis : " + String.format("%.2f", event.values[1]));
            tvZaxis.setText("Z axis : " + String.format("%.2f", event.values[2]));
            tvGravity.setText("Total Gravity : "  + String.format("%.2f", total) + " m/s\u00B2");
        }
    }

    @Override
    public void onAccuracyChanged(Sensor sensor, int accuracy) {

    }
}


3. 결과

 

3.1 결과 화면

 

핸드폰을 평평한 곳에 놓았을 때나 흔들고 이동을 하여도 전체 중력 값은 동일한 것을

확인 할 수 있습니다.


android gravity sensor



3.2 Source Code


 

SensorGravity.7z



 

3.3 APK File


SensorGravity.apk


- copy coding -


안드로이드에서 제공하는 가속도 센서는 2개가 있습니다.

이 센서들에 대해서 간단하게 테스트를 해보았습니다.


1. 가속도 센서


가속도 센서(TYPE_ACCELEROMETER)는 중력 가속도와 관계가 있습니다.

이를 확인 하려면 가속도 센서를 켜고 핸드폰을 이리저리 굴려보면 알 수 있습니다.



1.1 좌표에 맞추어 핸드폰 기울이기


간단히 테스트를 해보면 아래 그림과 같은 값을 얻을 수 있습니다.

아주 안정적인 상태에서 테스트 하면 Total Gravity9.8m/s² 값이겠지만 캡처 사진은 오차가 많네요. 수전증인가



그림

 좌표 값

 설명

 z

 x:0, y:0, z:9.8

 - 책상위에 핸드폰을 놓은 경우, 중력가속도 작용

 -z

 x:0, y:0, z:-9.8

 - 핸드폰을 책상 위에 뒤집어 놓은 경우, 마이너스(-)중력 가속도

 x

 x:-9.8, y:0, z:0

 - 핸드폰 우측 면을 기준으로 90도 세운경우, 중력가속도 x축 적용.

 - 핸드폰 좌측 면을 기준으로 90도 세우면 값은 양수(+) 중력가속도

 y

 x:0, y:0-9.8 z:0

 - 핸드폰을 상단면을 기준으로 90도 세운경우, 중력가속도 y축 적용.

 - 핸드폰을 하단면을 기준으로 90도 세운경우, 양수(+) 중력가속도.


핸드폰을 x, y축을 기준으로 했을 경우의 반대 방향에 대한 그림은 생략 했습니다.



1.2 임의 방향으로 핸드폰 기울이기



지금까지는 직각 방향에 대한 내용이고 만일 핸드폰을 비스듬하게 놓으면 어떤 값을 나타 낼까요?

중력가속도는 9.8로 일정하게 작용하기 때문에 기울어진 각도 만큼 z축이 가지고 있던 9.8의 값을

x축과 y축이 나누어 받게 됩니다.


어째든 결과는 총 가속도 값이 9.8로 항상 동일 합니다.






피타고라스의 정리에 의해 직각삼각형의 빗변의 길이를 구하는 공식을 참고하면

직각 사각형의 크기도 구할 수 있습니다.

그러면 기울어진 핸드폰의 총 가속도 크기는 각 변의 제곱을 더한 값을 제곱근 하면 됩니다.

핸드폰 좌표 그림에서 보듯이 중력가속도는 지구 중심을 향하기 때문에 양(+)의 좌표 값이 반대로 됩니다.



2. 가속도 센서 중력 영향 제거


가속도 센서가 중력의 영향을 받기 때문에 실제 응용 프로그램을 만들려면 중력가속도에 대한

값을 상쇄시켜줘야 합니다.

우리가 생활 하는데 마치 중력이 없는 것 처럼 해야 한다는 것이지요.

게임을 만들때는 중력값을 달처럼 해서 작업한다고 하는데 안해봐서 모르겠지만 잼있겠네요.


private float accX, accY, accZ, tempX, tempY, tempZ;
private float alpha = 0.8f;

tempX = alpha * tempX + (1 - alpha) * event.values[0];
tempY = alpha * tempY + (1 - alpha) * event.values[1];
tempZ = alpha * tempZ + (1 - alpha) * event.values[2];

accX = event.values[0] - tempX;
accY = event.values[1] - tempY;
accZ = event.values[2] - tempZ;

이렇게 하면 x, y, z축의 값이 0가 되어 속도계나 다른 작업에 사용할 수 있습니다.



3. 선형 가속도 센서


그런데 구글에서는 중력가속도를 제거한 가속도 센서를 제공하고 있습니다.

그 센서는 TYPE_LINEAR_ACCELERATION 이것 입니다.


TYPE_LINEAR_ACCELERATION 센서에 대한 구글의 설명을 살펴볼까요?

구글 사이트에서 그대로 일부를 뜯어와서 밑줄만 그어봤습니다.



TYPE_ACCELEROMETER는 중력가속도가 포함되어 있고

TYPE_LINEAR_ACCELERATION는 중력가속도를 제거한 값이라는 군요.

 


4. 가속도 센서 비교


그럼 이 3가지 경우에 대해서 한번에 다 몰아서 비교를 해보도록 하겠습니다.

우선 결과를 보도록 하겠습니다.


accelerometer linear


제일 상단이 TYPE_ACCELEROMETER 센서 값을 그대로 보여주는 것이고

두번째 값이 TYPE_ACCELEROMETER 센서 값에서 중력을 제거한 경우

마지막이 TYPE_LINEAR_ACCELERATION 센서 값입니다.


두번째와 세번째 값이 동일(제 핸드폰기준)한 것을 알 수 있습니다.



5. 가속도 센서 프로젝트


이번에도 activity_main.xml MainActivity.java 두개의 파일로 구성되어 있습니다.

프로젝트를 적당히 하나 만드시고 작업하면 됩니다.

만들기 싫으면 소스를 받아서 테스트 하거나 APK 파일을 받아 사용해도 됩니다.


5.1 Layout


결과들을 보여줄 TexvView13개 만들어 줍니다.

쓸데없이 소스만 깁니다.


activity_main.xml


<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <TextView
        android:id="@+id/tvTitle"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Accelerometer Compare"
        android:layout_marginTop="10dp"
        android:textSize="30dp"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent" />
    <TextView
        android:id="@+id/tvgXaxis"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:layout_constraintTop_toBottomOf="@+id/tvTitle"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        android:textSize="25dp"
        android:text="X axis : 0"
        />
    <TextView
        android:id="@+id/tvgYaxis"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:layout_constraintTop_toBottomOf="@+id/tvgXaxis"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        android:textSize="25dp"
        android:text="Y axis : 0"
        />
    <TextView
        android:id="@+id/tvgZaxis"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:layout_constraintTop_toBottomOf="@+id/tvgYaxis"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        android:textSize="25dp"
        android:text="Z axis : 0"
        />
    <TextView
        android:id="@+id/tvgTotal"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:layout_constraintTop_toBottomOf="@+id/tvgZaxis"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        android:textSize="25dp"
        android:text="Speed : 0"
        />

    <TextView
        android:id="@+id/tvXaxis"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:layout_constraintTop_toBottomOf="@+id/tvgTotal"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        android:textSize="25dp"
        android:text="X axis : 0"
        />
    <TextView
        android:id="@+id/tvYaxis"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:layout_constraintTop_toBottomOf="@+id/tvXaxis"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        android:textSize="25dp"
        android:text="Y axis : 0"
        />
    <TextView
        android:id="@+id/tvZaxis"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:layout_constraintTop_toBottomOf="@+id/tvYaxis"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        android:textSize="25dp"
        android:text="Z axis : 0"
        />
    <TextView
        android:id="@+id/tvTotal"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:layout_constraintTop_toBottomOf="@+id/tvZaxis"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        android:textSize="25dp"
        android:text="Speed : 0"
        />

    <TextView
        android:id="@+id/tvlXaxis"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:layout_constraintTop_toBottomOf="@+id/tvTotal"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        android:textSize="25dp"
        android:text="X axis : 0"
        />
    <TextView
        android:id="@+id/tvlYaxis"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:layout_constraintTop_toBottomOf="@+id/tvlXaxis"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        android:textSize="25dp"
        android:text="Y axis : 0"
        />
    <TextView
        android:id="@+id/tvlZaxis"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:layout_constraintTop_toBottomOf="@+id/tvlYaxis"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        android:textSize="25dp"
        android:text="Z axis : 0"
        />
    <TextView
        android:id="@+id/tvlTotal"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:layout_constraintTop_toBottomOf="@+id/tvlZaxis"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        android:textSize="25dp"
        android:text="Speed : 0"
        />
</android.support.constraint.ConstraintLayout>


5.2 Java Source


MainActivity.java

가속도 센서 2개의 값을 구하고 중력가속도를 제거하는 값을 구하는 프로그램 입니다.

위에서 설명을 하여 추가적인 설명이 필요없이 보시면 알 수 있습니다.

 


package com.example.desk.accelercompare;

import android.content.Context;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity implements SensorEventListener {

    private SensorManager sensorManager;
    private Sensor accelerSensor;
    private Sensor linearAccelerSensor;
    private float gAccX, gAccY, gAccZ, accX, accY, accZ, lAccX, lAccY, lAccZ ;
    private float tempX, tempY, tempZ;
    private double gTotal, total, lTotal;
    private long lastUpdate = 0;
    private float alpha = 0.8f;
    TextView tvgXaxis, tvgYaxis, tvgZaxis, tvXaxis, tvYaxis, tvZaxis, tvlXaxis, tvlYaxis, tvlZaxis, tvgTotal, tvTotal, tvlTotal;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        tvgXaxis = (TextView)findViewById(R.id.tvgXaxis);
        tvgYaxis = (TextView)findViewById(R.id.tvgYaxis);
        tvgZaxis = (TextView)findViewById(R.id.tvgZaxis);
        tvXaxis = (TextView)findViewById(R.id.tvXaxis);
        tvYaxis = (TextView)findViewById(R.id.tvYaxis);
        tvZaxis = (TextView)findViewById(R.id.tvZaxis);
        tvlXaxis = (TextView)findViewById(R.id.tvlXaxis);
        tvlYaxis = (TextView)findViewById(R.id.tvlYaxis);
        tvlZaxis = (TextView)findViewById(R.id.tvlZaxis);
        tvgTotal = (TextView)findViewById(R.id.tvgTotal);
        tvTotal  = (TextView)findViewById(R.id.tvTotal);
        tvlTotal = (TextView)findViewById(R.id.tvlTotal);

        sensorManager = (SensorManager)getSystemService(Context.SENSOR_SERVICE);
        accelerSensor = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
        linearAccelerSensor = sensorManager.getDefaultSensor(Sensor.TYPE_LINEAR_ACCELERATION);
    }

    @Override
    protected void onResume() {
        super.onResume();
        sensorManager.registerListener(this, accelerSensor, SensorManager.SENSOR_DELAY_NORMAL);
        sensorManager.registerListener(this, linearAccelerSensor, SensorManager.SENSOR_DELAY_NORMAL);
    }

    @Override
    protected void onPause() {
        super.onPause();
        sensorManager.unregisterListener(this);
    }

    @Override
    public void onSensorChanged(SensorEvent event) {
        if(event.sensor == accelerSensor) {
            //include gravity
            gAccX = event.values[0];
            gAccY = event.values[1];
            gAccZ = event.values[2];

            tempX = alpha * tempX + (1 - alpha) * event.values[0];
            tempY = alpha * tempY + (1 - alpha) * event.values[1];
            tempZ = alpha * tempZ + (1 - alpha) * event.values[2];

            accX = event.values[0] - tempX;
            accY = event.values[1] - tempY;
            accZ = event.values[2] - tempZ;

            gTotal = Math.sqrt(Math.pow(gAccX,2) + Math.pow(gAccY, 2) + Math.pow(gAccZ , 2));
            total = Math.sqrt(Math.pow(accX,2) + Math.pow(accY, 2) + Math.pow(accZ , 2));

            tvgXaxis.setText("X axis : " + String.format("%.2f", gAccX));
            tvgYaxis.setText("Y axis : " + String.format("%.2f", gAccY));
            tvgZaxis.setText("Z axis : " + String.format("%.2f", gAccZ));
            tvgTotal.setText("Total Gravity : "  + String.format("%.2f", gTotal) + " m/s\u00B2");

            tvXaxis.setText("X axis : " + String.format("%.2f", accX));
            tvYaxis.setText("Y axis : " + String.format("%.2f", accY));
            tvZaxis.setText("Z axis : " + String.format("%.2f", accZ));
            tvTotal.setText("Total Gravity : "  + String.format("%.2f", total) + " m/s\u00B2");
        }

        if(event.sensor == linearAccelerSensor) {
            //exclude gravity
            lAccX = event.values[0];
            lAccY = event.values[1];
            lAccZ = event.values[2];

            lTotal = Math.sqrt(Math.pow(lAccX,2) + Math.pow(lAccY, 2) + Math.pow(lAccZ , 2));

            tvlXaxis.setText("X axis : " + String.format("%.2f", lAccX));
            tvlYaxis.setText("Y axis : " + String.format("%.2f", lAccY));
            tvlZaxis.setText("Z axis : " + String.format("%.2f", lAccZ));
            tvlTotal.setText("Total Gravity : "  + String.format("%.2f", lTotal) + " m/s\u00B2");


        }
    }

    @Override
    public void onAccuracyChanged(Sensor sensor, int accuracy) {

    }
}



5.3 Source file

 

AccelerCompare.7z


 

5.4 APK file


AccelerCompare.apk


- copy coding -


1···112113114115116117118

+ Recent posts