2014年12月25日 星期四

第十章 健康計步器

健康計步器
1.1專題介紹:健康計步器
  對於健康觀念逐漸盛行的世代,運動變成大家常常掛在嘴邊的活動,而步行是最多人選擇及推薦的方式,因為不需要另外花時間,也不太會受到場地限制,任何時候都可以實施。為了讓自己能夠記錄每天所走的步數,而製作出屬於自己的健康計步器,不僅可以節省費用,還可隨時隨地使用,一舉兩得。




1.2 專題重點
※加速度感測器的應用
※透過延遲的判斷調整加速度感測器靈敏度

2. 專題實作:健康計步器

2.1 專題總覽
開始」鈕:開始啟動計步器。
「暫停」鈕:暫停計算步數及時間,同時「暫停」鈕變為「繼續」鈕。
「繼續」鈕:繼續將計步器啟動。
「停止」鈕:停止計步器使用。




停止計步器後,系統會將今日行走步數統計在下方。






  
「結束程式」鈕及行動裝置上的「返回」鍵:彈出確認結束應用程式對話方塊。
「確定結束」鈕:關閉程式。
「取消」鈕:回到主頁面。





2.2 專題建置
1.新增「專題名稱:pedometer」的專案
進入App InventorDesigner視窗。
(註:專案名稱開頭不能是數字;專案名稱中可用底線,但是不能使用空格或其他特殊字元)

在視窗右側的屬性(Properties)中,將對齊方式(AlignHorizontal)選取置中(Center),這是為了讓所有的物件會以中心線排列。

Screen1屬性修改:AlignHorizontalcenter

2.3介面配置
本專題只有一個主頁面,頁面的元件都放在一個VerticalArrangement元件內。

主頁面
主頁面的所有元件都位於VerArrPageHome元件裡面。


1.      增加元件主頁面,並修改其屬性
點選視窗左側的元件面板(Palette)裡面的頁面布局(Layout),選擇垂直排列(VerticalArrangement)元件,按住滑鼠不放將其拖曳至中間的頁面預覽(Viewer)視窗中。接著點選元件庫(Components)下方的重新命名(Rename),將其名字改為VerArrPageHome。在視窗右側的屬性(Properties)中,將水平對齊方式(AlignHorizontal)及垂直對齊方式(AlignVertical)屬性設定為center,寬度(Width)屬性設定為 Fill parent

新增頁面:Palette/ Layout/ VerticalArrangement
重新命名:更改成VerArrPageHome
修改屬性:Properties/ AlignHorizontalCenter
AlignVerticalCenter
WidthFill parent

2. 增加元件Label1(標題字串),並修改其屬性
在視窗左側的元件面板(Palette)中,點選使用者介面(User Interface)中的文字(Label)元件,將其拖曳至中間的頁面預覽(Viewer)視窗VerArrPageHome裡。在視窗右側的屬性(Properties)中,將文字顏色(BackgroundColor)改成粉紅色(Pink),字體加粗(FontBold)屬性打勾,字體大小(FontSize)屬性改成40,文字(Text)屬性輸入「我的計步器」,寬度(Width)屬性設定為 Fill parent

新增文字:Palette/ User Interface/ Label
修改屬性:Properties/ FontBold:勾選
FontSize40
Text:我的計步器
TextColorPink
WidthFill parent
3. 增加元件Label2(步行時間字串),並修改其屬性
在視窗左側的元件面板(Palette)中,點選使用者介面(User Interface)中的文字(Label)元件,將其拖曳至中間的頁面預覽(Viewer)視窗HorizontalArrangement1裡。在視窗右側的屬性(Properties)中,將字體大小(FontSize)屬性改成24,文字(Text)屬性輸入「步行時間」,對齊方式(TextAlignment)屬性設定為Center,寬度(Width)屬性設定為 Fill parent

新增文字:Palette/ User Interface/ Label
更改屬性:Properties/ FonSize24
Text:步行時間
TextAlignmentCenter
WidthFill parent




4. 增加元件HorizontalArrangement1(水平排列1),並修改其屬性
在視窗左側的元件面板(Palette)中,點選頁面布局(Layout)中的水平排列(HorizontalArrangement)元件,將其拖曳至中間的頁面預覽(Viewer)視窗VerArrPageHomeLabelStep的下方。在視窗右側的屬性(Properties)中,將水平對齊方式(AlignHorizontal)及垂直對齊方式(AlignVertical)屬性設定為center,寬度(Width)屬性設定為 Fill parent

新增框架:Palette/ Layout/ HorizontalArrangement
更改屬性:Properties/ AlignHorizontalCenter
AlignVerticalCenter
WidthFill parent

5. 增加元件Hour(步行時間-小時),並修改其屬性
在視窗左側的元件面板(Palette)中,點選使用者介面(User Interface)中的文字(Label)元件,將其拖曳至中間的頁面預覽(Viewer)視窗HorizontalArrangement1Label2的右方。在視窗右側的屬性(Properties)中,將字體加粗(FontBold)屬性打勾,字體大小(FontSize)屬性改成18,文字(Text)屬性輸入「0」,對齊方式(TextAlignment)屬性設定為left,字體顏色(TextColor)屬性設定為Orange,寬度(Width)屬性設定為 Fill parent

新增文字:Palette/ User Interface/ Label
更改屬性:Properties/ FontBold:勾選
FontSize18
Text0
TextAlignmentleft
TextColorOrange
WidthFill parent


6. 增加元件LabelHour(「時」字串),並修改其屬性
在視窗左側的元件面板(Palette)中,點選使用者介面(User Interface)中的文字(Label)元件,將其拖曳至中間的頁面預覽(Viewer)視窗HorizontalArrangement1Label2的右方。在視窗右側的屬性(Properties)中,將字體加粗(FontBold)屬性打勾,字體大小(FontSize)屬性改成18,文字(Text)屬性輸入「時」,對齊方式(TextAlignment)屬性設定為left,字體顏色(TextColor)屬性設定為Orange,寬度(Width)屬性設定為 Fill parent

新增文字:Palette/ User Interface/ Label
更改屬性:Properties/ FontBold:勾選
FontSize18
Text:時
TextAlignmentleft
TextColorOrange
 WidthFill parent

7. 增加元件Min(步行時間-分鐘),並修改其屬性
在視窗左側的元件面板(Palette)中,點選使用者介面(User Interface)中的文字(Label)元件,將其拖曳至中間的頁面預覽(Viewer)視窗HorizontalArrangement1Label2的右方。在視窗右側的屬性(Properties)中,將字體加粗(FontBold)屬性打勾,字體大小(FontSize)屬性改成18,文字(Text)屬性輸入「0」,對齊方式(TextAlignment)屬性設定為left,字體顏色(TextColor)屬性設定為Orange,寬度(Width)屬性設定為 Fill parent


