Teach Pelajaran dengan makmal jarak jauh

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.

  • STM32 Nucleo (Arduino)
  • 55 min
  • Tingkatan 4–5 / pengenalan elektronik vokasional
  • ms-MY
  • Embedded systems
STM32 Nucleo (Arduino)
STM32 Nucleo (Arduino)

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.

1

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?

2

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

Laluan isyarat daripada butang B1 pada PC5 melalui digitalRead pada permulaan gelung, pemilihan waitTime untuk delay dan keluaran RGB pada PA8, PA9 serta PA10.

Atur cara membaca B1 pada permulaan loop(), memilih satu waitTime dan
menggunakan nilai itu untuk tiga saluran RGB dalam kitaran itu.

  1. Lancarkan makmal STM32 Arduino daripada blok ini dan buka tab editor main.ino dalam CodeIDE.

  2. 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 ms hingga 300 ms. Tempoh biasa ialah 500 ms.

  3. Cari TODO dalam fail; gantikan setiap TODO sebelum mengkompil. Simpan, kompil dan tunggu pengesahan berjaya. Kemudian muat naik dan tunggu pengesahan sekali lagi.

  4. Ujian 1 — B1 dilepaskan: perhatikan satu jujukan tiga warna penuh dan lengkapkan baris tidak ditekan.

  5. Ujian 2 — B1 ditekan dan ditahan: tahan B1 sepanjang satu jujukan penuh, kemudian lepaskannya dan lengkapkan baris ditekan. Rekod tempoh menunggu sebenar dalam ms.

  6. 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.

3

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.

4

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.