Skip to content

Instantly share code, notes, and snippets.

@idriszmy
Created April 29, 2019 02:01
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save idriszmy/f95db6491d450cde45979e686022a1ac to your computer and use it in GitHub Desktop.
Save idriszmy/f95db6491d450cde45979e686022a1ac to your computer and use it in GitHub Desktop.
Melaksanakan tugasan gangguan luaran melalui butang tekan di Maker UNO.
/*
Fungsi kod: Membaca pin butang tekan dan melaksanakan tugasan
gangguan luaran.
Penulis: Idris Zainal Abidin
Blog: https://idrisz.my
Kemaskini: 29 April 2019
*/
#define BUTTON 2 // Butang tekan bersambung pada pin 2
int ledPin = 0; // Pemboleh ubah pin LED
// Pemboleh ubah waktu menunggu untuk LED bertukar
// Perlu diletakkan volatile di hadapan jika pemboleh ubah
// tersebut ingin digunakan didalam fungsi kejadian gangguan luaran
volatile int ledDelay = 100;
void setup()
{
// Tetapkan pin 3 hingga 13 sebagai keluaran
for (ledPin = 3; ledPin < 14; ledPin++) {
pinMode(ledPin, OUTPUT);
}
pinMode(BUTTON, INPUT_PULLUP); // Tetapkan butang tekan sebagai pin masukan pullup
// Tetapkan pin pada butang tekan sebagai gangguan luaran
// Namakan fungsi kejadian adalah buttonTrigger
// Gangguan akan berlaku setiap kali isyarat berubah dari HIGH ke LOW atau sebaliknya
attachInterrupt(digitalPinToInterrupt(BUTTON), buttonTrigger, CHANGE);
}
void loop()
{
// Di dalam fungsi loop utama, hanya menjalankan tugasan CorakCahayaLED2
// Waktu menunggu diubah bergantung pada pemboleh ubah
for (ledPin = 3; ledPin < 14; ledPin++) {
digitalWrite(ledPin, HIGH);
if (ledPin > 3) {
digitalWrite(ledPin-1, LOW);
}
delay(ledDelay);
}
for (ledPin = 13; ledPin > 2; ledPin--) {
digitalWrite(ledPin, HIGH);
if (ledPin < 13) {
digitalWrite(ledPin+1, LOW);
}
delay(ledDelay);
}
}
// Fungsi kejadian gangguan luaran
void buttonTrigger()
{
if (digitalRead(BUTTON) == LOW) { // Jika butang ditekan
ledDelay = 20; // Ubah waktu menunggu kepada 20ms
}
else { // Jika butang dilepaskan
ledDelay = 100; // Ubah waktu menunggu kepada 100ms
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment