#define ledPin 13 // the pin that the LED is attached to int incomingByte; // a variable to read incoming serial data into int speakerOut = 9; int DEBUG = 0; void setup() { // initialize serial communication: Serial.begin(9600); // initialize the LED pin as an output: pinMode(ledPin, OUTPUT); pinMode(speakerOut, OUTPUT); if (DEBUG) { Serial.begin(9600); // Set serial out if we want debugging } } #define do_ 3830 // 261 Hz #define re 3400 // 294 Hz #define mi 3038 // 329 Hz #define fa 2864 // 349 Hz #define sol 2550 // 392 Hz #define la 2272 // 440 Hz #define si 2028 // 493 Hz #define DO 1912 // 523 Hz #define P 200 #define I 300 #define U 400 #define R 0 int melody[] = {P, I, U, P, I, U, P, I, U, P, I, U}; int beats[] = {4, 8, 4, 16, 4, 8, 4, 8, 4, 16, 4, 8}; //int melody[] = { sol, sol, DO, DO, la, sol, si, si, la, sol, si, si, la, sol, DO, mi, mi, sol, mi, sol, mi, re, re, fa, fa, mi, mi, re, re, do_}; //int beats[] = { 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 64, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32 }; int MAX_COUNT = sizeof(melody) / 2; // Melody length, for looping. long tempo = 10000; int pause = 1000; int rest_count = 100; int tone = 0; int beat = 0; long duration = 0; void playTone() { long elapsed_time = 0; if (tone > 0) { while (elapsed_time < duration) { digitalWrite(speakerOut,HIGH); delayMicroseconds(tone / 2); digitalWrite(speakerOut, LOW); delayMicroseconds(tone / 2); elapsed_time += (tone); } } else { // Rest beat; loop times delay for (int j = 0; j < rest_count; j++) { // See NOTE on rest_count delayMicroseconds(duration); } } } void loop() { // see if there's incoming serial data: if (Serial.available() > 0) { // read the oldest byte in the serial buffer: incomingByte = Serial.read(); // if it's a capital H (ASCII 72), turn on the LED: if (incomingByte == 'H') { //toca a melodia digitalWrite(ledPin, HIGH); delay(110); digitalWrite(ledPin, LOW); delay(40); digitalWrite(ledPin, HIGH); delay(110); digitalWrite(ledPin, LOW); delay(80); digitalWrite(ledPin, HIGH); delay(200); digitalWrite(ledPin, LOW); for (int i=0; i