新增文字:Palette/ User Interface/ Label
更改屬性:Properties/ FontBold:勾選
FontSize18
 Text0
 TextAlignmentleft
 TextColorOrange
 WidthFill parent

8. 增加元件LabelMinute(「分」字串),並修改其屬性
在視窗左側的元件面板(Palette)中,點選使用者介面(User Interface)中的文字(Label)元件,將其拖曳至中間的頁面預覽(Viewer)視窗HorizontalArrangement1Label2的右方。在視窗右側的屬性(Properties)中,將字體加粗(FontBold)屬性打勾,字體大小(FontSize)屬性改成18,文字(Text)屬性輸入「分」,對齊方式(TextAlignment)屬性設定為left,字體顏色(TextColor)屬性設定為Orange,寬度(Width)屬性設定為 Fill parent

新增文字:Palette/ User Interface/ Label
更改屬性:Properties/ FontBold:勾選
FontSize18
Text:分
TextAlignmentleft
TextColorOrange
WidthFill parent

9. 增加元件Sec(步行時間-秒),並修改其屬性
在視窗左側的元件面板(Palette)中,點選使用者介面(User Interface)中的文字(Label)元件,將其拖曳至中間的頁面預覽(Viewer)視窗HorizontalArrangement1Label2的右方。在視窗右側的屬性(Properties)中,將字體加粗(FontBold)屬性打勾,字體大小(FontSize)屬性改成18,文字(Text)屬性輸入「0」,對齊方式(TextAlignment)屬性設定為left,字體顏色(TextColor)屬性設定為Orange,寬度(Width)屬性設定為 Fill parent

新增文字:Palette/ User Interface/ Label
更改屬性:Properties/ FontBold:勾選
 FontSize18
 Text0
 TextAlignmentleft
 TextColorOrange
 WidthFill parent

10. 增加元件LabelSec(「秒」字串),並修改其屬性
在視窗左側的元件面板(Palette)中,點選使用者介面(User Interface)中的文字(Label)元件,將其拖曳至中間的頁面預覽(Viewer)視窗HorizontalArrangement1Label2的右方。在視窗右側的屬性(Properties)中,將字體加粗(FontBold)屬性打勾,字體大小(FontSize)屬性改成18,文字(Text)屬性輸入「秒」,對齊方式(TextAlignment)屬性設定為left,字體顏色(TextColor)屬性設定為Orange,寬度(Width)屬性設定為 Fill parent

新增文字:Palette/ User Interface/ Label
更改屬性:Properties/ FontBold:勾選
FontSize18
Text:秒
TextAlignmentleft
TextColorOrange
WidthFill parent




11. 增加元件LabelStep(行走步數),並修改其屬性
在視窗左側的元件面板(Palette)中,點選使用者介面(User Interface)中的文字(Label)元件,將其拖曳至中間的頁面預覽(Viewer)視窗HorizontalArrangement1的下方。接著點選元件庫(Components)下方的重新命名(Rename),將其名字改為LabelStep。在視窗右側的屬性(Properties)中,將字體加粗(FontBold)屬性打勾,字體大小(FontSize)屬性改成70,文字(Text)屬性輸入「0」,對齊方式(TextAlignment)屬性設定為center,寬度(Width)屬性設定為 Fill parent

新增文字:Palette/ User Interface/ Label
重新命名:更改成LabelStep
更改屬性:Properties/ FontBold:勾選
FontSize70
 Text0
TextAlignmentCenter
TextColorBlue
 WidthFill parent



12.增加元件HorizontalArrangement2(水平排列2),並修改其屬性
在視窗左側的元件面板(Palette)中,點選頁面布局(Layout)中的水平排列(HorizontalArrangement)元件,將其拖曳至中間的頁面預覽(Viewer)視窗VerArrPageHomeHorizontalArrangement1的下方。在視窗右側的屬性(Properties)中,將水平對齊方式(AlignHorizontal)及垂直對齊方式(AlignVertical)屬性設定為center,寬度(Width)屬性設定為 Fill parent

新增框架:Palette/ Layout/ HorizontalArrangement
更改屬性:Properties/ AlignHorizontalCenter
AlignVerticalCenter
 WidthFill parent

13. 增加元件ButtonStart(開始按鈕) ,並修改其屬性
在視窗左側的元件面板(Palette)中,點選使用者介面(User Interface)中的按鈕(Button)元件,將其拖曳至中間的頁面預覽(Viewer)視窗HorizontalArrangement2裡。接著點選元件庫(Components)下方的重新命名(Rename),將其名字改為ButtonStart。在視窗右側的屬性(Properties)中,將字體加粗(FontBold)屬性打勾,字體大小(FontSize)屬性改成20,文字(Text)屬性輸入「開始」,對齊方式(TextAlignment)屬性設定為center,寬度(Width)屬性設定為 Fill parent

新增按鈕:Palette/ User Interface/ Button
重新命名:更改成ButtonStart
更改屬性:Properties/ FontBold:勾選
 FontSize20
 Text:開始
 TextAlignmentCenter
 WidthFill parent

14. 增加元件ButtonPause(暫停按鈕) ,並修改其屬性
在視窗左側的元件面板(Palette)中,點選使用者介面(User Interface)中的按鈕(Button)元件,將其拖曳至中間的頁面預覽(Viewer)視窗HorizontalArrangement2ButtonStart的右方。接著點選元件庫(Components)下方的重新命名(Rename),將其名字改為ButtonPause。在視窗右側的屬性(Properties)中,將字體加粗(FontBold)屬性打勾,字體大小(FontSize)屬性改成20,文字(Text)屬性輸入「開始」,對齊方式(TextAlignment)屬性設定為center,寬度(Width)屬性設定為 Fill parent

新增按鈕:Palette/ User Interface/ Button
重新命名:更改成ButtonPause
更改屬性:Properties/ FontBold:勾選
FontSize20
Text:開始
TextAlignmentCenter
WidthFill parent

15. 增加元件ButtonEnd(停止按鈕) ,並修改其屬性
在視窗左側的元件面板(Palette)中,點選使用者介面(User Interface)中的按鈕(Button)元件,將其拖曳至中間的頁面預覽(Viewer)視窗HorizontalArrangement2ButtonPause的右方。接著點選元件庫(Components)下方的重新命名(Rename),將其名字改為ButtonEnd。在視窗右側的屬性(Properties)中,將字體加粗(FontBold)屬性打勾,字體大小(FontSize)屬性改成20,文字(Text)屬性輸入「停止」,對齊方式(TextAlignment)屬性設定為center,寬度(Width)屬性設定為 Fill parent

新增按鈕:Palette/ User Interface/ Button
重新命名:更改成ButtonEnd
更改屬性:Properties/ FontBold:勾選
 FontSize20
 Text:停止
 TextAlignmentCenter
 WidthFill parent
16. 增加元件HorizontalArrangement3(水平排列3),並修改其屬性
在視窗左側的元件面板(Palette)中,點選頁面布局(Layout)中的水平排列(HorizontalArrangement)元件,將其拖曳至中間頁面預覽(Viewer)視窗VerArrPageHomeHorizontalArrangement2的下方。在視窗右側的屬性(Properties)中,將水平對齊(AlignHorizontal)及垂直對齊(AlignVertical)設定為center,寬度(Width)設定為 Fill parent
     
新增框架:Palette/ Layout/ HorizontalArrangement
更改屬性:Properties/ AlignHorizontalCenter
 AlignVerticalCenter
 WidthFill parent

17. 增加元件Label3(累積步數字串),並修改其屬性
在視窗左側的元件面板(Palette)中,點選使用者介面(User Interface)中的文字(Label)元件,將其拖曳至中間的頁面預覽(Viewer)視窗HorizontalArrangement2下面。在視窗右側的屬性(Properties)中,將字體大小(FontSize)屬性改成24,文字(Text)屬性輸入「累積步數」,對齊方式(TextAlignment)屬性設定為Center,寬度(Width)屬性設定為Fill parent。 
       
新增文字:Palette/ User Interface/ Label
更改屬性:Properties/ FontBold:勾選
FontSize24
Text:累積步數
TextAlignmentCenter
WidthFill parent

18. 增加元件LabelToday(步數),並修改其屬性
在視窗左側的元件面板(Palette)中,點選使用者介面(User Interface)中的文字(Label)元件,將其拖曳至中間的頁面預覽(Viewer)視窗HorizontalArrangement3裡。在視窗右側的屬性(Properties)中,將字體加粗(FontBold)屬性打勾,字體大小(FontSize)屬性改成20,文字(Text)屬性輸入「0」,對齊方式(TextAlignment)屬性設定為Center,字體顏色(TextColor)屬性設定為Blue,寬度(Width)屬性設定為Fill parent
         


新增文字:Palette/ User Interface/ Label
更改屬性:Properties/ FontBold:勾選
FontSize20
 Text0
TextAlignmentCenter
TextColorBlue
 WidthFill parent




19. 增加元件HorizontalArrangement4(主頁面之水平排列4),並修改其屬性
在視窗左側的元件面板(Palette)中,點選頁面布局(Layout)中的水平排列(HorizontalArrangement)元件,將其拖曳至中間的頁面預覽(Viewer)視窗VerArrPageHomeHorizontalArrangemen3的下方。在視窗右側的屬性(Properties)中,將水平對齊方式(AlignHorizontal)及垂直對齊方式(AlignVertical)屬性設定為center,寬度(Width)屬性設定為Fill parent
              
新增框架:Palette/ Layout/ HorizontalArrangement
更改屬性:Properties/ AlignHorizontalCenter
AlignVerticalCenter
WidthFill parent

20. 增加元件ButtonProgEnd (主頁面之結束程式按鈕) ,並修改其屬性
在視窗左側的元件面板(Palette)中,點選使用者介面(User Interface)中的按鈕(Button)元件,將其拖曳至中間的頁面預覽(Viewer)視窗HorizontalArrangement4裡。接著點選元件庫(Components)下方的重新命名(Rename),將其名字改為ButtonProgEnd。在視窗右側的屬性(Properties)中,將字體加粗(FontBold)屬性打勾,字體大小(FontSize)屬性改成18,文字(Text)屬性輸入「離開計步器」,對齊方式(TextAlignment)屬性設定為center,寬度(Width)屬性設定為 Fill parent


新增按鈕:Palette/ User Interface/ Button
重新命名:更改成ButtonProgEnd
更改屬性:Properties/ FontBold:勾選
 FontSize18
 Text:離開計步器
 TextAlignmentCenter
 WidthFill parent

Non-visible components元件



21. 增加元件Clock1(取得系統日期及計時),並修改其屬性
在視窗左側的元件面板(Palette)中,點選Sensors中的時鐘(Clock)元件,將其拖曳至中間的畫面預覽(Viewer)視窗中。在視窗右側的屬性(Properties)中,將TimerEnabled屬性取消勾選。

新增Clock1 Palette/ Sensor/ Clock
更改屬性:Properties/ TimerEnabled:取消勾選

22. 增加元件AccelerometerSensor1(取得震動情況),並修改其屬性
在視窗左側的元件面板(Palette)中,點選Sensors中的加速度感測器(AccelerometerSensor)元件,將其拖曳至中間的畫面預覽(Viewer)視窗中。在視窗右側的屬性(Properties)中,將Enabled屬性取消勾選。

取得震動:Palette/ Sensors/ AccelerometerSensor
更改屬性:Properties/ Enabled:取消勾選

23. 增加元件Notifier1(彈出對話方塊)
在視窗左側的元件面板(Palette)中,點選使用者介面(User Interface)中的對話方塊(Notifier)元件,將其拖曳至中間的畫面預覽(Viewer)視窗中。

新增提示:Palette/ User Interface/ Notifier


使用元件及其重要屬性
名稱
屬性(可自行調整)
說明
VerArrPageHome
AlignHorizontalCenter
AlignVerticalCenter
WidthFill parent

Label1
FontBold:勾選
FontSize40
Text:我的計步器
TextColorPink
WidthFill parent
文字:我的計步器
LabelStep
FontBold:勾選
FontSize70
Text0
TextColorRed
WidthFill parent
文字:顯示步行數
HorizontalArrangement1
AlignHorizontalCenter
AlignVerticalCenter
WidthFill parent

