2 분 소요

어제에 이어 업그레이드..

serial로 신호가 오면 학교종종 땡땡땡을 연주하도록 하였고

각 음계에 맞춰서 LED도 나오도록 구현하였음.

회로도

image

Source code

#define DO3 7645
#define RE3 6811
#define MI3 6068
#define PA3 5727
#define SOL3 5102
#define RA3 4545
#define SI3 4050
#define DO4 3822
#define RE4 3405
#define MI4 3034
#define PA4 2863
#define SOL4 2551
#define RA4 2273
#define SI4 2025
#define DO5 1910
#define RE5 1703
#define MI5 1517
#define PA5 1432
#define SOL5 1276
#define RA5 1136
#define SI5 1012



void LED_Control(int OnOff)
{
  digitalWrite(2,OnOff);
  digitalWrite(3,OnOff);
  digitalWrite(4,OnOff);
  digitalWrite(5,OnOff);
  digitalWrite(6,OnOff);
  digitalWrite(7,OnOff);
  digitalWrite(8,OnOff);
}

void LED_Control_SCALE(int SCALE)
{
  if(SCALE == DO4)
  {
    digitalWrite(2, 1);
  }
  if(SCALE == RE4)
  {
      digitalWrite(2,1);
      digitalWrite(3,1);      
  }
  if(SCALE == MI4)
  {
      digitalWrite(2,1);
      digitalWrite(3,1);      
      digitalWrite(4,1);      
  }  
  if(SCALE == PA4)
  {
      digitalWrite(2,1);
      digitalWrite(3,1);      
      digitalWrite(4,1);      
      digitalWrite(5,1);      
  }  
  if(SCALE == SOL4)
  {
      digitalWrite(2,1);
      digitalWrite(3,1);      
      digitalWrite(4,1);      
      digitalWrite(5,1);      
      digitalWrite(6,1);      
  }  
  if(SCALE == RA4)
  {
      digitalWrite(2,1);
      digitalWrite(3,1);      
      digitalWrite(4,1);      
      digitalWrite(5,1);      
      digitalWrite(6,1);      
      digitalWrite(7,1);      
  }  
  if(SCALE == SI4)
  {
      digitalWrite(2,1);
      digitalWrite(3,1);      
      digitalWrite(4,1);      
      digitalWrite(5,1);      
      digitalWrite(6,1);      
      digitalWrite(7,1);      
      digitalWrite(8,1);      
  }  
}
void play_music(int SCALE, int duration)
{
  LED_Control_SCALE(SCALE);
  for(long i = 0; i<1000000; i=i+SCALE)
  {
      digitalWrite(13,1);
      delayMicroseconds(SCALE/2);
      digitalWrite(13,0);
      delayMicroseconds(SCALE/2);
  }
  delay(duration);
  LED_Control(0);
}

void school_bell(int tempo)
{
   play_music(SOL4, 50*tempo);
   play_music(SOL4, 50*tempo);
   play_music(RA4, 50*tempo);
   play_music(RA4, 50*tempo);
   play_music(SOL4, 50*tempo);
   play_music(SOL4, 50*tempo);
   play_music(MI4, 50*tempo);
   play_music(SOL4, 50*tempo);
   play_music(SOL4, 50*tempo);
   play_music(MI4, 50*tempo);
   play_music(MI4, 50*tempo);
   play_music(RE4, 100*tempo);

   play_music(SOL4, 50*tempo);
   play_music(SOL4, 50*tempo);
   play_music(RA4, 50*tempo);
   play_music(RA4, 50*tempo);
   play_music(SOL4, 50*tempo);
   play_music(SOL4, 50*tempo);
   play_music(MI4, 50*tempo);
   play_music(SOL4, 50*tempo);
   play_music(MI4, 50*tempo);
   play_music(RE4, 50*tempo);
   play_music(MI4, 50*tempo);
   play_music(DO4, 200*tempo);
   
   delay(10000);
}

void setup()
{
  //GPIO 2~8 -> LED control
  pinMode(2, OUTPUT);
  pinMode(3, OUTPUT);
  pinMode(4, OUTPUT);
  pinMode(5, OUTPUT);
  pinMode(6, OUTPUT);
  pinMode(7, OUTPUT);
  pinMode(8, OUTPUT);
                        
  //GPIO 13 -> PIEZO control
  pinMode(13, OUTPUT);
  
  Serial.begin(9600);
}


void loop(){
//  school_bell(1);  
 if(Serial.available())
 {
   char ch = Serial.read();
   if( ch == ‘a’)
   {
       Serial.print(“School bell start \n”);
       school_bell(1);
   }
   if(ch == ‘b’)
   {
       Serial.print(“LED Turn Off\n”);
   }
 }

}

\