// Librerías a utilizar en el programa.
#include <LiquidCrystal.h>
// Objeto //.
LiquidCrystal lcd(13, 12,11, 10,9, 8);
#include <Servo.h>
Servo myservo;
int value;
double angle;
//Variables canciones
int blanca= 1600;
int negra= 800;
int corchea = 400;
int semicorchea = 200; // tiempo de 1/4 de la nota
int negraymedia = 1600; //tiempo de 1/8 de la nota
int redonda =2000;
int silencio=600;
int silenciomedio=200;
//Notas usadas para las canciones.
int regrave= 147;
int migrave= 165;
int fagrave= 175;
int solgrave= 196;//Cuerda SOL
int lagrave= 220;
int sigrave= 245;
int Do= 262;
int Re= 293;//Cuerda RE
int Mi=329;
int Fasostenido=370;
int Fa= 349;
int Sol= 391;
int SolSostenido= 415;
int La=440;// Cuerda LA
int LaSostenido= 494;
int Si=494;
int DoAlto=524;
int ReAlto=588;
int MiAlto=660;//Cuerda MI
int FaAlto=699;
int SolAlto= 784;
int LaAlto=880;
int SiAlto= 988;
int Silencio=0;
int Silenciomedio=0;
int MiBemol=312;
int MiAltoBemol=622;
int Sibemol=466;
int ReAltoBemol=554;
int Labemol=415;
//Pin donde van conactados los leds
int linea1 = 6;
int linea2 = 5;
//Pines del RGB
int r = 8;
int g = 10;
int b = 9;
int i;
//Pin del motor
const int pinmotor = 7;
//Pin buzzer
const int pinBuzzer = 4;
//Contador
int cont = 1;
const int boton2 = 3;
//Arrays de canciones
//by: Celeste Solano
int CCD[]= { negra, corchea, corchea, negra, corchea,
corchea,negraymedia, corchea, blanca,negra, corchea, corchea, negra,
corchea, corchea, negraymedia, corchea, blanca, blanca, negraymedia,
corchea, negra, corchea, corchea, corchea, corchea, corchea, negra,
corchea, corchea, corchea, corchea, corchea, negra, corchea, corchea,
corchea, corchea, corchea, corchea, negra,negraymedia, corchea, corchea,
corchea, negra, negraymedia, corchea, corchea, corchea, negra,
negraymedia, corchea, negraymedia, corchea, negraymedia, corchea,
corchea, corchea, negra, corchea, corchea, negra, corchea, corchea,
corchea, corchea, negra, corchea, corchea, corchea, corchea, corchea,
negra, corchea, corchea, corchea, corchea, corchea, negra, corchea,
corchea, corchea, corchea, corchea, corchea, blanca};
int CCN[]={ Fa, Fa, Fa, Fa, Mi, Fa, Sol, Mi, Do, Sol, Sol, La, Si, La,
Sol, La, Sol, Fa, Fa, Fa, La, DoAlto, DoAlto, ReAlto, DoAlto, Si, ReAlto,
DoAlto, DoAlto, ReAlto, DoAlto, ReAlto, MiAlto, FaAlto, La,
ReAlto,DoAlto, Si, La, Sol, Fa, La, Si, La, Sol, Fa, DoAlto, ReAlto,
DoAlto, Si, La, DoAlto, DoAlto, Si, Sol, DoAlto, Si, La, Sol, Fa, La,
Sol, Fa, La, Sol, Fa, La, DoAlto, DoAlto, ReAlto, DoAlto, Si, ReAlto,
DoAlto, DoAlto, ReAlto, DoAlto, ReAlto, MiAlto, FaAlto, La, ReAlto,
DoAlto, Si, La, Sol, Fa};
int FND[]={ corchea, negra, corchea, corchea, redonda, corchea, negra,
corchea, corchea, negraymedia, corchea, negra, corchea, corchea, corchea,
corchea, corchea, negra, corchea, corchea, redonda, negra, corchea,
negra, corchea, corchea, redonda, negra, corchea, negra, corchea,
corchea, redonda, negra, corchea, negra, corchea, corchea, negra,
corchea, negra, corchea, corchea, corchea, corchea, corchea, corchea,
negra, corchea, corchea, redonda, corchea, corchea, corchea, corchea,
negra, negra, corchea, corchea, corchea, negra, corchea, corchea,
corchea, negra, corchea, corchea, negra, corchea, corchea, corchea,
corchea, corchea, corchea, corchea, corchea, negra, negra, corchea,
corchea, corchea, corchea, corchea, corchea, corchea, negra, negra,
negra, corchea, corchea, semicorchea, blanca};
int FNN[]={ La, ReAlto, DoAlto, La, Sol, Sol, DoAlto, Si, DoAlto, La,
Fa, La, Si, Sol, Sol, La, Sol, Fa, Fa, Mi, Mi, Mi, Sol, DoAlto, Si,
DoAlto, La, La, La, ReAlto, DoAlto, La, Sol, Sol, Sol, DoAlto, Si,
DoAlto, La, Fa, La, La, Sol, Sol, Sol, Sol, Sol, Fa, Fa, Mi, Mi, MiAlto,
MiAlto, MiAlto, MiAlto, ReAlto, DoAlto, La, La, La, DoAlto, ReAlto,
ReAlto, ReAlto, ReAlto, DoAlto, La, La, Sol, Fa, Fa, Sol, MiAlto, MiAlto,
MiAlto, MiAlto, ReAlto, DoAlto, La, La, La, La, ReAlto, DoAlto, Si, Si,
DoAlto, ReAlto, ReAlto, MiAlto, ReAlto, DoAlto};
int WMD[]={ negra, negra, negra, negra, negra, negra, negra, negra,
negra, negra, negra, negra, corchea, corchea, negra, negra, negra, negra,
negra, negra, corchea, corchea, corchea, corchea, negra, negra, negra,
negra, corchea, corchea, corchea, corchea, negra, negra, negra, negra,
corchea, corchea, corchea, corchea, negra, negra, corchea, corchea,
negra, negra, negra};
int WMN[]={ Fa, Sol, Fa, Mi, Re, La, Si, La, Sol, ReAlto, Re, Re, Re,
Re, Mi, La, Fa, Sol, Re, Sol, Sol, La, Sol, Fa, Mi, Mi, Mi, La, La, Si,
La, Sol, Fa, Re, Re, Si, Si, DoAlto, Si, La, Sol, Mi, Re, Re, Mi, La,
Fa};
//Array de leds
int
orilla[]={1,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1
,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,
0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,1};
int centro [] =
{1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,
1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1
,0,1,0,1,0,1,0,1,0,1,0,1};
int moto []
={150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150
,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,
150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,1
50,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,15
0,150,150,150,150,150,150,150,150,150,150,150,150,150};
int ser[] =
{10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
10,10,10,10,10,10,10,10,10,10,10,10};
void setup() {
[Link](16, 2);
[Link]();
// Inicialización del puerto serial.
[Link](9600);
// Declarar pines de leds
pinMode(pinBuzzer, OUTPUT);
pinMode(linea1, OUTPUT);
pinMode(linea2, OUTPUT);
pinMode(r, OUTPUT);
pinMode(g, OUTPUT);
pinMode(b, OUTPUT);
pinMode(pinmotor,OUTPUT);
//Servo
[Link](9);
//Funcion del RGB
void rgb(){
analogWrite(r, 202);
analogWrite(g, 0);
analogWrite(b, 60);
delay(1000); // Wait for 1000 millisecond(s)
analogWrite(r, 0);
analogWrite(g, 0);
analogWrite(b, 153);
delay(1000); // Wait for 1000 millisecond(s)
analogWrite(r, 76);
analogWrite(g, 153);
analogWrite(b, 0);
delay(1000); // Wait for 1000 millisecond(s)
}
void campana(){
[Link]();
[Link](" Camapana sobre");
[Link](0,1);
[Link](" campana");
for (int i= 0; i<= 85; i++){
tone(pinBuzzer,CCN[i]);
delay(CCD[i]);
digitalWrite(linea1,orilla[i]);
digitalWrite(linea2,centro[i]);
interrupcion();
analogWrite(pinmotor, moto[i]);
if (cont != 1){
break;
}
}
}
void FelizNavidad(){
[Link]();
[Link](" Feliz Navidad");
for (int i= 0; i<= 85; i++){
tone (pinBuzzer,FNN[i]);
delay(FND[i]);
digitalWrite(linea1,orilla[i]);
digitalWrite(linea2,centro[i]);
interrupcion();
analogWrite(pinmotor, moto[i]);
if (cont != 2){
break;
}
}
}
void WeWish()
{
[Link]();
[Link](" We wish you a");
[Link](0,1);
[Link]("merry Christmas");
for (int i= 0; i<= 47; i++){
tone(pinBuzzer,WMN[i]);
delay (WMD[i]);
digitalWrite(linea1,orilla[i]);
digitalWrite(linea2,centro[i]);
interrupcion();
analogWrite(pinmotor, moto[i]);
if (cont != 3){
break;
}
}
}
//Funcion de interrupción
int interrupcion(){
int est1 = digitalRead(3); //Leemos el estado digital del botón
3(avanzar a la derecha)
//Leemos el estado digital del botón1 (avanzar a la izquierda)
if (est1 == HIGH){ //Si el botón3 es presionado
if (cont == 4){ //se suma uno al contador1 pero si este es 3
se cambia el valor a 1
cont = 1;
}
else {
cont ++;
}
}
}
void serv(){
for (int pos = 0; pos <= 180; pos += 1) { // goes from 0 degrees to
180 degrees
// in steps of 1 degree
[Link](pos);; // tell servo to go to position in variable
'pos'
delay(15); // waits 15ms for the servo to reach
the position
}
for ( int pos = 180; pos >= 0; pos -= 1) { // goes from 180 degrees to
0 degrees
[Link](pos); // tell servo to go to position in variable 'pos'
delay(15); // waits 15ms for the servo to reach
the position
}
}
void loop() {
rgb();
interrupcion();
serv();
if (cont == 1){
[Link] ("Contador 2: " );
[Link](cont);
campana();
serv();
}
if (cont == 2){
[Link] ("Contador 2: " );
[Link](cont);
FelizNavidad();
serv();
}
if (cont == 3){
[Link] ("Contador 2: " );
[Link](cont);
WeWish();
serv();
}
}