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:
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