Label2
FontSize24
Text:步行時間
TextAlignmentCenter
WidthFill parent
文字:步行時間字串
Hour
FontBold:勾選
FontSize18
Text0
TextColorOrange
WidthFill parent
文字:步行時間-小時
LabelHour
FontBold:勾選
FontSize18
Text:時
TextAlignmentleft
TextColorOrange
WidthFill parent
文字:時
Min
FontBold:勾選
FontSize18
Text0
TextAlignmentleft
TextColorOrange
WidthFill parent
文字:步行時間-分鐘
LabelMinute
FontBold:勾選
FontSize18
Text:分
TextAlignmentleft
TextColorOrange
WidthFill parent
文字:分
Sec
FontBold:勾選
FontSize18
Text0    TextAlignmentleft
TextColorOrange    WidthFill parent
文字:步行時間-秒
LabelSecond
FontBold:勾選
FontSize18
Text:秒
TextAlignmentleft
TextColorOrange
WidthFill parent
文字:秒
HorizontalArrangement2
AlignHorizontalCenter
AlignVerticalCenter
WidthFill parent

ButtonStart
FontBold:勾選
FontSize20
Text:開始
WidthFill parent
按鈕:開始計步
ButtonPause
FontBold:勾選
FontSize20
Text:暫停
WidthFill parent
按鈕:暫停計步
ButtonEnd
FontBold:勾選
FontSize20
Text:停止
WidthFill parent
按鈕:結束計步
HorizontalArrangement3
AlignHorizontalCenter
AlignVerticalCenter
WidthFill parent

Label3
FontBold:勾選
FontSize24
Text:累積步數
TextAlignment Center
WidthFill parent
文字:累積步數字串
LabelToday
FontBold:勾選
FontSize18
Text0
TextAlignmentLeft
TextColorBlue
WidthFill parent
文字:顯示步數
HorizontalArrangement5
AlignHorizontalCenter
AlignVerticalCenter
WidthFill parent

ButtonProgEnd
FontBold:勾選
FontSize18
Text:離開計步器
WidthFill parent
按鈕:結束應用程式
Clock1
TimerEnabled:取消勾選
取得系統時間及計時
Accelerometer-Sensor1
Enabled:取消勾選
取得震動情況
Notifier1
彈出對話方塊


2.3拼塊說明
24.定義全域變數

在左側的Blocks中,點選Built-in裡的Variables,在彈出的拼圖式程式區塊中選取initialize global name to置於預覽視窗中,拉好後按Ctrl+C進行複製,再按Ctrl+V複製成13個拼塊。

建立全域變數:Blocks/ Built-in/ Variables / initialize global name to
前面三個分別將name的部分更改為XYZ,在左側的Blocks中點選Built-in裡的Math,在彈出的拼圖式程式區塊中選取0,並且放在initialize global X toinitialize global Y toinitialize global Z to的右邊。分別記錄加速度感測器XYZ的參數值。

參數值:將name更改為X和Y和Z
    Blocks/ Built-in/ 0

再來兩個分別將name的部分更改為timeStarttimeEnd,在左側的Blocks中點選Built-in裡的Math,在彈出的拼圖式程式區塊中選取0,並且放在initialize global timeStart toinitialize global timeEnd to的右邊。分別紀錄加速度感測器開始及結束計時數值。

計時數值:將name更改為timeStarttimeEnd
     Blocks/ Built-in/ 0

選取一個name的部分更改為timeInteval,在左側的Blocks中點選Built-in裡的Math,在彈出的拼圖式程式區塊中選取0,並且放在initialize global timeIntevalto的右邊,接著將0更改為300,用來設定延遲加速度感測器判斷的時間間隔。意思是每300毫秒(0.3)時才讓加速度感測器做一次是否有走動的判斷。

延遲時間間隔:將name更改為timeInteval
       Blocks/ Built-in/ 0
       將0改為300



之後四個分別將name的部分更改為sensorsensorvarsensorstepsensorLevel,在左側的Blocks中點選Built-in裡的Math,在彈出的拼圖式程式區塊中選取0,並且放在initialize global sensor toinitialize global sensorvar toinitialize global sensorstep toinitialize global sensorLevelto的右邊,接著分別將0改為11.50.15。分別為儲存靈敏度比對值(0.5~1.4)、計算靈敏度的常數、兩相鄰靈敏度的數值差、儲存靈敏度等級。
(註:sensor sensorvar sensorstep ×sensorLevel)

設定零敏度:將name更改為sensorsensorvarsensorstepsensorLevel
      Blocks/ Built-in/ 0
      將0改為1和1.5和0.15

選取一個name的部分更改為start,在左側的Blocks中點選Built-in裡的Logic,在彈出的拼圖式程式區塊中選取flase,並且放在initialize global startto的右邊。用來設定表示計步器一開始是關閉的。

關閉計步器:將name更改為start
      Blocks/ Built-in/ Logic/ false      

接著兩個分別將 name 的部分更改為stepNowstep,在左側的Blocks中點選 Built-in裡的Math,在彈出的拼圖式程式區塊中選取0,並且放在initialize global step toinitialize global maxRecord to的右邊。分別為儲存行走步數及設定最大紀錄數量。

儲存步行數:將name更改為step
      Blocks/ Built-in/ 0
設定最大紀錄數量:將name更改為Nowstep
         Blocks/ Built-in/ 0

25.自訂程序buttonEnable,設定三個按鈕的作用情況


在左側的Blocks中,點選Built-in裡的Procedures,在彈出的拼圖式程式區塊中選取toprocedure do置於預覽視窗中,接著將procedure更改為buttonset。點選左上角的藍色方框,將左邊的inputx,拖曳至右邊的inputs裡面,總共要拖曳三個inputx過去。接著將三個x依序更改為btStartbtPausebtEnd。建立副程式,將多個指令集合在一起,之後可透過呼叫該程序來使用這些指令,並且新增3個按鈕參數。

自訂程序:Blocks/ Built-in/ Procedures/ to procedure do
     將procedure改成buttonset
     藍色方框/ inputx /btStart
     藍色方框/ inputx /btPause
     藍色方框/ inputx /btEnd

在左側的Blocks中,點選Screen1裡的ButtonStart,在彈出的拼圖式程式區塊中選取set ButtonStart.Enabled to,放在tobuttonset do裡面;在左側的Blocks中,點選Built-in裡的Variables,在彈出的拼圖式程式區塊中選取get,放在set ButtonStart.Enabled to右邊,接著選取為btStart。將set ButtonStart.Enabled toCtrl+C複製,再來按Ctrl+V貼上二次,依序放在set ButtonStart.Enabled to的下面,分別將ButtonStart依序選取為ButtonPauseButtonEnd,再依序將右邊的btStart選取為btPausebtEnd。這主要是將參數名稱設為與按鈕名稱相關,例如將ButtonStart按鈕的參數名稱設為TFbuttonStart

