互動平衡板 App 程式解說

陳信嘉

內容大綱

  • 畫面編排
  • 程式解說
  • 藍牙連線處理

  • 自動校正程序

  • 檢測程序

  • 一些檢測的公用函式

  • 其他公用函式

畫面編排

清單選擇器

藍牙客戶端

三個計時器

畫布

球形精靈

標籤 (訊息)

  • 螢幕方向:鎖定直式畫面
  • 圖示:(上傳圖檔)

Screen1 重要屬性

程式解說

App 初始化

(1) 取得手機寬高

(2) 指定正方形主版面

重設畫面、顯示訊息、按鍵狀態

(3) 設定畫布大小

藍牙連線處理

藍牙 (1):說明

列出可用的藍牙裝置清單

等使用選擇完畢後進行連線

欲結束時,按鍵後斷線

藍牙 (2):連線

(1) 預先取得藍牙名稱及位址

(2) 使用者選擇指定的藍牙裝置

(3) 藍牙裝置連線

重設畫面、顯示訊息、按鍵狀態

藍牙 (3):斷線

(1) 所有計時器停止

(2) 結束藍牙連線

重設畫面、顯示訊息、按鍵狀態

自動校正程序

自動校正 (1):說明

  • 指定四個邊界的初始值 (待校正後要更新)
  • 計時器進行校正,直到按結束鍵
  • 修正四個邊界的範圍 (正負最大值)

預設四邊範圍的值

校正後得到的範圍值

修正

校正的結果
取得這四個值

自動校正 (2):準備開始

(2) 發送藍牙訊號『a』

重設畫面、顯示訊息、按鍵狀態

(3) 計時器 (校正) 啟用

自動校正 (3):校正進行中

(1) 發送藍牙訊號『a』

(2) 取得訊號指令 (a)

(3) 取得訊號資料 (ax, ay, az)

(4) 更新四個邊界的值

未完,後面還有......

自動校正 (4):校正進行中

(1) 依中心計算球的顯示位置

(2) 更新位置,畫出球

......接續前頁

自動校正 (5):校正完畢

(1) 發送藍牙訊號『z』

重設畫面、顯示訊息、按鍵狀態

(2) 計時器 (校正) 停止

(3) 更新四邊範圍值

校正持續進行
最後得到這四個值

檢測程序

檢測程序 (1):說明

  • 按鈕後,起始參數準備
  • 啟動計時器
  • 在各計時器中
    • 送出藍牙命令『a』
    • 取得藍牙傳入的資料 (ax, ay)
    • 計算對應的位置
    • 計算落在哪一區、持續多久、分數
    • 資料顯示在畫面上;球的軌跡
  • 時間到或按下結束時
    • 結束計時器
    • 送出藍牙命令『z』

 

檢測程序 (2):說明

  • 有兩個按鈕會進行檢測的開始與結束
  • 因為有多種檢測方式 (不同時間),故指定為三個函式
    • 檢測程序開始 (之前的準備)
    • 檢測程序進行
    • 檢測程序停止

檢測程序 (3):說明

  • 有兩個按鈕會進行檢測的開始與結束
  • 因為有多種檢測方式 (不同時間),故指定為三個函式
    • 檢測程序開始 (之前的準備)
    • 檢測程序進行
    • 檢測程序停止

檢測程序 (4):說明

  • 不同時間的檢測,只需要先定義好參數,其餘程式相同
    • limit_secs:指定的時間 (毫秒數)
    • limit_text:顯示在畫面上的文字

檢測程序 (5):說明

這個之前講過了

定時計時器在檢測持續進行之間,檢查累計的秒數,如果已達設定的參數,即停止計時器

檢測程序 (6):開始前的準備

(1) 指定各個變數歸零

重設畫面、顯示訊息、按鍵狀態

  • 各旗標 (time) 為當下時間
  • 全部時間
  • 停在某一區的時間
  • 停在某一區的累計時間

檢測程序 (7):進行中

(1) 發送藍牙訊號『a』

(2) 取得訊號指令 (a)

(3) 取得訊號資料 (ax, ay, az)

(4) 依中心計算球的位置

(5) 計算各區時間、計算分數

(6) 顯示球、顯示資訊

檢測程序 (8):檢測停止

(1) 發送藍牙訊號『z』

(2) 設定各計時器停止

重設畫面、顯示訊息、按鍵狀態

一些檢測的公用函式

檢測的函式 (1):計算時間

(1) 設定檢查的範圍值

  • 如果在此區域,記錄已持續的秒數
  • 否則,計算並累加之前停在此區的秒數

未完,後面還有…

檢測的函式 (2):計算時間

區域共有三區要計算,程式均相同

…接續前頁

另有總計的時間要計算

取得停在各區的最大值

檢測的函式 (3):計算分數

隨時依照停留在各區的時間,計算分數

各區分數

各區停留時間

檢測的函式 (4):顯示資訊

  • 各區數值均四捨五入
  • 分數和秒數均取一位小數 (且 .0 也要顯示)

其他公用函式

公用函式 (1):座標計算

  • 傳入 (ax, ay) - 藍牙傳入平衡點的中心
  • 計算 (bx, by) - 在板面上顯示球的座標

公用函式 (2):畫出板面背景

(1) 畫出垂直線

(2) 畫出水平線

(3) 畫出四個圓

公用函式 (3):畫出球及軌跡

  • 在 (bx, by) 畫出圓
  • 注意球的位置在球中心的左上方

(1) 畫出板面背景

(2) 畫出軌跡點

(3) 移動球到位置

公用函式 (4):畫面重設

板面清空,球移到中央

公用函式 (5):按鈕狀況

設定各按鈕是否 Enable

公用函式 (6):有傳回值的函式

是否落在某範圍

傳回兩點的距離

map() 函式

............

Made with Slides.com