#include <Arduino.h>
#include "pitches.h" // File pitches.h dapat diambil dari library Arduino
// Definisi pin LED
const int ledPin1 = 19;
const int ledPin2 = 18;
const int ledPin3 = 17;
// Melodi RTTTL
const char* melody = "AbangTukangBakso:d=8,o=5,b=180:8e,8e,8f,8g,8g,8f,8e,8d,8c,2c,8d,8d,8e,8f,8f,8e,8d,8e,8e,8d,8d,2c,8e,8e,8f,8g,8g,8f,8e,8d,8c,2c,8d,8e,8f,8g,8a,8g,4f,8e,8e,8d,8d,8c";
// Fungsi untuk memainkan melodi RTTTL dan menggerakkan urutan LED
void playMelody(const char* melody) {
int default_dur = 4;
int default_oct = 6;
int bpm = 63;
int num;
long duration;
int note;
int scale;
// parse the song string
const char* ptr = melody;
while(*ptr) {
// read note duration
num = 0;
while(isdigit(*ptr)) {
num = (num * 10) + (*ptr++ - '0');
}
if(num) {
duration = (60000 / bpm) / num;
} else {
duration = 0;
}
// read note
note = 0;
switch(*ptr) {
case 'c': note = 261; break;
case 'd': note = 294; break;
case 'e': note = 329; break;
case 'f': note = 349; break;
case 'g': note = 392; break;
case 'a': note = 440; break;
case 'b': note = 493; break;
case 'p':
default: note = 0;
}
ptr++;
// read scale
if(*ptr == '#') {
note++;
ptr++;
} else if(*ptr == '-') {
note--;
ptr++;
}
scale = 0;
if(isdigit(*ptr)) {
scale = *ptr - '0';
ptr++;
}
scale += default_oct;
if(*ptr == ',') ptr++;
if(note) {
digitalWrite(ledPin1, HIGH);
delay(duration);
digitalWrite(ledPin1, LOW);
digitalWrite(ledPin2, HIGH);
delay(duration);
digitalWrite(ledPin2, LOW);
digitalWrite(ledPin3, HIGH);
delay(duration);
digitalWrite(ledPin3, LOW);
} else {
delay(duration);
}
}
}
void setup() {
// Atur pin LED sebagai output
// pinMode(ledPin1, OUTPUT);
// pinMode(ledPin2, OUTPUT);
// pinMode(ledPin3, OUTPUT);
pinMode(ledPin3, OUTPUT);
pinMode(ledPin2, OUTPUT);
}
void Task1(void* ptr)
{
while(true) {
digitalWrite(ledPin3, !digitalRead(ledPin3));
vTaskDelay(1000);
}
}
void Task2(void* ptr)
{
while(true) {
digitalWrite(ledPin2, !digitalRead(ledPin2));
vTaskDelay(2000);
}
}
void loop() {
// Putar melodi RTTTL dan menggerakkan urutan LED
// digitalWrite(ledPin3, !digitalRead(ledPin3));
// delay(1000);
xTaskCreate(Task1, "led3", 1024, nullptr, 1, nullptr);
xTaskCreate(Task2, "led2", 1024, nullptr, 1, nullptr);
}