Arduino: Mengawal Pin Keluaran Analog

Berbeza daripada topik mengawal pin keluaran digital, untuk mengawal pin keluaran analog, ia mempunyai lebih daripada 2 keadaan. Seperti contoh, jika isyarat digital adalah 0V dan 5V sahaja, analog pula boleh menghasilkan 0V, 1V, 2V, 3V, 4V dan 5V. Jika anda menggunakan papan Arduino Uno atau Maker UNO, ia boleh menghasilkan 255 peringkat voltan dari 0V hingga ke 5V. Terdapat 6 pin yang boleh menghasilkan isyarat keluaran analog iaitu pin 3, 5, 6, 9, 10, dan 11. Terdapat label ~ pada pin tersebut.

💡 Tahukah Anda? Isyarat keluaran analog pada Arduino Uno atau Maker UNO bukanlah isyarat analog tulen. Ia menggunakan teknik Pulse Width Modulation (PWM) dan menghasilkan voltan analog secara purata.

Ulangkaji:
  1. Muat Naik Pengaturcaraan ke Maker UNO
  2. Mengawal Pin Keluaran Digital

Contoh Kod Pengaturcaraan

1. Mengawal Isyarat Keluaran Analog Pada 1 Pin

Ini adalah permulaan asas untuk faham konsep mengawal pin keluaran analog. Selepas kod pengaturcaraan di muat naik, perhatikan perbezaan pada LED L3 dan L4.

/*
Fungsi kod: Mengawal kecerahan LED pada pin
keluaran analog.
Penulis: Idris Zainal Abidin
Blog: https://idrisz.my
Kemaskini: 4 Apr 2019
*/
#define LED3 3 // LED3 bersambung pada pin 3
#define LED4 4 // LED4 bersambung pada pin 4
void setup()
{
pinMode(LED3, OUTPUT); // Tetapkan LED3 sebagai pin keluaran
pinMode(LED4, OUTPUT); // Tetapkan LED4 sebagai pin keluaran
}
void loop()
{
// LED3 akan semakin cerah perlahan-lahan
for (int pwm = 0; pwm < 256; pwm++) { // Nilai pemboleh ubah i bermula dari 0
// dan naik dengan tambahan 1, sehingga 255
analogWrite(LED3, pwm); // Menghantar isyarat analog (nilai i) ke pin LED3
delay(5); // Tunggu 5 mili saat
}
digitalWrite(LED4, HIGH); // LED4 menyala
// LED3 akan semakin malap perlahan-lahan
for (int pwm = 255; pwm > 0; pwm--) { // Nilai pemboleh ubah i bermula dari 255
// dan turun dengan tolakan 1, sehingga 0
analogWrite(LED3, pwm); // Menghantar isyarat analog (nilai i) ke pin LED3
delay(5); // Tunggu 5 mili saat
}
digitalWrite(LED4, LOW); // LED4 padam
}
2. Mengawal Isyarat Keluaran Analog Pada 6 Pin

Selepas berjaya mengawal 1 pin keluaran analog. Jom kita cuba untuk mengawal 6 pin keluaran analog.

/*
Fungsi kod: Mengawal kecerahan LED pada pin
keluaran analog.
Penulis: Idris Zainal Abidin
Blog: https://idrisz.my
Kemaskini: 4 Apr 2019
*/
#define LED3 3 // LED3 bersambung pada pin 3
#define LED5 5 // LED5 bersambung pada pin 5
#define LED6 6 // LED6 bersambung pada pin 6
#define LED9 9 // LED9 bersambung pada pin 9
#define LED10 10 // LED10 bersambung pada pin 10
#define LED11 11 // LED11 bersambung pada pin 11
void setup()
{
pinMode(LED3, OUTPUT); // Tetapkan LED3 sebagai pin keluaran
pinMode(LED5, OUTPUT); // Tetapkan LED5 sebagai pin keluaran
pinMode(LED6, OUTPUT); // Tetapkan LED6 sebagai pin keluaran
pinMode(LED9, OUTPUT); // Tetapkan LED9 sebagai pin keluaran
pinMode(LED10, OUTPUT); // Tetapkan LED10 sebagai pin keluaran
pinMode(LED11, OUTPUT); // Tetapkan LED11 sebagai pin keluaran
}
void loop()
{
// Ke 6-6 LED pada pin keluaran analog akan semakin cerah perlahan-lahan
for (int pwm = 0; pwm < 256; pwm++) { // Nilai pemboleh ubah i bermula dari 0
// dan naik dengan tambahan 1, sehingga 255
analogWrite(LED3, pwm); // Menghantar isyarat analog (nilai i) ke pin LED3
analogWrite(LED5, pwm); // Menghantar isyarat analog (nilai i) ke pin LED5
analogWrite(LED6, pwm); // Menghantar isyarat analog (nilai i) ke pin LED6
analogWrite(LED9, pwm); // Menghantar isyarat analog (nilai i) ke pin LED9
analogWrite(LED10, pwm); // Menghantar isyarat analog (nilai i) ke pin LED10
analogWrite(LED11, pwm); // Menghantar isyarat analog (nilai i) ke pin LED11
delay(5); // Tunggu 5 mili saat
}
// Ke 6-6 LED pada pin keluaran analog akan semakin malap perlahan-lahan
for (int pwm = 255; pwm > 0; pwm--) { // Nilai pemboleh ubah i bermula dari 255
// dan turun dengan tolakan 1, sehingga 0
analogWrite(LED3, pwm); // Menghantar isyarat analog (nilai i) ke pin LED3
analogWrite(LED5, pwm); // Menghantar isyarat analog (nilai i) ke pin LED5
analogWrite(LED6, pwm); // Menghantar isyarat analog (nilai i) ke pin LED6
analogWrite(LED9, pwm); // Menghantar isyarat analog (nilai i) ke pin LED9
analogWrite(LED10, pwm); // Menghantar isyarat analog (nilai i) ke pin LED10
analogWrite(LED11, pwm); // Menghantar isyarat analog (nilai i) ke pin LED11
delay(5); // Tunggu 5 mili saat
}
}
3. Menghasilkan Corak LED Pada Pin Keluaran Analog

