步驟1:製作
這是什麼?
將您的micro:bit變成一個獨立的data logger,該記錄器記錄最高和最低溫度讀數,並儲存它們,以便保持數據,即使電池沒電了或您斷開了電源。
這是 Python程式,但是您無需了解任何有關Python的知識即可使用它。
您將學到什麼
- 如何使用Python讀取數據並將數據寫入non-volatile storage,即使關閉電源,該儲存器仍位於micro:bit上
- 如何處理錯誤在Python程式中
- 如何將數字變數轉換為字串並再次返回
你需要的東西
- 一個micro:bit
- 選配式電池組
如何使用它
- 下載.hex程式文件,並將其刷新到您的micro:bit 。
- 如果您有電池組,請裝上電池並將micro:bit放在溫度會變化的地方。 您可以將其放在外面或放在冰箱中放置幾分鐘,然後進行測試。
- 搖動以顯示當前溫度。
- 按下按鈕A以顯示最低記錄溫度。
- 按下按鈕B以顯示最高記錄溫度。
- 用手指同時按GND和引腳2,將最高和最低溫度重設為當前溫度。
步驟2:編碼
1from microbit import *
2
3# function to read data file:
4def get_nv_data(name):
5 try:
6 with open(name) as f:
7 v = int(f.read())
8 except OSError:
9 v = temperature()
10 try:
11 with open(name, 'w') as f:
12 f.write(str(v))
13 except OSError:
14 display.scroll('Cannot create file %s' % name)
15
16 except ValueError:
17 display.scroll('invalid data in file %s' % name)
18 v = temperature()
19
20 return v
21
22# function to write data file:
23def set_nv_data(name, value):
24 try:
25 with open(name, 'w') as f:
26 f.write(str(value))
27 except OSError:
28 display.scroll('Cannot write to file %s' % name)
29
30min = get_nv_data('min.txt')
31max = get_nv_data('max.txt')
32
33while True:
34 currentTemp = temperature()
35 if currentTemp < min:
36 min = currentTemp
37 set_nv_data('min.txt', min)
38 if currentTemp > max:
39 max = currentTemp
40 set_nv_data('max.txt', max)
41 if accelerometer.was_gesture('shake'):
42 display.scroll(currentTemp)
43 if button_a.was_pressed():
44 display.scroll(get_nv_data('min.txt'))
45 if button_b.was_pressed():
46 display.scroll(get_nv_data('max.txt'))
47 if pin2.is_touched():
48 display.scroll('clearing data')
49 set_nv_data('min.txt', currentTemp)
50 set_nv_data('max.txt', currentTemp)
51
運作方式
即使斷開連接micro:bit的電源,此數據記錄器也會儲存其讀數。 它透過將讀數儲存在非揮發性儲存裝置中來實現這一目的。 這是電腦記憶體,當電源關閉時,它可以保留其內容,就像您的 micro:bit 在您從電腦拔下插頭時,可以保留您在上面燒錄的程式。
它將數據儲存在您的micro:bit上的兩個文本文件中,分別稱為 min.txt
和max.txt
,Python程式可以讀取和更新。
該程式使用三個變來追蹤和比較溫度:
currentTemp
是從micro:bit內建的temperature sensor讀取的當前溫度。max
是最高溫度。 如果目前的溫度高於(>)目前的最大
值,便會指配一個新值。最小值
是最低溫度。 如果目前的溫度低於(<)目前的最小
值,便會指配一個新值。
兩個函數 get_nv_data
和 set_nv_data
,讀取和寫入數值數據到non-volatile文本文件。 這些函數將數字轉換為文字並返回:
intl()
可將文字(也稱為字串)轉換為數字(整數)變數,我們便可將該變數與目前的溫度做比較。str()
將數字變數(如溫度讀數)轉換為文本字串,以便將其保存在文本文件中。
函數使用 try
和except
來獲得讀取或寫入數據文件的錯誤。 如果沒有保存具有最高和最低溫度的文字檔案,例如當您首次運作此程式時,它將把 max
和 min
變數設為目前的溫度。
程式的主要部分在 while True:
loop中運行。 這就像 Makecode 中的永久區塊的功能。
步驟3:進階
- micro:bit 的溫度感測器位於處理器的內部,因此它提供的溫度讀數通常會高於周圍的氣溫。 使用一般的溫度計測量差異,並且透過從
temperature()
讀數中減去差值來計算差值。 - 轉換程式以記錄各種數據,例如加速度計測得的力。
- 添加廣播功能,還可以將數據發送到另一個位置的另一個micro:bit。
This content is published under a Creative Commons Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) licence.