// File: main.ino
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <Keypad.h>
#include "pitches.h"
#define SPEAKER_PIN 8
// Pin RGB LED
#define RED_PIN 3
#define GREEN_PIN 2
#define BLUE_PIN 1
extern "C"
{
void led_RED(byte);
void led_GREEN(byte);
void led_BLUE(byte);
}
void setup() {
pinMode(RED_PIN, OUTPUT);
pinMode(GREEN_PIN, OUTPUT);
pinMode(BLUE_PIN, OUTPUT);
}
void loop() {
led_BLUE(0);
led_RED(1);
// led_BLUE(1);
led_GREEN(1);
delay(1000);
led_RED(0);
led_BLUE(0);
led_GREEN(0);
delay(250);
}
// // File: main.ino
// #include <Wire.h>
// #include <LiquidCrystal_I2C.h>
// #include <Keypad.h>
// #include "pitches.h"
// #define SPEAKER_PIN 8
// // Pin RGB LED
// #define RED_PIN 3
// #define GREEN_PIN 2
// #define BLUE_PIN 1
// extern "C"
// {
// void led_RED(byte);
// void led_GREEN(byte);
// void led_BLUE(byte);
// void ledOFF;
// }
// const int numTones = 16; // Jumlah nada
// // Tombol pada keypad dan nada yang sesuai
// const char keymap[4][4] = {
// {'1', '2', '3', 'A'},
// {'4', '5', '6', 'B'},
// {'7', '8', '9', 'C'},
// {'*', '0', '#', 'D'}
// };
// const int tones[] = {
// NOTE_C4, NOTE_D4, NOTE_E4, NOTE_F4,
// NOTE_G4, NOTE_A4, NOTE_B4, NOTE_C5,
// NOTE_D5, NOTE_E5, NOTE_F5, NOTE_G5,
// NOTE_A5, NOTE_B5, NOTE_C6, NOTE_D6
// };
// const char* noteNames[] = {
// "C4", "D4", "E4", "F4",
// "G4", "A4", "B4", "C5",
// "D5", "E5", "F5", "G5",
// "A5", "B5", "C6", "D6"
// };
// // Keypad configuration
// const byte ROWS = 4;
// const byte COLS = 4;
// byte rowPins[ROWS] = {13, 12, 11, 10}; // Pin baris keypad
// byte colPins[COLS] = {7, 2, 1, 4}; // Pin kolom keypad
// Keypad keypad = Keypad(makeKeymap(keymap), rowPins, colPins, ROWS, COLS);
// LiquidCrystal_I2C lcd(0x27, 16, 2); // Alamat default I2C adalah 0x27
// int questionTones[4]; // Nada soal
// void setup() {
// lcd.init();
// lcd.backlight();
// lcd.setCursor(0, 0);
// lcd.print("Guess the note!");
// delay(2000);
// // Setup speaker dan RGB LED
// pinMode(SPEAKER_PIN, OUTPUT);
// pinMode(RED_PIN, OUTPUT);
// pinMode(GREEN_PIN, OUTPUT);
// pinMode(BLUE_PIN, OUTPUT);
// // Intro doremi
// playIntro();
// // Sesi perkenalan nada
// introduceNotes();
// }
// void loop() {
// generateQuestion();
// lcd.clear();
// lcd.setCursor(0, 0);
// lcd.print("Simak nada:");
// setRGBColor(255, 255, 255); // RGB warna putih
// playQuestion();
// lcd.clear();
// lcd.setCursor(0, 0);
// lcd.print("Tebak nadanya!");
// bool result = checkAnswer();
// if (result) {
// lcd.clear();
// lcd.setCursor(0, 0);
// lcd.print("Benar!");
// setRGBColor(0, 255, 0); // Hijau untuk benar
// } else {
// lcd.clear();
// lcd.setCursor(0, 0);
// lcd.print("Salah!");
// setRGBColor(255, 0, 0); // Merah untuk salah
// }
// delay(3000); // Tunggu sebelum mulai ulang
// setRGBColor(0, 0, 0); // Matikan LED
// }
// void playIntro() {
// // Mainkan nada satu per satu secara manual
// setRGBColor(random(256), random(256), random(256)); // Warna acak
// tone(SPEAKER_PIN, NOTE_D6, 150); // Mainkan nada C6 selama 300 ms
// delay(300); // Tunggu 400 ms
// setRGBColor(random(256), random(256), random(256)); // Warna acak
// tone(SPEAKER_PIN, NOTE_E6, 150); // Mainkan nada D6 selama 300 ms
// delay(300); // Tunggu 400 ms
// setRGBColor(random(256), random(256), random(256)); // Warna acak
// tone(SPEAKER_PIN, NOTE_G6, 150); // Mainkan nada E6 selama 300 ms
// delay(300); // Tunggu 400 ms
// setRGBColor(random(256), random(256), random(256)); // Warna acak
// tone(SPEAKER_PIN, NOTE_B6, 2250); // Mainkan nada F6 selama 300 ms
// delay(650); // Tunggu 400 ms
// setRGBColor(random(256), random(256), random(256)); // Warna acak
// tone(SPEAKER_PIN, NOTE_A6, 10); // Mainkan nada F6 selama 300 ms
// delay(100); // Tunggu 400 ms
// setRGBColor(random(256), random(256), random(256)); // Warna acak
// tone(SPEAKER_PIN, NOTE_G6, 10); // Mainkan nada F6 selama 300 ms
// delay(750); // Tunggu 400 ms
// //2
// setRGBColor(random(256), random(256), random(256)); // Warna acak
// tone(SPEAKER_PIN, NOTE_D6, 150); // Mainkan nada C6 selama 300 ms
// delay(300); // Tunggu 400 ms
// setRGBColor(random(256), random(256), random(256)); // Warna acak
// tone(SPEAKER_PIN, NOTE_E6, 150); // Mainkan nada D6 selama 300 ms
// delay(300); // Tunggu 400 ms
// setRGBColor(random(256), random(256), random(256)); // Warna acak
// tone(SPEAKER_PIN, NOTE_G6, 150); // Mainkan nada E6 selama 300 ms
// delay(300); // Tunggu 400 ms
// setRGBColor(random(256), random(256), random(256)); // Warna acak
// tone(SPEAKER_PIN, NOTE_B6, 2000); // Mainkan nada F6 selama 300 ms
// delay(650); // Tunggu 400 ms
// setRGBColor(random(256), random(256), random(256)); // Warna acak
// tone(SPEAKER_PIN, NOTE_A6, 10); // Mainkan nada F6 selama 300 ms
// delay(100); // Tunggu 400 ms
// setRGBColor(random(256), random(256), random(256)); // Warna acak
// tone(SPEAKER_PIN, NOTE_G6, 10); // Mainkan nada F6 selama 300 ms
// delay(100); // Tunggu 400 ms
// setRGBColor(random(256), random(256), random(256)); // Warna acak
// tone(SPEAKER_PIN, NOTE_E6, 10); // Mainkan nada F6 selama 300 ms
// delay(100); // Tunggu 400 ms
// setRGBColor(random(256), random(256), random(256)); // Warna acak
// tone(SPEAKER_PIN, NOTE_G6, 10); // Mainkan nada F6 selama 300 ms
// delay(600); // Tunggu 400 ms
// // 3
// setRGBColor(random(256), random(256), random(256)); // Warna acak
// tone(SPEAKER_PIN, NOTE_D6, 150); // Mainkan nada C6 selama 300 ms
// delay(300); // Tunggu 400 ms
// setRGBColor(random(256), random(256), random(256)); // Warna acak
// tone(SPEAKER_PIN, NOTE_E6, 150); // Mainkan nada D6 selama 300 ms
// delay(300); // Tunggu 400 ms
// setRGBColor(random(256), random(256), random(256)); // Warna acak
// tone(SPEAKER_PIN, NOTE_G6, 150); // Mainkan nada E6 selama 300 ms
// delay(300); // Tunggu 400 ms
// setRGBColor(random(256), random(256), random(256)); // Warna acak
// tone(SPEAKER_PIN, NOTE_B6, 2000); // Mainkan nada F6 selama 300 ms
// delay(600); // Tunggu 400 ms
// setRGBColor(random(256), random(256), random(256)); // Warna acak
// tone(SPEAKER_PIN, NOTE_A6, 10); // Mainkan nada F6 selama 300 ms
// delay(100); // Tunggu 400 ms
// setRGBColor(random(256), random(256), random(256)); // Warna acak
// tone(SPEAKER_PIN, NOTE_G6, 10); // Mainkan nada F6 selama 300 ms
// delay(600); // Tunggu 400 ms
// // 4
// setRGBColor(random(256), random(256), random(256)); // Warna acak
// tone(SPEAKER_PIN, NOTE_C7, 500); // Mainkan nada C6 selama 300 ms
// delay(550); // Tunggu 400 ms
// setRGBColor(random(256), random(256), random(256)); // Warna acak
// tone(SPEAKER_PIN, NOTE_C7, 500); // Mainkan nada D6 selama 300 ms
// delay(550); // Tunggu 400 ms
// setRGBColor(random(256), random(256), random(256)); // Warna acak
// tone(SPEAKER_PIN, NOTE_C7, 500); // Mainkan nada E6 selama 300 ms
// delay(350); // Tunggu 400 ms
// setRGBColor(random(256), random(256), random(256)); // Warna acak
// tone(SPEAKER_PIN, NOTE_D7, 500); // Mainkan nada F6 selama 300 ms
// delay(300); // Tunggu 400 ms
// setRGBColor(random(256), random(256), random(256)); // Warna acak
// tone(SPEAKER_PIN, NOTE_B6, 2750); // Mainkan nada F6 selama 300 ms
// delay(500); // Tunggu 400 ms
// setRGBColor(random(256), random(256), random(256)); // Warna acak
// tone(SPEAKER_PIN, NOTE_G6, 7000); // Mainkan nada F6 selama 300 ms
// delay(800); // Tunggu 400 ms
// noTone(SPEAKER_PIN); // Hentikan nada
// }
// // Fungsi untuk memperkenalkan nada
// void introduceNotes() {
// lcd.clear();
// lcd.setCursor(0, 0);
// lcd.print("Ikuti nada:");
// for (int i = 0; i < numTones; i++) {
// lcd.setCursor(0, 1);
// lcd.print(noteNames[i]); // Tampilkan nama nada
// // Atur warna RGB sesuai nada
// setRGBColorForNote(i);
// // Tunggu input dari user
// bool correctInput = false;
// while (!correctInput) {
// char key = keypad.getKey();
// if (key && key == keymap[i / COLS][i % COLS]) { // Jika tombol sesuai
// tone(SPEAKER_PIN, tones[i], 500); // Mainkan nada
// delay(600);
// correctInput = true;
// }
// }
// }
// noTone(SPEAKER_PIN);
// setRGBColor(0, 0, 0); // Matikan LED setelah sesi perkenalan
// }
// // Fungsi untuk mengatur warna RGB sesuai nada
// void setRGBColorForNote(int noteIndex) {
// // Contoh pengaturan warna RGB untuk 16 nada
// int red = (noteIndex % 4) * 64;
// int green = ((noteIndex / 4) % 4) * 64;
// int blue = ((noteIndex / 8) % 2) * 128;
// setRGBColor(red, green, blue);
// }
// // Fungsi untuk mengacak soal
// void generateQuestion() {
// for (int i = 0; i < 4; i++) {
// questionTones[i] = tones[random(numTones)];
// }
// }
// // Fungsi untuk memainkan nada soal
// void playQuestion() {
// String answerNotes = ""; // String untuk menyimpan jawaban dalam bentuk note
// for (int i = 0; i < 4; i++) {
// tone(SPEAKER_PIN, questionTones[i], 500);
// delay(600);
// noTone(SPEAKER_PIN);
// // Cari nama not yang sesuai dengan nada
// for (int j = 0; j < numTones; j++) {
// if (questionTones[i] == tones[j]) {
// if (i > 0) answerNotes += "-"; // Tambahkan separator jika bukan nada pertama
// answerNotes += noteNames[j];
// break;
// }
// }
// }
// // Simpan dan tampilkan jawaban di LCD
// lcd.clear();
// lcd.setCursor(0, 0);
// lcd.print("Jawaban:");
// lcd.setCursor(0, 1);
// lcd.print(answerNotes); // Tampilkan jawaban
// delay(3000); // Tunggu agar pemain bisa melihat jawaban
// }
// // Fungsi untuk memeriksa jawaban
// bool checkAnswer() {
// for (int i = 0; i < 4; i++) {
// int pitch = 0;
// while (pitch == 0) {
// char key = keypad.getKey();
// if (key) {
// for (int j = 0; j < numTones; j++) {
// if (key == keymap[j / COLS][j % COLS]) {
// pitch = tones[j];
// tone(SPEAKER_PIN, pitch, 500);
// delay(600);
// break;
// }
// }
// }
// }
// if (pitch != questionTones[i]) {
// return false; // Jika nada berbeda
// }
// }
// return true; // Semua nada cocok
// }
// // // Fungsi untuk mengatur warna RGB LED
// // void setRGBColor(int red, int green, int blue) {
// // analogWrite(RED_PIN, red);
// // analogWrite(GREEN_PIN, green);
// // analogWrite(BLUE_PIN, blue);
// // }