Sekarang, jom jadi lebih kreatif dengan menghasilkan corak LED pada pin keluaran analog. Alah macam lampu raya tu.

/*
Fungsi kod: Mengawal kecerahan LED pada pin
keluaran analog.
Penulis: Idris Zainal Abidin
Blog: https://idrisz.my
Kemaskini: 4 Apr 2019
*/
int ledPin[6] = {3, 5, 6, 9, 10, 11}; // Pin keluaran analog disusun
// dalam bentuk pemboleh ubah array
// ledPin[0] merujuk pada LED pin 3
// ledPin[1] merujuk pada LED pin 5
// ledPin[2] merujuk pada LED pin 6
// ledPin[3] merujuk pada LED pin 9
// ledPin[4] merujuk pada LED pin 10
// ledPin[5] merujuk pada LED pin 11
int i = 0; // Pemboleh ubah i
int pwm = 0; // Pemboleh ubah pwm
boolean fadingMode = false; // Pemboleh ubah mod kecerahan
void setup()
{
// Tetapkan pin 3, 5, 6, 9, 10 dan 11 sebagai keluaran
for (i = 0; i < 6; i++) {
pinMode(ledPin[i], OUTPUT);
}
// LED3 akan semakin cerah perlahan-lahan
for (pwm = 0; pwm < 256; pwm++) { // Nilai pemboleh ubah pwm bermula dari 0
// dan naik dengan tambahan 1, sehingga 255
analogWrite(ledPin[0], pwm); // Menghantar isyarat analog (nilai pwm) ke pin LED3
delay(1); // Tunggu 1 mili saat
}
}
void loop()
{
// Corak LED menaik dari LED 3, 5, 6, 9, 10 dan 11
for (i = 0; i < 5; i++) { // Nilai pemboleh ubah i bermula dari 0
// dan naik dengan tambahan 1, sehingga 4
fadingMode = !fadingMode; // Terbalikkan status pemboleh ubah mod kecerahan
// dari true ke false, atau dari false ke true
if (fadingMode == true) { // Jika mod kecerahan adalah true
for (pwm = 255; pwm >= 0; pwm--) { // Nilai pemboleh ubah pwm bermula dari 255
// dan turun dengan tolakan 1, sehingga 0
analogWrite(ledPin[i], pwm); // LED pada array akan semakin malap perlahan-lahan
analogWrite(ledPin[i+1], 255-pwm); // LED pada array akan semakin cerah perlahan-lahan
delay(1); // Tunggu 1 mili saat
}
}
else { // Jika mod kecerahan adalah false
for (pwm = 0; pwm < 256; pwm++) { // Nilai pemboleh ubah pwm bermula dari 0
// dan naik dengan tambahan 1, sehingga 255
analogWrite(ledPin[i], 255-pwm); // LED pada array akan semakin cerah perlahan-lahan
analogWrite(ledPin[i+1], pwm); // LED pada array akan semakin malap perlahan-lahan
delay(1); // Tunggu 1 mili saat
}
}
}
// Corak LED menurun dari LED 11, 10, 9, 6, 5 dan 3
for (i = 5; i > 0 ; i--) { // Nilai pemboleh ubah i bermula dari 0
// dan naik dengan tambahan 1, sehingga 4
fadingMode = !fadingMode; // Terbalikkan status pemboleh ubah mod kecerahan
// dari true ke false, atau dari false ke true
if (fadingMode == true) { // Jika mod kecerahan adalah true
for (pwm = 255; pwm >= 0; pwm--) { // Nilai pemboleh ubah pwm bermula dari 255
// dan turun dengan tolakan 1, sehingga 0
analogWrite(ledPin[i], pwm); // LED pada array akan semakin malap perlahan-lahan
analogWrite(ledPin[i-1], 255-pwm); // LED pada array akan semakin cerah perlahan-lahan
delay(1); // Tunggu 1 mili saat
}
}
else { // Jika mod kecerahan adalah false
for (pwm = 0; pwm < 256; pwm++) { // Nilai pemboleh ubah pwm bermula dari 0
// dan naik dengan tambahan 1, sehingga 255
analogWrite(ledPin[i], 255-pwm); // LED pada array akan semakin cerah perlahan-lahan
analogWrite(ledPin[i-1], pwm); // LED pada array akan semakin malap perlahan-lahan
delay(1); // Tunggu 1 mili saat
}
}
}
}
Ubah Kod Pengaturcaraan

Anda boleh cuba ubah nilai menunggu, dan lihat hasilnya. Jika nak lebih mencabar, hasilkan corak LED sendiri mengikut tahap kreativiti anda.

Jadi sampai disini dahulu. Pastikan anda faham bagaimana kod pengaturcaraan berfungsi sebelum ke topik seterusnya. 😄


Semoga perkongsian ini bermanfaat. Bagi membolehkan saya terus mengusahakan blog ini, amatlah berbesar hati sekiranya tuan/puan dapat memberi sumbangan ikhlas bagi menampung kos (hosting, domain, masa, barang, dll). Terima kasih. Maybank Idris Zainal Abidin 162731011315

Leave a Reply