IoT iPhone Swift

iphoneアプリで加速度センサーの値をリアルタイムにグラフ表示する

投稿日:

iPhoneアプリで加速度センサーの値を取得する方法については多くの記事が見つかりましたが、リアルタイムに計測値をグラフ表示する方法についてはなかなか見つけられなかったので試行錯誤で作成してみました。

以下が動作結果です。

スマホを振ると加速度の値も変化しておりながらリアルタイムの表示ができました。

 

ソースコード


 

処理の流れ

(1) 折れ線チャートをインスタンス

var chartView1 = LineChartView()

 

(2)Viewに折れ線チャートを加える。

view.addSubview(chartView1)

以降に軸や凡例の表示について設定

 

(3) 加速度値を取得

例えば、x方向の加速度値は「accelData?.acceleration.x」に格納されます。

//加速度値を取得 motionManager.accelerometerUpdateInterval = 0.1 motionManager.startAccelerometerUpdates( to:OperationQueue.current!, withHandler: {(accelData:CMAccelerometerData?,errorOC: Error?) in self.didUpdatedChartView1(yValue: (accelData?.acceleration.z)!) self.didUpdatedChartView2(yValue: (accelData?.acceleration.y)!) self.didUpdatedChartView3(yValue: (accelData?.acceleration.x)!) } )

(4) グラフ表示するためにはChartDataEntryクラスに整形してあげる必要があります。整形したクラスを引数としてupdateChartView関数に渡します。
 
func didUpdatedChartView1(yValue: Double) {
        let newDataEntry = ChartDataEntry(x: xValue,
                                          y: yValue)
        updateChartView1(with: newDataEntry, dataEntries: &dataEntries1)
        xValue += 1
    }

 

(5) updateChartView関数で加速度値が格納されたChartDataEntryをcharView.dataに加えることでグラフ表示されます。
 
func updateChartView1(with newDataEntry: ChartDataEntry, dataEntries: inout [ChartDataEntry]) {
 
        dataEntries.append(newDataEntry)
        chartView1.data?.addEntry(newDataEntry, dataSetIndex: 0)
        
        chartView1.notifyDataSetChanged()
        chartView1.moveViewToX(newDataEntry.x)
    }
 
 
x,y,zの3方向のグラフを表示するのに今回は工夫もなく3回同じ関数を作っていますが、もっとスマートなやり方があるような気がしています。
 

 

以上。

 

 

 

-IoT, iPhone, Swift

Copyright© IT系でないエンジニアの転身 , 2020 All Rights Reserved Powered by STINGER.