Krok 1: Wykonaj to
Co to jest?
Zamień swój micro:bit w samodzielny rejestrator danych, który zapisuje odczyty maksymalne i minimalne temperatury i przechowuje je nawet jeśli baterie się wyczerpią lub odłączysz zasilanie.
To program w Pythonie, ale nie musisz rozumieć Pythona, aby użyć ten program.
Czego się nauczysz
- Jak używać Pythona do odczytu i zapisu danych do nieulotnej pamięci, która pozostaje na Twoim micro:bicie nawet po odłączeniu zasilania
 - Jak obsługiwać błędy w programach w Pythonie
 - Jak konwertować zmienne numeryczne na łąńcuchy i na odwrót
 
Czego potrzebujesz
- micro:bit
 - opcjonalny zestaw baterii
 
Jak go używać
- Pobierz plik ,hex programu i wgraj go na swój micro:bit.
 - Jeśli masz pakiet baterii, dołącz go i pozostaw micro:bit tam, gdzie temperatura będzie się zmieniać. Można to przetestować, umieszczając płytkę na zewnątrz lub w lodówce i pozostawiając ją na kilka minut.
 - Wstrząśnij ją, aby pokazać aktualną temperaturę.
 - Naciśnij przycisk A, aby wyświetlić minimalną zarejestrowaną temperaturę.
 - Naciśnij przycisk B, aby wyświetlić maksymalną zarejestrowaną temperaturę.
 - Naciśnij jednocześnie GND i pin 2 palcami, aby zresetować maksymalną i minimalną temperaturę do bieżącej temperatury.
 
Krok 2: Zakoduj to
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)
51Jak to działa
Ten rejestrator danych przechowuje odczyty nawet wtedy, gdy zasilanie jest odłączone od Twojego micro:bita. Robi tak, przechowując odczyty w pamięci nieulotnej. To jest pamięć komputera, która utrzymuje zawartość po wyłączeniu zasilania, tak jak Twój micro:bit przechowuje program, który wgrałeś po odłączeniu go od komputera.
Przechowuje dane na Twoim micro:bicie w dwóch plikach tekstowych o nazwach min.txt i max.txt, które program w Pythonie może odczytywać i aktualizować.
Program używa trzech zmiennych do śledzenia i porównywania temperatury:
currentTempto bieżący odczyt temperatury z wbudowanego czujnika temperatury micro:bitmaxto maksymalna temperatura. Zostaje przypisana jej nowa wartość, jeśli bieżąca temperatura jest większa niż (>) bieżąca wartośćmax.minto minimalna temperatura. Zostaje przypisana jej nowa wartość, jeśli bieżąca temperatura jest mniejsza niż (<) bieżąca wartośćmin.
Dwie funkcje, get_nv_data i set_nv_data odczytują i zapisują dane numeryczne do nieulotnych plików tekstowych. Te funkcje konwertują liczby na tekst i na odwrót:
int()konwertuje tekst (nazywany również string) na zmienną liczbową (integer), którą możemy użyć do porównania z wartościa bieżącej temperatury.str()konwertuje zmienną liczbową, jak odczyt temperatury, do łańcuch tekstowy, aby można go było zapisać w pliku tekstowym.
Funkcje używają try i except, aby wyłapać błędy odczytu lub zapisu plików danych. Jeśli nie ma pliku tekstowego zapisanego z maksymalną i minimalną temperaturą, na przykład podczas pierwszego uruchomienia, ustawia zmienne max i min jako bieżącą temperaturę.
Główna część programu działa wewnątrz pętli while True:. Zachowuje się podobnie jak blok na zawsze w MakeCode.
Krok 3: Ulepsz to
- Czujniek temperatury w micro:bit jest umieszczony wewnątrz procesora i zwykle podaje nieco wyższe odczyty niż temparatura otaczającego powietrza. Zmierz różnicę za pomocą zwykłego termometru i dodaj przesunięcie do programu przez odjęcie różnicy od odczytu 
temperature() - Konwertuj program na logowanie różnych rodzajów danych, takich jak siły mierzone za pomocą akcelerometru.
 - Dodaj funkcję radia, aby wysyłać dane do innego micro:bita znajdującego się w innej lokalizacji.
 
This content is published under a Creative Commons Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) licence.


