Pelajaran Teach
STM32 dengan API Arduino (2/4): jujukan dan butang
Pelajar mengembangkan atur cara STM32 Arduino dengan beberapa LED dan input butang, kemudian menerangkan bagaimana masa jujukan dan keadaan butang mempengaruhi keluaran.
Kali pertama menggunakan LabsLand? Cipta akaun guru anda
Hasil pembelajaran
Mencipta jujukan keluaran menggunakan senarai pin.
Membaca butang aktif pada aras LOW dan menggunakannya untuk mengubah tingkah laku.
Merekod dua keadaan ujian dan menerangkan keputusan atur cara.
Pratonton aktiviti pelajar
Kandungan aktiviti
Pratonton sahaja. Dalam sesi kelas, pelajar boleh mengisi jawapan dan menyerahkan hasil kerja mereka kepada guru.
Butang aktif pada aras LOW
8 min
Dalam susunan ini, butang yang akan digunakan disambungkan kepada pin PC5. Butang ini
aktif pada aras LOW: apabila ditekan, digitalRead(PC5) mengembalikan LOW;
apabila ia tidak ditekan, ia mengembalikan HIGH.
Dalam antara muka makmal, gunakan kawalan berlabel Button 1 atau B1. Tekan dan
pegang sambil memerhati sekurang-kurangnya satu jujukan penuh, kemudian lepaskannya sebelum
ujian dengan butang dilepaskan. Klik yang terlalu singkat mungkin berakhir sebelum atur cara membacanya.
Apabila butang 1 ditekan, perbandingan manakah yang mewakili input aktif pada aras LOW?
Jujukan dengan mod pantas
27 min
Atur cara ini menggunakan tiga keluaran RGB yang telah disambungkan dalam susunan makmal
jarak jauh. setup() menetapkan butang sebagai input dan setiap pin RGB sebagai keluaran.
loop() membaca butang sekali pada permulaan setiap kitaran tiga warna, memilih tempoh
menunggu dalam milisaat dan menghidupkan setiap saluran mengikut jujukan. Tekanan butang
semasa satu kitaran hanya berkuat kuasa pada kitaran seterusnya; tahan B1 sehingga kitaran
baharu bermula. Fungsi pembantu turnOffAll() mengumpulkan tiga tindakan berulang di bawah satu nama yang jelas.
Butang menetapkan masa bagi kitaran RGB seterusnya
Atur cara membaca B1 pada permulaan loop(), memilih satu waitTime dan
menggunakan nilai itu untuk tiga saluran RGB dalam kitaran itu.
Lancarkan makmal STM32 Arduino daripada blok ini dan buka tab editor
main.inodalam CodeIDE.Tampalkan atur cara pemula di bawah. Gantikan TODO 1 dengan aras perbandingan yang bermaksud “ditekan” dan TODO 2 dengan tempoh menunggu yang jelas lebih pantas, daripada
100 mshingga300 ms. Tempoh biasa ialah500 ms.Cari
TODOdalam fail; gantikan setiap TODO sebelum mengkompil. Simpan, kompil dan tunggu pengesahan berjaya. Kemudian muat naik dan tunggu pengesahan sekali lagi.Ujian 1 — B1 dilepaskan: perhatikan satu jujukan tiga warna penuh dan lengkapkan baris
tidak ditekan.Ujian 2 — B1 ditekan dan ditahan: tahan B1 sepanjang satu jujukan penuh, kemudian lepaskannya dan lengkapkan baris
ditekan. Rekod tempoh menunggu sebenar dalamms.Jangan ubah jujukan sehingga kedua-dua baris awal dan soalan penerangan tepat di bawah jadual telah lengkap.
#include <Arduino.h>
const int RGB_RED = PA8;
const int RGB_GREEN = PA9;
const int RGB_BLUE = PA10;
const int BUTTON_1 = PC5; // Aktif LOW: ditekan == LOW
void turnOffAll() {
analogWrite(RGB_RED, 0);
analogWrite(RGB_GREEN, 0);
analogWrite(RGB_BLUE, 0);
}
void setup() {
pinMode(BUTTON_1, INPUT);
pinMode(RGB_RED, OUTPUT);
pinMode(RGB_GREEN, OUTPUT);
pinMode(RGB_BLUE, OUTPUT);
}
void loop() {
bool pressed = digitalRead(BUTTON_1) == TODO_PRESSED_LEVEL; // TODO 1: aras perbandingan bagi butang aktif pada LOW
int waitTime = 500;
if (pressed) {
waitTime = TODO_FAST_WAIT_MS; // TODO 2: selang pantas yang boleh dilihat, dalam ms
}
turnOffAll();
analogWrite(RGB_RED, 180);
delay(waitTime);
turnOffAll();
analogWrite(RGB_GREEN, 180);
delay(waitTime);
turnOffAll();
analogWrite(RGB_BLUE, 180);
delay(waitTime);
}
Isi jadual selepas memuat naik atur cara dan menguji butang. Gunakan dua baris
sahaja dan biarkan baris lain kosong jika TEACH memaparkan lebih banyak:
- Baris 1: butang tidak ditekan.
- Baris 2: butang ditekan.
- Dalam Nilai digitalRead yang dijangkakan, tulis HIGH atau LOW mengikut logik aktif pada aras LOW.
- Dalam Tempoh menunggu, rekod nilai dalam ms yang digunakan oleh atur cara.
- Dalam Penjelasan ringkas, sambungkan keadaan butang dengan kelajuan yang diperhatikan.
| Keadaan butang | Nilai digitalRead yang dijangkakan | Tempoh menunggu ms | Jujukan yang diperhatikan | Penerangan ringkas |
|---|---|---|---|---|
Terangkan bagaimana anda mengetahui bahawa butang mengubah tingkah laku atur cara. Gunakan dua baris jadual sebagai bukti.
Ubah suai jujukan selepas ujian awal
10 min
Hanya selepas dua baris awal selesai, tukar blok warna pertama dengan blok warna terakhir
supaya jujukan bermula dengan biru dan berakhir dengan merah. Jangan ubah sebarang tempoh
menunggu. Simpan, kompil, muat naik dan ulang kedua-dua keadaan butang. Cabaran berasingan
ini mengesahkan bahawa susunan warna dan masa yang dikawal oleh butang ialah dua peraturan berbeza.
Dua blok kod yang manakah anda alihkan? Nyatakan susunan warna baharu dan sahkan,
dengan satu pemerhatian ketika B1 dilepaskan dan satu ketika B1 ditahan, sama ada
peraturan masa masih berfungsi.
Hantar kod anda
10 min
Serahkan main.ino akhir anda
Simpan main.ino sebelum melampirkannya. Tangkapan mesti menunjukkan versi akhir,
susunan warna yang telah diubah dan tiada token TODO yang tertinggal.
Mengapakah butang aktif pada aras LOW boleh mengelirukan pada mulanya? Tulis satu peraturan ringkas yang membantu anda mengelakkan kesilapan.