建立按鈕參數:Blocks/ Screen1/ ButtonStart/ set ButtonStart.Enabled to
       Blocks/ Built-in/ Variables/ get
       將 選取btStart
       將 選取btPause
       將 選取btEnd

26.程式開始執行時要執行的步驟

在左側的Blocks中,點選Screen1,在彈出的拼圖式程式區塊中選取when Screen1.Initialize do置於預覽視窗中。這是指當Screen1從初始值開始執行。

執行程式:Blocks/ Screen1/ when Screen1.Initialize do

在左側的Blocks中,點選Screen1裡的AccelerometerSensor1,在彈出的拼圖式程式區塊中選取set AccelerometerSensor1.Enabled to,放在when Screen1.Initialize do裡面。在左側的Blocks中,點選Screen1裡的Clock1,在彈出的拼圖式程式區塊中選取set Clock1.TimerEnabled to,放在set AccelerometerSensor1.Enabled to下面。在左側的Blocks中,點選Built-in裡的Logic,在彈出的拼圖式程式區塊中選取false,放在set AccelerometerSensor1.Enabled to右邊,接著再選取一個false,放在set Clock1.TimerEnabled to右邊。分別為設定關閉加速度感測器與和設定關閉計時器,將一開始的加速度感測器和計時器都設為false

關閉加速度感測器:Blocks/ Screen1/ AccelerometerSensor1/
         set AccelerometerSensor1.Enabled to
         Blocks/ Built-in/ Logic/ false
關閉計時器:Blocks/ Screen1/ Clock1/set Clock1.TimerEnabled to/ false
      Blocks/ Built-in/ Logic/ false

在左側的Blocks中,點選Built-in裡的Variables,在彈出的拼圖式程式區塊中選取set to,放在set Clock1.TimerEnabled to下面,並選取為set globalsensor to;在左側的Blocks中,點選Built-in裡的Math,在彈出的拼圖式程式區塊中選取-,放在set globalsensor to右邊,再來選取×,放在-的右邊;在左側的Blocks中,點選Built-in裡的Variables,在彈出的拼圖式程式區塊中選取get,放在-左邊,並選取為getglobalsensorvar ,接著將get globalsensorvarCtrl+C複製,再按Crtl+V貼上兩遍,分別放在×的左邊及右邊,依序將globalsensorvar選取為globalsensorstepglobalsensorLevel。這是在計算靈敏度的數值,由sensorLevel變數計算靈敏度數值(sensor),計算公式為:sensor 1.5 0.1 ×sensorLevel

計算靈敏度數值:Blocks/ Built-in/ Variables/ set to
        將 選取global sensor
        Blocks/ Built-in/ Math/ -
        Blocks/ Built-in/ Math/ ×
        Blocks/ Built-in/ Variables/ get
        將 選取global sensorvar
        將 選取global sensorstop
        將 選取global sensorLevel

在左側的Blocks中,點選Built-in裡的Procedures,在彈出的拼圖式程式區塊中選取call buttonsetbtStart btPause btEnd,放在set global sensor to下面;在左側的Blocks中,點選Built-in裡的Logic,在彈出的拼圖式程式區塊中選取true,放在btStart右邊,接著btPausebtEnd右邊依序選取為falsefalse。最後這是在設定各按鈕是否有作用,呼叫副程式buttonset設定三個按鈕是否有作用,此處設定「開始」有作用,按鈕為ture;「暫停」及「停止」設定無作用,按鈕為false

設定按鈕作用:Blocks/ Built-in/ Procedures/ call buttonsetbtStart btPause btEnd
       Blocks/ Built-in/ Logic/ true
       Blocks/ Built-in/ Logic/ false
       Blocks/ Built-in/ Logic/ false

43.按下「開始」鈕,開始計算步行數。

在左側的Blocks中,點選Screen1裡的ButtonStart,在彈出的拼圖式程式區塊中選取when ButtonStart.Click do置於預覽視窗中。當使用者按下「開始」鈕就執行以下事情。

按下開始鈕執行:Blocks/ Screen1/ ButtonStart/ when ButtonStart. Click do
在左側的Blocks中,點選Built-in裡的Variables,在彈出的拼圖式程式區塊中選取set to,放在when ButtonStart.Click do裡面,選取為setglobalstep to;在左側的Blocks中,點選Build-in裡的Math,在彈出的拼圖式程式區塊中選取0,放在setglobalstep to右邊。這邊是在設定步行數,設定步行數(step)0

設定步行數:Blocks/ Built-in/ Variables/ set to
      將 選取global step
      Blocks/ Built-in/ Math/ 0

在左側的Blocks中,點選Screen1裡的Hour,在彈出的拼圖式程式區塊中選取set Hour.Text to,放在setglobalstepto下面;在左側的Blocks中,點選Build-in裡的Math,在彈出的拼圖式程式區塊中選取0,放在set Hour.Text to右邊。將set Hour.Text toCrtl+C複製,再按Crtl+V貼上兩次,放在set Hour.Text to下面,並將Hour依序選取為MinSec。這邊是為了將時間顯示在主頁面,預設值都為0

顯示時間:Blocks/ Screen1/ Hour/ set Hour.Text to
     將Hour.選取為Min
     將Hour選取為Sec
     Blocks/ Built-in/ Math/ 0

在左側的Blocks中,點選Screen1裡的LabelStep,在彈出的拼圖式程式區塊中選取set LabelStep.Text to,放在setSecto下面;在左側的Blocks中,點選Built-in裡的Text,在彈出的拼圖式程式區塊中選取" ",放在set LabelStep.Text to右邊,並輸入為"0"。這邊是為了將步行數顯示在主頁面,預設值都為0

顯示步行數:Blocks/ Screen1/ LabelStep / setLabelStep.Text to
      Blocks/ Built-in/ Text / ““
      將”“改成”0”

在左側的Blocks中,點選Screen1裡的Clock1,在彈出的拼圖式程式區塊中選取set Clock1.TimerEnabled to,放在set LabelStep.Text to下面;在左側的Blocks中,點選Built-in裡的Logic,在彈出的拼圖式程式區塊中選取true,放在set Clock1.TimerEnabled to右邊。在左側的Blocks中,點選Screen1裡的AccelerometerSensor1,在彈出的拼圖式程式區塊中選取set AccelerometerSensor1.Enabled to,放在set Clock1.TimerEnabled to下面;在左側的Blocks中,點選Built-in裡的Logic,在彈出的拼圖式程式區塊中選取true,放在set AccelerometerSensor1.Enabled to右邊。這兩個是在啟動計時器及加速度感測器,設定計時器(Clock1)及加速度感測器(AccelerometerSensor1)true來啟動計時器及加速度感測器。

