/****************************************************
TinyTone for ATtiny85 
Basé sur le programme original de David Johnson-Davies:
http://www.technoblogy.com/show?KVO

Plus de détails:
http://electroniqueamateur.blogspot.com/2018/02/jouer-une-melodie-avec-lattiny85.html

*****************************************************/

// Notes
const int Note_C  = 239;
const int Note_CS = 225;
const int Note_D  = 213;
const int Note_DS = 201;
const int Note_E  = 190;
const int Note_F  = 179;
const int Note_FS = 169;
const int Note_G  = 159;
const int Note_GS = 150;
const int Note_A  = 142;
const int Note_AS = 134;
const int Note_B  = 127;

int Speaker = 1;

void setup()
{
  pinMode(Speaker, OUTPUT);
}

void loop()
{
  playTune();
  delay(1000);
}

void TinyTone(unsigned char divisor, unsigned char octave, unsigned long duration)
{
  TCCR1 = 0x90 | (8 - octave); // for 1MHz clock
  // TCCR1 = 0x90 | (11-octave); // for 8MHz clock
  OCR1C = divisor - 1;       // set the OCR
  delay(duration);
  TCCR1 = 0x90;              // stop the counter
  delay(10); // pour la séparation des notes identiques successives
}

// Mélodie (À la claire fontaine)
void playTune(void)
{
  //TinyTone (note, octave, durée);
  TinyTone(Note_C, 4, 800);
  TinyTone(Note_C, 4, 400);
  TinyTone(Note_E, 4, 400);
  TinyTone(Note_E, 4, 400);
  TinyTone(Note_D, 4, 400);
  TinyTone(Note_E, 4, 400);
  TinyTone(Note_D, 4, 400);
  TinyTone(Note_C, 4, 800);
  TinyTone(Note_C, 4, 400);
  TinyTone(Note_E, 4, 400);
  TinyTone(Note_E, 4, 400);
  TinyTone(Note_D, 4, 400);
  TinyTone(Note_E, 4, 800);
  TinyTone(Note_E, 4, 800);
  TinyTone(Note_E, 4, 400);
  TinyTone(Note_D, 4, 400);
  TinyTone(Note_C, 4, 400);
  TinyTone(Note_E, 4, 400);
  TinyTone(Note_G, 4, 400);
  TinyTone(Note_E, 4, 400);
  TinyTone(Note_G, 4, 800);
  TinyTone(Note_G, 4, 400);
  TinyTone(Note_E, 4, 400);
  TinyTone(Note_C, 4, 400);
  TinyTone(Note_E, 4, 400);
  TinyTone(Note_D, 4, 800);
  TinyTone(Note_C, 4, 800);
  TinyTone(Note_C, 4, 400);
  TinyTone(Note_E, 4, 400);
  TinyTone(Note_E, 4, 400);
  TinyTone(Note_D, 4, 200);
  TinyTone(Note_C, 4, 200);
  TinyTone(Note_E, 4, 400);
  TinyTone(Note_C, 4, 400);
  TinyTone(Note_E, 4, 800);
  TinyTone(Note_E, 4, 400);
  TinyTone(Note_D, 4, 200);
  TinyTone(Note_C, 4, 200);
  TinyTone(Note_E, 4, 400);
  TinyTone(Note_D, 4, 400);
  TinyTone(Note_C, 4, 800);
}