Pelajaran Teach
STM32 dengan API Arduino (3/4): potensiometer dan RGB
Pelajar membaca potensiometer dengan analogRead(), memetakan nilainya kepada keluaran RGB dan menguji warna serta kelakuan pada hujung julat menggunakan papan sebenar.
Kali pertama menggunakan LabsLand? Cipta akaun guru anda
Hasil pembelajaran
Membaca input analog dan menukarkannya kepada julat yang berguna.
Menggunakan PWM untuk mengawal kecerahan keluaran RGB.
Menggunakan konsol Serial sebagai bukti penyahpepijatan.
Pratonton aktiviti pelajar
Kandungan aktiviti
Pratonton sahaja. Dalam sesi kelas, pelajar boleh mengisi jawapan dan menyerahkan hasil kerja mereka kepada guru.
Dua julat berbeza
8 min
analogRead(PC0) mengembalikan bacaan yang akan kita anggap sebagai nilai antara 0
dan 1023. analogWrite(PA10, brightness) menjangkakan kecerahan antara 0 dan
255. Itulah sebabnya kita menggunakan map: fungsi ini menukar satu julat kepada julat yang lain.
Ikuti nilai daripada input hingga keluaran
Atur cara ini akan menggunakan penukaran berikut:
int reading = analogRead(POT_1);
int brightness = map(reading, 0, 1023, 0, 255);Dengan penukaran terus yang ditunjukkan, apakah yang sepatutnya berlaku apabila bacaan
potensiometer menghampiri nilai maksimum?
Kawal kecerahan dengan bacaan analog
29 min
Serial.begin(115200) menetapkan kadar komunikasi kepada 115200 baud. Selepas
muat naik, buka konsol Serial CodeIDE dan pilih 115200 jika diminta memilih kadar.
Setiap baris perlu menunjukkan satu bacaan ADC (0-1023 kiraan) dan satu nilai kecerahan PWM
(0-255). map(value, inLow, inHigh, outLow, outHigh) meletakkan nilai pada
titik sepadan antara dua titik akhir keluaran.
Lancarkan makmal STM32 Arduino dan buka tab editor
main.inodalam CodeIDE.Tampalkan atur cara pemula. Untuk TODO 1, pilih satu pin RGB yang telah diisytiharkan. Untuk TODO 2 dan 3, lengkapkan pemetaan PWM terus supaya bacaan minimum menghasilkan keadaan gelap dan bacaan maksimum menghasilkan kecerahan penuh.
Cari
TODO; gantikan ketiga-tiganya sebelum mengkompil. Simpan, kompil dan tunggu pengesahan berjaya, kemudian muat naik dan tunggu pengesahan sekali lagi.Buka Serial di
115200 baud. Jika tiada baris muncul selepas muat naik yang berjaya, sahkan kadar konsol dan buka semula konsol sebelum menukar kod.Ujian awal: gerakkan potensiometer 1 ke kedudukan rendah, tengah dan tinggi. Pada setiap kedudukan, tunggu 3 hingga 5 baris Serial menjadi stabil, salin sepasang nilai anggaran dan perhatikan saluran RGB yang dipilih.
Lengkapkan ketiga-tiga baris jadual dan penjelasan di bawah jadual sebelum mengubah suai
map.
#include <Arduino.h>
const int POT_1 = PC0;
const int RGB_RED = PA8;
const int RGB_GREEN = PA9;
const int RGB_BLUE = PA10;
const int RGB_OUTPUT = TODO_RGB_OUTPUT; // TODO 1: satu pin RGB yang telah diisytiharkan
void setup() {
pinMode(RGB_OUTPUT, OUTPUT);
Serial.begin(115200);
}
void loop() {
int reading = analogRead(POT_1);
int brightness = map(reading, 0, 1023,
TODO_PWM_AT_MIN, TODO_PWM_AT_MAX); // TODO 2-3: hujung julat pemetaan terus
analogWrite(RGB_OUTPUT, brightness);
Serial.print("pot1=");
Serial.print(reading);
Serial.print(" brightness=");
Serial.println(brightness);
delay(200);
}
Isi jadual selepas menggerakkan potensiometer dan menyemak Serial. Gunakan tiga
baris sahaja dan biarkan baris lain kosong jika TEACH memaparkan lebih banyak:
- Baris 1: potensiometer dalam kedudukan rendah.
- Baris 2: potensiometer dalam kedudukan tengah.
- Baris 3: potensiometer dalam kedudukan tinggi.
- Dalam Bacaan Serial dan Kecerahan yang dikira, salin nilai anggaran; nilainya tidak perlu tepat.
- Dalam Keluaran yang diperhatikan, namakan saluran RGB dan huraikan kecerahannya.
| Kedudukan potensiometer | Bacaan Serial (kiraan ADC) | Kecerahan yang dikira (PWM 0-255) | Keluaran yang diperhatikan | Adakah ia masuk akal? |
|---|---|---|---|---|
Gunakan sekurang-kurangnya dua baris untuk menerangkan hubungan antara bacaan potensiometer dan kecerahan yang diperhatikan.
Songsangkan hanya selepas merekodkan ujian awal
8 min
Selepas tiga baris awal selesai, tukar kedua-dua nilai hujung PWM dalam map supaya
penukaran menjadi songsang. Jangan ubah RGB_OUTPUT. Simpan, kompil, muat naik,
buka semula Serial pada 115200 baud dan uji semula kedudukan rendah serta tinggi sahaja.
Ini menghasilkan perbandingan yang jelas tanpa mencampurkan perubahan saluran dengan
perubahan penukaran.
Jawab dalam tiga baris menggunakan format ini:
1. map diubah: ...
2. kedudukan rendah: pot1=... brightness=... | LED diperhatikan: ...
3. kedudukan tinggi: pot1=... brightness=... | LED diperhatikan: ...
Kemudian tambah satu ayat yang menerangkan bagaimana kedua-dua pemerhatian itu menunjukkan bahawa
penukaran telah terbalik.
Hantar kod anda
10 min
Serahkan main.ino akhir anda
Simpan main.ino sebelum melampirkannya. Tangkapan mesti menunjukkan map songsang yang
telah diuji, keluaran RGB yang dipilih, laporan Serial dan tiada token TODO.
Terangkan mengapa nilai antara 0 dan 1023 tidak boleh digunakan secara langsung sebagai kecerahan PWM jika julat kecerahan yang dijangkakan ialah 0 hingga 255.