啟動計時器:Blocks/ Screen1/ Clock1/ set Clock1.TimerEnabled to
      Blocks/ Built-in/ Logic/ true
啟動加速度感測器:Blocks/ Screen1/ AccelerometerSensor1/ set AccelerometerSensor1.Enabled to
         Blocks/ Built-in/ Logic/ true

在左側的Blocks中,點選Built-in裡的Procedures,在彈出的拼圖式程式區塊中選取call buttonsetbtStart btPause btEnd,放在set AccelerometerSensor1.Enabled to下面;在左側的Blocks中,點選Built-in裡的Logic,在彈出的拼圖式程式區塊中選取false,放在btStart右邊,接著btPausebtEnd右邊依序選取為truetrue。這邊一樣是在設定各按鈕是否有作用,呼叫副程式buttonset設定三個按鈕是否有作用,此處為設定計步期間只有「暫停」及「停止」鈕有作用,按鈕為ture;其餘按鈕皆無作用,按鈕為false

設定按鈕作用:Blocks/ Built-in/ Procedures/ call buttonsetbtStart btPause btEnd
       Blocks/ Built-in/ Logic/ false
       Blocks/ Built-in/ Logic/ true

44.按下「暫停」鈕,停止計步並同時將按鈕文字變為「繼續」


在左側的Blocks中,點選Screen1裡的ButtonPause,在彈出的拼圖式程式區塊中選取when ButtonPause.Click do置於預覽視窗中。當使用者按下「暫停」鈕就執行以下事情。

按下暫停鈕執行:Blocks/ Screen1/ ButtonPause/ when ButtonPause.Clock do

在左側的Blocks中,點選Built-in裡的Control,在彈出的拼圖式程式區塊中選取if then,放在when ButtonPause.Click do裡面,點選左上角的藍色方框,將左邊的else拖曳至右邊的if裡面;在左側的Blocks中,點選Built-in裡的Math,在彈出的拼圖式程式區塊中選取=,放在if右邊;在左側的Blocks中,點選Screen1裡的ButtonPause,在彈出的拼圖式程式區塊中選取ButtonPause.Text,放在=左邊;在左側的Blocks中,點選Built-in裡的Text,在彈出的拼圖式程式區塊中選取" ",放在=右邊,並輸入為"暫停"。如果按鈕文字為「暫停」就執行then裡面的事情。

判斷按鈕文字:Blocks/ Built-in/ Control/ if then
       藍色方框/ else
       Blocks/ Built-in/ Math/ =
       Blocks/ Screen1/ ButtonPause/ ButtonPause.Text
       Blocks/ Built-in/ Text/ ““
       將““輸入為暫停
在左側的Blocks中,點選Screen1裡的AccelerometerSensor1,在彈出的拼圖式程式區塊中選取set AccelerometerSensor1.Enabled to,放在then右邊;在左側的Blocks中,點選Built-in裡的Logic,在彈出的拼圖式程式區塊中選取false,放在set AccelerometerSensor1.Enabled to右邊;在左側的Blocks中,點選Screen1裡的Clock1,在彈出的拼圖式程式區塊中選取set Clock1.TimerEnabled to,放在set AccelerometerSensor1.Enabled to下面;在左側的Blocks中,點選Built-in裡的Logic,在彈出的拼圖式程式區塊中選取false,放在set Clock1.TimerEnabled to右邊;在左側的Blocks中,點選Screen1裡的ButtonPause,在彈出的拼圖式程式區塊中選取set ButtonPause.Text to,放在set Clock1.TimerEnabled to下面;在左側的Blocks中,點選Built-in裡的Text,在彈出的拼圖式程式區塊中選取" ",放在set ButtonPause.Text to右邊,並輸入為"繼續";在左側的Blocks中,點選Built-in裡的Procedures,在彈出的拼圖式程式區塊中選取call buttonset btStart btPause btEnd,放在set ButtonPause.Text to下面;在左側的Blocks中,點選Built-in裡的Logic,在彈出的拼圖式程式區塊中選取false,放在btStart右邊,接著btPausebtEnd右邊皆選取為true。如果按鈕文字為「暫停」,設定計時器及加速度感測器為false來停止計時器及加速度感測器,同時將按鈕文字改為「繼續」,暫停期間只有「繼續」鈕有作用,按鈕為ture;其餘按鈕皆無作用,按鈕為false

按鈕文字為暫停:Blocks/ Screen1/ AccelerometerSensor1/ set AccelerometerSensor1.Enabled to
        Blocks/ Built-in/ Logic/ false
        Blocks/ Screen1/ Clock1/ set Clock1.TimerEnabled to
        Blocks/ Built-in/ Logic/ false
        Blocks/ Screen1/ ButtonPause/ set ButtonPause.Text to
        Blocks/ Built-in/ Text/ ““
        將”“改成繼續
        Blocks/ Built-in/ Procedures/ call buttonset btStart btPause btEnd
        Blocks/ Built-in/ Logic/ false
        Blocks/ Built-in/ Logic/ true
set AccelerometerSensor1.Enabled to以下整個按Crtl+C複製,再按Crtl+V貼上,放在else右邊,接著將set AccelerometerSensor1.Enabled toset AccelerometerSensor1.Enabled to右邊的false都選取為true;將set ButtonPause.Text to右邊的"繼續",輸入為"暫停";將btEnd右邊的false選取為true。這邊是在說,如果按鈕文字為「繼續」,就設定計時器及加速度感測器為true繼續啟動計時器及加速度感測器,同時將按鈕文字改為「暫停」,設定「暫停」及「停止」鈕有作用,按鈕為ture;其餘按鈕皆無作用,按鈕為false

按鈕文字為繼續:Blocks/ Screen1/ AccelerometerSensor1/ set AccelerometerSensor1.Enabled to
        Blocks/ Built-in/ Logic/ true
        Blocks/ Screen1/ Clock1/ set Clock1.TimerEnabled to
        Blocks/ Built-in/ Logic/ true
        Blocks/ Screen1/ ButtonPause/ set ButtonPause.Text to
        Blocks/ Built-in/ Text/ ““
        將”“改成暫停
        Blocks/ Built-in/ Procedures/ call buttonset btStart btPause btEnd
        Blocks/ Built-in/ Logic/ false
        Blocks/ Built-in/ Logic/ true

45.按下「停止」鈕,將步行數紀錄於資料庫


在左側的Blocks中,點選Screen1裡的ButtonEnd,在彈出的拼圖式程式區塊中選取when ButtonEnd.Click do置於預覽視窗中。當使用者按下「停止」鈕就執行以下事情。

按下停止鈕執行:Blocks/ Screen1/ ButtonEnd/ when ButtonEnd.Click do

在左側的Blocks中,點選Screen1裡的AccelerometerSensor1,在彈出的拼圖式程式區塊中選取set AccelerometerSensor1.Enabled to,放在then右邊;在左側的Blocks中,點選Built-in裡的Logic,在彈出的拼圖式程式區塊中選取false,放在set AccelerometerSensor1.Enabled to右邊;在左側的Blocks中,點選Screen1裡的Clock1,在彈出的拼圖式程式區塊中選取set Clock1.TimerEnabled to,放在set AccelerometerSensor1.Enabled to下面;在左側的Blocks中,點選Built-in裡的Logic,在彈出的拼圖式程式區塊中選取false,放在set Clock1.TimerEnabled to右邊;在左側的Blocks中,點選Built-in裡的Variables,在彈出的拼圖式程式區塊中選取set to,放在set Clock1.TimerEnabled to下面,選取set global startto;在左側的Blocks中,點選Built-in裡的Logic,在彈出的拼圖式程式區塊中選取false,放在set global startto右邊;在左側的Blocks中,點選Screen1裡的ButtonPause,在彈出的拼圖式程式區塊中選取set ButtonPause.Text to,放在set global startto下面;在左側的Blocks中,點選Built-in裡的Text,在彈出的拼圖式程式區塊中選取" ",放在set ButtonPause.Text to右邊,並輸入為"暫停"。這些是為了改變設定,設定計時器及加速度感測器為false來停止計時器及加速度感測器,將啟動旗標(start)設為false,並設定暫停鈕文字為「暫停」。

按下停止鈕改變設定:Blocks/ Screen1/ AccelerometerSensor1/ set AccelerometerSensor1.Enabled to
          Blocks/ Built-in/ Logic/ false
          Blocks/ Screen1/ Clock1/ set Clock1.TimerEnabled to
          Blocks/ Built-in/ Logic/ false
          Blocks/ Built-in/ Variables/ set to
          將”“選取”global start”
          Blocks/ Screen1/ ButtonPause/ set ButtonPause.Text to
          Blocks/ Built-in/ Text/ ““
          將”“改成暫停

在左側的Blocks中,點選Built-in裡的Procedures,在彈出的拼圖式程式區塊中選取call buttonsetbtStart btPause btEnd,放在set ButtonPause.Text to下面;在左側的Blocks中,點選Built-in裡的Logic,在彈出的拼圖式程式區塊中選取true,放在btStart右邊,接著btPausebtEnd右邊依序選取為falsefalse。設定「開始」、「查看歷史資料」及「靈敏度設定」按鈕有作用,按鈕為ture;「暫停」及「停止」按鈕無作用;按鈕為false

設定按鈕作用:Blocks/ Built-in/ Procedures/ call buttonsetbtStart btPause btEnd
       Blocks/ Built-in/ Logic/ true
       Blocks/ Built-in/ Logic/ false

在左側的Blocks中,點選Screen1裡的LabelToday,在彈出的拼圖式程式區塊中選取set LabelToday.Text to,放在call buttonset btStart btPause btEnd的下面;在左側的Blocks中,點選Built-in裡的Math,在彈出的拼圖式程式區塊中選取+,放在set LabelToday.Text to的右邊;在左側的Blocks中,點選Built-in裡的Variables,在彈出的拼圖式程式區塊中選取get,放在+的左邊,並選取為get global Nowstep;在左側的Blocks中,點選Screen1裡的LabelStep,在彈出的拼圖式程式區塊中選取LabelStep.Text,放在+的右邊。在左側的Blocks中,點選Built-in裡的Control,在彈出的拼圖式程式區塊中選取if then,放在set LabelToday.Text to的下面;在左側的Blocks中,點選Built-in裡的Math,在彈出的拼圖式程式區塊中選取>,放在if的右邊;在左側的Blocks中,點選Screen1裡的LabelStep,在彈出的拼圖式程式區塊中選取LabelStep.Text,放在>的左邊;在左側的Blocks中,點選Built-in裡的Math,在彈出的拼圖式程式區塊中選取0,放在>的右邊;在左側的Blocks中,點選Built-in裡的Variables,在彈出的拼圖式程式區塊中選取set to,放在then的右邊,並選取為set global Nowstep to;在左側的Blocks中,點選Built-in裡的Variables,在彈出的拼圖式程式區塊中選取get,放在+的左邊,並選取為get global Nowstep;在左側的Blocks中,點選Screen1裡的LabelStep,在彈出的拼圖式程式區塊中選取LabelStep.Text,放在+的右邊。在左側的Blocks中,點選Screen1裡的LabelStep,在彈出的拼圖式程式區塊中選取set LabelStep.Text to,放在set global Nowstep to的下面;在左側的Blocks中,點選Built-in裡的Math,在彈出的拼圖式程式區塊中選取0,放在set LabelStep.Text to的右邊。這是在累計步行數,今日沒有行走步數就直接紀錄,今日有行走步數則加上之前的累積成今日步數。

累積步行數:Blocks/ Screen1/ LabelToday/ set LabelToday.Text to
      Blocks/Built-in/ Math/ +
      Blocks/Built-in/ Variables/ get
      將 選取為global Nowstep
      Blocks/ Screen1/ LabelStep/ LabelStep.Text
      Blocks/Built-in/ Control/ if then
      Blocks/Built-in/ Math/ >
      Blocks/Screen1/ LabelStep/ LabelStep.Text
      Blocks/Built-in/ Math/ 0
      Blocks/Built-in/ Variables/ set to
      將 選取為global Nowstep

46.計算步行時間,每一秒會觸發一次Clock1.Timer事件。


