Skip to content

Instantly share code, notes, and snippets.

@idriszmy
Created May 10, 2019 04:35
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/f86ae214d5136ab461437b4d9de4d830 to your computer and use it in GitHub Desktop.
Save idriszmy/f86ae214d5136ab461437b4d9de4d830 to your computer and use it in GitHub Desktop.
Memaparkan status butang tekan dan mengawal LED pada pin 3 hingga 7 daripada arahan di Serial Monitor melalui komunikasi siri.
/*
Fungsi kod: Memaparkan status butang tekan dan mengawal LED
pada pin 3 hingga 7 daripada arahan di Serial
Monitor melalui komunikasi siri.
Penulis: Idris Zainal Abidin
Blog: https://idrisz.my
Kemaskini: 10 Mei 2019
*/
#define BUTTON 2 // Butang tekan bersambung pada pin 2
#define LED3 3 // LED L3 bersambung pada pin 3
#define LED4 4 // LED L4 bersambung pada pin 4
#define LED5 5 // LED L5 bersambung pada pin 5
#define LED6 6 // LED L6 bersambung pada pin 6
#define LED7 7 // LED L7 bersambung pada pin 7
#define BUZZER 8 // Pembaz bersambung pada pin 8
#define NOTE_C4 262
#define NOTE_G4 392
#define playMelody1() playTone(melody1, melody1Dur, 1)
#define playMelody2() playTone(melody2, melody2Dur, 1)
#define playMelody3() playTone(melody3, melody3Dur, 2)
int melody1[] = {NOTE_G4};
int melody1Dur[] = {12};
int melody2[] = {NOTE_C4};
int melody2Dur[] = {12};
int melody3[] = {NOTE_G4, NOTE_C4};
int melody3Dur[] = {8, 8};
boolean currentButtonState = false; // Status semasa butang tekan
boolean previousButtonState = false; // Status butang tekan sebelumnya
String command = "";
void setup()
{
pinMode(BUTTON, INPUT_PULLUP); // Tetapkan butang tekan sebagai pin masukan pullup
pinMode(LED3, OUTPUT); // Tetapkan LED3 sebagai pin keluaran
pinMode(LED4, OUTPUT); // Tetapkan LED4 sebagai pin keluaran
pinMode(LED5, OUTPUT); // Tetapkan LED5 sebagai pin keluaran
pinMode(LED6, OUTPUT); // Tetapkan LED6 sebagai pin keluaran
pinMode(LED7, OUTPUT); // Tetapkan LED7 sebagai pin keluaran
Serial.begin(9600); // Aktifkan komunikasi siri dengan kelajuan 9600 bit per saat
Serial.println("Memaparkan status butang tekan dan"); // Paparkan ayat di Serial Monitor
Serial.println("Masukkan arahan untuk mengawal LED:"); // Paparkan ayat di Serial Monitor
Serial.println(); // Enter
}
void loop()
{
currentButtonState = digitalRead(BUTTON); // Membaca status butang tekan
if (currentButtonState != previousButtonState) { // Jika terdapat perubahan status
if (currentButtonState == LOW) { // Jika butang ditekan
Serial.println("Butang ditekan."); // Paparkan "Butang ditekan." di Serial Monitor
}
else { // Jika butang dilepaskan
Serial.println("Butang dilepaskan."); // Paparkan "Butang dilepaskan." di Serial Monitor
}
previousButtonState = currentButtonState; // Untuk pusingan seterusnya, status sebelumnya
// adalah status semasa
}
if (Serial.available()) { // Jika data diterima
delay(100); // Tunggu sebentar untuk pastikan semua data diterima
command = ""; // Kosongkan pemboleh ubah command
while (Serial.available()) { // Selagi terdapat data arahan
char inChar = (char)Serial.read(); // Baca dan simpan data ke pembolehubah inChar
command += inChar; // Gabungkan data-data untuk menjadi ayat arahan
}
// Bandingkan ayat arahan
if (command == "LED3 ON") { // Jika ayat arahan adalah "LED3 ON"
digitalWrite(LED3, HIGH); // Nyalakan LED L3
Serial.println("LED L3 menyala."); // Paparkan status LED di Serial Monitor
playMelody1(); // Mainkan melodi untuk LED menyala
}
else if (command == "LED3 OFF") { // Jika ayat arahan adalah "LED3 OFF"
digitalWrite(LED3, LOW); // Padamkan LED L3
Serial.println("LED L3 padam."); // Paparkan status LED di Serial Monitor
playMelody2(); // Mainkan melodi untuk LED padam
}
else if (command == "LED4 ON") { // Jika ayat arahan adalah "LED4 ON"
digitalWrite(LED4, HIGH); // Nyalakan LED L4
Serial.println("LED L4 menyala."); // Paparkan status LED di Serial Monitor
playMelody1(); // Mainkan melodi untuk LED menyala
}
else if (command == "LED4 OFF") { // Jika ayat arahan adalah "LED4 OFF"
digitalWrite(LED4, LOW); // Padamkan LED L4
Serial.println("LED L4 padam."); // Paparkan status LED di Serial Monitor
playMelody2(); // Mainkan melodi untuk LED padam
}
else if (command == "LED5 ON") { // Jika ayat arahan adalah "LED5 ON"
digitalWrite(LED5, HIGH); // Nyalakan LED L5
Serial.println("LED L5 menyala."); // Paparkan status LED di Serial Monitor
playMelody1(); // Mainkan melodi untuk LED menyala
}
else if (command == "LED5 OFF") { // Jika ayat arahan adalah "LED5 OFF"
digitalWrite(LED5, LOW); // Padamkan LED L5
Serial.println("LED L5 padam."); // Paparkan status LED di Serial Monitor
playMelody2(); // Mainkan melodi untuk LED padam
}
else if (command == "LED6 ON") { // Jika ayat arahan adalah "LED6 ON"
digitalWrite(LED6, HIGH); // Nyalakan LED L6
Serial.println("LED L6 menyala."); // Paparkan status LED di Serial Monitor
playMelody1(); // Mainkan melodi untuk LED menyala
}
else if (command == "LED6 OFF") { // Jika ayat arahan adalah "LED6 OFF"
digitalWrite(LED6, LOW); // Padamkan LED L6
Serial.println("LED L6 padam."); // Paparkan status LED di Serial Monitor
playMelody2(); // Mainkan melodi untuk LED padam
}
else if (command == "LED7 ON") { // Jika ayat arahan adalah "LED7 ON"
digitalWrite(LED7, HIGH); // Nyalakan LED L7
Serial.println("LED L7 menyala."); // Paparkan status LED di Serial Monitor
playMelody1(); // Mainkan melodi untuk LED menyala
}
else if (command == "LED7 OFF") { // Jika ayat arahan adalah "LED7 OFF"
digitalWrite(LED7, LOW); // Padamkan LED L7
Serial.println("LED L7 padam."); // Paparkan status LED di Serial Monitor
playMelody2(); // Mainkan melodi untuk LED padam
}
else {
Serial.println("Arahan tidak sah."); // Arahan tiada dalam senarai
playMelody3(); // Mainkan melodi untuk arahan tidak sah
}
}
}
void playTone(int *melody, int *melodyDur, int notesLength)
{
for (int i = 0; i < notesLength; i++) {
int noteDuration = 1000/melodyDur[i];
tone(BUZZER, melody[i], noteDuration);
delay(noteDuration);
noTone(BUZZER);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment