//Dengan menggunakan ic register untuk seven segmen
#include<ezButton.h>
#define ndo 523
#define nre 587
#define nmi 659
#define nfa 698
#define nsol 784
#define nla 880
#define pp 4
#define mus false
#define piano true
//@@@@@@@@ PIN-PIN YANG DIGUNAKAN @@@@@@@@
//LedControl segmentControl=LedControl(A3,A4,A5,1);//PERHATIKAN INI!!!!!
const byte pinLac=12;
const byte pinData=13;
const byte pinKlok=10;
//tombol piano=================================
ezButton B_DO(A0);
ezButton B_RE(A1);
ezButton B_MI(A2);
ezButton B_FA(A3);
ezButton B_SOL(A5);
ezButton B_LA(A4);
//================================================
ezButton BSTART(7);
ezButton switchUpPin(8);
ezButton switchDownPin(9);
byte buzzer=11;
//pin corong=======================================
const int pinDo=1;
const int pinRe=6;
const int pinMi=5;
const int pinFa=4;
const int pinSol=3;
const int pinLa=2;
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
int langkah=0;
byte val1=1;
byte simVal1=0;
bool jalankan=false;
int jedaAntarNada=20;
unsigned long penyesuaian=0;
unsigned long penyesuaian5=0;
unsigned long penyesuaian2=0;
bool simpananMode=piano;
int i=0;
int j=0;
int jedanya=200;//jeda animasi
bool mode=piano;
bool sekali=false;
bool sekali1=false;
bool sekali2=false;
bool usai=false;
byte hitung=0;
bool pendek=true;
bool mulaiHitung=false;
bool selesai=true;
int nadaNada[]={ndo,nre,nmi,nfa,nsol,nla};
int kumPin[]={pinDo,
pinRe,pinMi,pinFa,pinSol,pinLa};
const byte nomor[]={
// abcdefg
0b11111100,//0
0b01100000,//1
0b11011010,//2
0b11110010,//3
0b01100110,//4
0b10111110,//5
0b11011010,//6
0b11100000,//7
0b11111111,//8
0b11110110};//9
const byte animasinya[]={
//abcdefg
0b11001110,
0b00000000,
0b11001110,
0b00000000,
};
int counter = 1;
byte on=HIGH;
byte off=LOW;
//=============================
void salurkan(byte angkanya){
digitalWrite(pinLac,LOW);
if(mode==mus){
shiftOut(pinData,pinKlok,
LSBFIRST,nomor[angkanya]);}
else{
shiftOut(pinData,pinKlok,
LSBFIRST, animasinya[angkanya]);}
digitalWrite(pinLac,HIGH);
}
void nadanya(){
switch(val1){
case 1:
if(langkah==0){ nadax(4,250);} //4
else if(langkah==1){ nadax(5,250);} //5
else if(langkah==2){ nadax(5,450);} //5
else if(langkah==3){ nadax(6,250);} //6
else if(langkah==4){ nadax(5,250);} //5
else if(langkah==5){ nadax(3,250);} //3
else if(langkah==6){ nadax(1,450);} //1
else if(langkah==7){ nadax(2,250);} //2
else if(langkah==8){ nadax(3,250);} //3
else if(langkah==9){ nadax(3,250);} //3
else if(langkah==10){ nadax(2,250);} //2
else if(langkah==11){ nadax(1,250);} //1
else if(langkah==12){ nadax(2,450);} //2
else if(langkah==13){ nadax(4,250);} //4
else if(langkah==14){ nadax(5,250);} //5
else if(langkah==15){ nadax(5,450);} //5
else if(langkah==16){ nadax(6,250);} //6
else if(langkah==17){ nadax(5,250);} //5
else if(langkah==18){ nadax(3,250);} //3
else if(langkah==19){ nadax(1,450);} //1
else if(langkah==20){ nadax(2,250);} //2
else if(langkah==21){ nadax(3,250);} //3
else if(langkah==22){ nadax(3,250);} //3
else if(langkah==23){ nadax(2,250);} //2
else if(langkah==24){ nadax(2,250);} //2
else if(langkah==25){ nadax(1,450);} //1
else if(langkah==26){ selesai=true;langkah=0;
resetPin();noTone(buzzer);}
break;
//===============================================================================
case 2: //LAGU 23
if(langkah==0){ nadax(3,350);} //3
else if(langkah==0){ nadax(4,350);} //4
else if(langkah==1){ nadax(3,350);} //3
else if(langkah==2){ nadax(5,600);} //5
else if(langkah==3){ nadax(3,350);} //3
else if(langkah==4){ nadax(2,350);} //2
else if(langkah==5){ nadax(3,350);} //3
else if(langkah==6){ nadax(1,600);} //1
else if(langkah==7){ nadax(3,350);} //3
else if(langkah==8){ nadax(4,350);} //4
else if(langkah==9){ nadax(3,350);} //3
else if(langkah==10){ nadax(5,250);} //5
else if(langkah==11){ nadax(5,250);} //5
else if(langkah==12){ nadax(5,250);} //5
else if(langkah==13){ nadax(5,250);} //5
else if(langkah==14){ nadax(5,250);} //5
else if(langkah==15){ nadax(3,350);} //3
else if(langkah==16){ nadax(2,350);} //2
else if(langkah==17){ nadax(3,350);} //3
else if(langkah==18){ nadax(1,600);} //1
else if(langkah==19){ selesai=true;langkah=0;
resetPin();noTone(buzzer);}
break;
//===============================================================================
case 3: //LAGU 24
if(langkah==0){ nadax(2,350);} //2
else if(langkah==1){ nadax(3,350);} //3
else if(langkah==2){ nadax(4,450);} //4
else if(langkah==3){ nadax(3,350);} //3
else if(langkah==4){ nadax(4,350);} //4
else if(langkah==5){ nadax(5,350);} //5
else if(langkah==6){ nadax(4,350);} //4
else if(langkah==7){ nadax(3,350);} //3
else if(langkah==8){ nadax(4,450);} //4
else if(langkah==9){ nadax(3,350);} //3
else if(langkah==10){ nadax(2,350);} //2
else if(langkah==11){ nadax(4,250);} //4
else if(langkah==12){ nadax(4,350);} //4
else if(langkah==13){ nadax(5,350);} //5
else if(langkah==14){ nadax(4,650);} //6
else if(langkah==15){ nadax(5,250);} //5
else if(langkah==16){ nadax(4,250);} //6
else if(langkah==17){ nadax(4,250);} //4
else if(langkah==18){ nadax(5,250);} //5
else if(langkah==19){ nadax(4,250);} //4
else if(langkah==20){ nadax(5,250);} //5
else if(langkah==21){ nadax(4,250);} //4
else if(langkah==22){ nadax(3,250);} //3
else if(langkah==23){ selesai=true;langkah=0;
resetPin();noTone(buzzer);}
break;
//===============================================================================
case 4: //LAGU 25
if(langkah==0){ nadax(3,170);} //3
else if(langkah==1){ nadax(3,170);} //3
else if(langkah==2){ nadax(3,170);} //3
else if(langkah==3){ nadax(2,350);} //2
else if(langkah==4){ nadax(1,350);} //1
else if(langkah==5){ nadax(2,350);} //2
else if(langkah==6){ nadax(1,350);} //1
else if(langkah==7){ nadax(3,600);} //3
else if(langkah==8){ nadax(3,170);} //3
else if(langkah==9){ nadax(3,250);} //3
else if(langkah==10){ nadax(3,250);} //3
else if(langkah==11){ nadax(2,350);} //2
else if(langkah==12){ nadax(1,350);} //1
else if(langkah==13){ nadax(2,350);} //2
else if(langkah==14){ nadax(1,350);} //1
else if(langkah==15){ nadax(2,600);} //2
else if(langkah==16){ nadax(2,170);} //2
else if(langkah==17){ nadax(2,170);} //2
else if(langkah==18){ nadax(2,170);} //2
else if(langkah==19){ nadax(1,350);} //1
else if(langkah==20){ nadax(2,350);} //2
else if(langkah==21){ nadax(3,250);} //3
else if(langkah==22){ nadax(5,250);} //5
else if(langkah==23){ nadax(2,350);} //2
else if(langkah==24){ nadax(2,170);} //2
else if(langkah==25){ nadax(2,170);} //2
else if(langkah==26){ nadax(2,170);} //2
else if(langkah==27){ nadax(1,350);} //1
else if(langkah==28){ nadax(2,350);} //2
else if(langkah==29){ nadax(3,250);} //3
else if(langkah==30){ nadax(5,250);} //5
else if(langkah==31){ nadax(2,350);} //2
else if(langkah==32){ nadax(2,170);} //2
else if(langkah==33){ nadax(2,170);} //2
else if(langkah==34){ nadax(3,170);} //3
else if(langkah==35){ nadax(5,250);} //5
else if(langkah==36){ nadax(3,250);} //3
else if(langkah==37){ nadax(2,250);} //2
else if(langkah==38){ nadax(1,250);} //1
else if(langkah==39){ nadax(3,350);} //3
else if(langkah==40){ selesai=true;langkah=0;
resetPin();noTone(buzzer);}
break;
//===============================================================================
case 5: //LAGU 26
if(langkah==0){ nadax(3,200);} //3
else if(langkah==1){ nadax(3,200);} //3
else if(langkah==2){ nadax(3,200);} //3
else if(langkah==3){ nadax(4,200);} //4
else if(langkah==4){ nadax(5,300);} //5
else if(langkah==5){ nadax(4,250);} //4
else if(langkah==6){ nadax(3,200);} //3
else if(langkah==7){ nadax(3,200);} //3
else if(langkah==8){ nadax(3,200);} //3
else if(langkah==9){ nadax(4,250);} //4
else if(langkah==10){ nadax(5,300);} //5
else if(langkah==11){ nadax(4,250);} //4
else if(langkah==12){ nadax(3,200);} //3
else if(langkah==13){ nadax(3,200);} //3
else if(langkah==14){ nadax(3,200);} //3
else if(langkah==15){ nadax(4,250);} //4
else if(langkah==16){ nadax(5,400);} //5
else if(langkah==17){ nadax(6,400);} //6
else if(langkah==18){ nadax(4,250);} //4
else if(langkah==19){ nadax(3,250);} //3
else if(langkah==20){ nadax(2,250);} //2
else if(langkah==21){ nadax(3,250);} //3
else if(langkah==22){ nadax(4,450);} //4
else if(langkah==23){ selesai=true;langkah=0;
resetPin();noTone(buzzer);}
break;
//===============================================================================
}
}
//===============================================================================
//================================
void resetPin(){
for(int g=0;g<=5;g++){//nanti kalau selesai 1 ganti 0
digitalWrite(kumPin[g],LOW);}}
void nadax(byte nada_nya,int lama_nya){
nada_nya=nada_nya-1;
//Serial.println("bejalan");
// if(nada_nya!=0){
resetPin();digitalWrite(kumPin[nada_nya],HIGH);//}
tone(buzzer,nadaNada[nada_nya]);j=lama_nya;}
void setup()
{
//setelah selesai debug ini hapus
//Serial.begin(9600);
// Serial.println("debug");
//====sevensegment=====
pinMode(pinLac,OUTPUT);
pinMode(pinData,OUTPUT);
pinMode(pinKlok,OUTPUT);
pinMode (pinDo,OUTPUT);
pinMode (pinRe,OUTPUT);
pinMode (pinMi,OUTPUT);
pinMode (pinFa,OUTPUT);
pinMode (pinSol,OUTPUT);
pinMode (pinLa,OUTPUT);
BSTART.setDebounceTime(50);
switchUpPin.setDebounceTime(50);
switchDownPin.setDebounceTime(50);
B_DO.setDebounceTime(50);
B_RE.setDebounceTime(50);
B_MI.setDebounceTime(50);
B_FA.setDebounceTime(50);
B_SOL.setDebounceTime(50);
B_LA.setDebounceTime(50);
}
void loop() {
B_DO.loop();
B_RE.loop();
B_MI.loop();
B_FA.loop();
B_SOL.loop();
B_LA.loop();
//================================================
BSTART.loop();
switchUpPin.loop();
switchDownPin.loop();
if(mode==piano){
if(B_DO.isPressed()){
digitalWrite(pinDo,on);
tone (buzzer,ndo,10);} //1 DO
else if(B_DO.isReleased()){
digitalWrite(pinDo,off);
noTone(buzzer);}
if(B_RE.isPressed()){
digitalWrite(pinRe,on);
tone (buzzer,nre,10);} //1 DO
else if(B_RE.isReleased()){
digitalWrite(pinRe,off);
noTone(buzzer);}
if(B_MI.isPressed()){
digitalWrite(pinMi,on);
tone(buzzer,nmi);} //1 DO
else if(B_MI.isReleased()){
noTone(buzzer);
digitalWrite(pinMi,off);}
if(B_FA.isPressed()){
digitalWrite(pinFa,on); //1 DO
tone(buzzer,nfa);}
else if(B_FA.isReleased()){
noTone(buzzer);
digitalWrite(pinFa,off);}
if(B_SOL.isPressed()){
tone(buzzer,nsol);
digitalWrite(pinSol,on);} //1 DO
else if(B_SOL.isReleased()){
noTone(buzzer);
digitalWrite(pinSol,off);}
if(B_LA.isPressed()){
tone(buzzer,nla);
digitalWrite(pinLa,on);} //1 DO
else if(B_LA.isReleased()){
noTone(buzzer);
digitalWrite(pinLa,off);}
if((millis()-penyesuaian5)>=jedanya){
penyesuaian5=millis();
salurkan(i);
i++;
if(i>3){
i=0;}
}
}
if(((millis()-penyesuaian2)>=100)&&(usai==false)
&&(mulaiHitung==true)){
penyesuaian2=millis();
hitung++;
//Serial.println(hitung);
}
if(BSTART.isPressed()){
if(hitung>=10){
mulaiHitung=false;
//Serial.println("lama");
// Serial.println(hitung);
pendek=false;
usai=true;//supaya sekalisaja eksekusinya if hitung>=10
hitung=0;}
else{
pendek=true;
mulaiHitung=true;}
}
else if(BSTART.isReleased()){
//kalang=false;
usai=true;
// Serial.println("hitung");
// Serial.println(hitung);
//Serial.println("reles");
if((hitung<3)&&(mode==mus)){//tekan sebentar
// Serial.println("mainkan");
val1=counter;//baru
//val1=1;
salurkan(val1);
j=0;
langkah=0;
selesai=false;//menmulai mainkan nada
}
else if (hitung>=3){//ditekan agak lama
mode=!mode;
//Serial.println("lama");
if(mode==piano){
simpananMode=mode;}
if(mode==mus){
simpananMode=mode;
salurkan(val1);}
noTone(buzzer);
selesai=true;
}
hitung=0;
mulaiHitung=false;
usai=false;
}
if(((millis()-penyesuaian)>=j)&&(selesai==false)&&
(mode==mus)){
// Serial.println(".");
penyesuaian=millis();
//TERBARU===================
if(jalankan==false){
jalankan=true;}
else if(jalankan==true){
j=jedaAntarNada;
noTone(buzzer);
resetPin();
jalankan=false;}
if(jalankan==true){
nadanya();}//kumpulan nada disini
if((jalankan==false)&&(selesai==false)){
langkah++;}
if(selesai==true){
jalankan=false;}
//AKHIR TERBARU============
//PROGRAM LAMA-----------
// nadanya();//Kumpulan nada disini
// if(selesai==false){//TERDAHULU
// langkah++;}
}
if(mode==mus){
if((switchUpPin.isPressed())&&(sekali==false)){
if(counter == 5)
{
counter = 0;
}
counter++;
//Serial.println(counter);
salurkan(counter);
sekali=true;}
else{
sekali=false;}
if((switchDownPin.isPressed())&&(sekali1==false)){
if(counter == 1)
{
counter = 6;
}
counter--;
// Serial.println(counter);
salurkan(counter);
sekali1=true;}
else{
sekali1=false;}
}
//=============================================================
}//akhir void loop