在左側的Blocks中,點選Screen1裡的Clock1,在彈出的拼圖式程式區塊中選取when Clock1.Timer do;在左側的Blocks中,點選Screen1裡的Sec,在彈出的拼圖式程式區塊中選取set Sec.Text to,放在when Clock1.Timer do的裡面;在左側的Blocks中,點選Built-in中的Math,在彈出的拼圖式程式區塊中選取+,放在set Sec.Text to的右邊;在左側的Blocks中,點選Screen1裡的Sec,在彈出的拼圖式程式區塊中選取Sec.Text,放在+的左邊;在左側的Blocks中,點選Built-in中的Math,在彈出的拼圖式程式區塊中選取0,放在+的右邊,並將0改成1;在左側的Blocks中,點選Built-in中的Control,在彈出的拼圖式程式區塊中選取if then,放在set Sec.Text to的下面。在左側的Blocks中,點選Built-in中的Logic,在彈出的拼圖式程式區塊中選取=,放在if的右邊;在左側的Blocks中,點選Screen1裡的Sec,在彈出的拼圖式程式區塊中選取Sec.Text,放在=的左邊。在左側的Blocks中,點選Built-in中的Math,在彈出的拼圖式程式區塊中選取0,放在=的右邊,並將0改成60;在左側的Blocks中,點選Screen1裡的Sec,在彈出的拼圖式程式區塊中選取set Sec.Text to,放在then的右邊;在左側的Blocks中,點選Built-in中的Math,在彈出的拼圖式程式區塊中選取0,放在set Sec.Text to的後面;在左側的Blocks中,點選Screen1裡的Min,在彈出的拼圖式程式區塊中選取set Min.Text to,放在set Sec.Text to的下面;在左側的Blocks中,點選Built-in中的Math,在彈出的拼圖式程式區塊中選取+,放在set Min.Text to的右邊;在左側的Blocks中,點選Screen1裡的Min,在彈出的拼圖式程式區塊中選取Min.Text,放在+的左邊;在左側的Blocks中,點選Built-in中的Math,在彈出的拼圖式程式區塊中選取0,放在+的右邊,並將0改成1;接著將if thenCtrl+C進行複製,按Ctrl+V進行貼上,放置在set Min.Text to的下面,將Sec.Text選取為Min.Text。這邊是在計時,秒數超過60秒則進位變成分鐘,分鐘超過60分則進位變成小時。

計時:Blocks/ Screen1/ Clock1/ when Clock1.Timer do
   Blocks/ Screen1/ Sec/ set Sec.Text to
   Blocks/ Built-in/ Math/ +
   Blocks/ Screen1/ Sec/ Sec.Text
   Blocks/ Built-in/ Math/ 0
   將0更改為1
   Blocks/ Built-in/ Control/ if then
   Blocks/ Built-in/ Logic/ =
   Blocks/ Screen1/ Sec/ Sec.Text

50.按下「結束程式」鈕及行動裝置上的「返回」鍵,顯示對話方塊詢問是否確定結束本程式。

在左側的Blocks中,點選Screen1裡的ButtonProgEnd,在彈出的拼圖式程式區塊中選取when ButtonProgEnd.Click do;在左側的Blocks中,點選Screen1裡的Notifier1,在彈出的拼圖式程式區塊中選取callNotifier1.ShowChooseDialog message title button1Text buttonText2 cancelable,放在when ButtonProgEnd.Click do裡面;在左側的Blocks中,點選Built-in裡的Text,在彈出的拼圖式程式區塊中選取””,放在messagetitlebutton1TextbuttonText2的後面,並依序輸入文字確定要結束我的計步器嗎?”結束確定取消;在左側的Blocks中,點選Built-in裡的Logic,在彈出的拼圖式程式區塊中選取false,放在cancelable的後面。跳出對話方塊,顯示對話方塊詢問使用者是否確定要結束程式。

跳出對話方塊:Blocks/ Screen1/ ButtonProgEnd/ when ButtonProgEnd.Click do
       Blocks/ Screen1/ Notifier1/ call Notifier1.ShowChooseDialog message
       title button1Text buttonText2 cancelable
       Blocks/ Screen1/Text/ “ ”
       將”“輸入為確定要結束我的計步器嗎?”結束確定取消
       Blocks/ Screen1/Logic/ false

53.按下對話方塊的「確定結束」鈕

在左側的Blocks中,點選Screen1裡的Notifier1,在彈出的拼圖式程式區塊中選取when Notifier1.AfterChoosing choicedo;在左側的Blocks中,點選Built-in裡的Control,在彈出的拼圖式程式區塊中選取if then,放置在when Notifier1.AfterChoosing choicedo裡面;在左側的Blocks中,點選Built-in裡的Math,在彈出的拼圖式程式區塊中選取=,放置在if的右邊;在左側的Blocks中,點選Built-in裡的Variables,在彈出的拼圖式程式區塊中選取get,放置在=的左邊,並選取為get choice;在左側的Blocks中,點選Built-in裡的Text,在彈出的拼圖式程式區塊中選取””,放置在=的右邊,並選取為確定;在左側的Blocks中,點選Built-in裡的Control,在彈出的拼圖式程式區塊中選取close application,放置在then裡面。確認是否結束,如果按鈕與確定字串相同,則關閉應用程式。

確認結束:Blocks/ Screen1/ Notifier1/ when Notifier1.AfterChoosing choicedo
     Blocks/ Built-in/ Control/ if then
     Blocks/ Built-in/ Math/ =
     Blocks/ Built-in/ Variables/ get
     將 選取為choice
     Blocks/ Built-in/ Text/ “ ”
     將” “選取為確定
     Blocks/ Built-in/ Control/ close application

54.使用加速度感測計來偵測使用者的震動,降低感測器的靈敏度,使用三軸數值的差,三個方向的數值改變都要偵測




當加速度感測器的加速度改變,當加速度感測器偵測到xyz軸的加速度改變就執行。

紀錄目前系統時間,將目前系統時間設定為timeEnd變數值。

確定時間間隔,如果時間間隔大於timeInterval變數值(預設為300,即0.3秒),就執行4.~6.,也就是每隔0.3秒才檢查是否震動一次。

檢查啟動狀態,如果不是啟動狀態就設定為啟動狀態(starttrue)。否則,如果XYZ任一軸的變化量大於靈敏度(sensor)就將步行數增加1,並顯示更新的步行數。

重新開始計時,將目前系統時間設定為timestart變數值,表示重新開始計時。

下一次震動比較的初始值,將目前感測器三個軸的數值設定於sxsysz,做為下一次震動比較的初始值。


完整程式圖:










3.未來展望

大家開始步行的目的之一就是為了身體好,當然現在有些計步器也有消耗熱量的功能,因此如果能在計步器中加入計算消耗熱量的功能,對使用者會有幫助。而消耗熱量與使用者的走一步的距離及體重有關,必須先記錄使用者的步幅及體重。

3 則留言:

  1. 請問為何會冒出 global sx、global sy、global sz?

    回覆刪除
  2. 好詳盡的教學,同時也兼顧了邏輯的思考。真棒

    回覆刪除