#include <Arduino.h>
#include <LiquidCrystal_I2C.h>
#include <Wire.h>
#define I2C_SDA 8
#define I2C_SCL 9
#define pinSPK 40
// Frecuencia de cada nota
#define C 261
#define D 294
#define E 329
#define F 349
#define G 392
#define A 440
#define B 494
#define SILENCIO 0
int pinPUL[4] = {4,5,6,7};
int* cancion;
int j=0;
int i=0;
int segundos=0, minutos =0;
// Configuración de la pantalla LCD
LiquidCrystal_I2C miLCD(0x27, 16, 2);
unsigned long inicio_tiempo=0;
unsigned long tiempo_actual=0;
int maryHadALittleLamb[16] = { E, D, C, D, E, E, E, SILENCIO, D, D, D, SILENCIO, E, G, G, SILENCIO };
int twinkleTwinkle[16] = { C, C, G, G, A, A, G, SILENCIO, F, F, E, E, D, D, C, SILENCIO };
int jingleBells[16] = { E, E, E, SILENCIO, E, E, E, SILENCIO, E, G, C, D, E, SILENCIO, SILENCIO, SILENCIO };
int odeToJoy[16] = { E, E, F, G, G, F, E, D, C, C, D, E, E, D, D, SILENCIO };
void setup() {
Serial.begin(115200);
// Configuramos los pines de los pulsadores
for(i=0; i<4; i++){
pinMode(pinPUL[i], INPUT_PULLUP);
}
Wire.begin(I2C_SDA, I2C_SCL);
// Inicializamos el parlante en silencio
analogWrite(pinSPK, 0);
miLCD.init(); // Inicializamos el módulo LCD
miLCD.backlight();
miLCD.home(); // Limpiamos la pantalla y colocamos el cursor en (0, 0)
miLCD.print("Select a song.."); // Mostramos "HOLA
}
void actualizarTiempo() {
//inicia contador
tiempo_actual=millis();
if((tiempo_actual-inicio_tiempo)>60){//mayora a un minuto
minutos=(tiempo_actual-inicio_tiempo)/60000;
segundos=(-inicio_tiempo+tiempo_actual)/1000-minutos*60;
}else{
minutos=0;
segundos=(-inicio_tiempo+tiempo_actual)/1000;
}
//minutos=(-inicio_tiempo+tiempo_actual)/1000;
Serial.println(inicio_tiempo);
Serial.println(tiempo_actual);
Serial.println(minutos);
Serial.println(segundos);
miLCD.setCursor(0, 0);
miLCD.print("Play: ");
miLCD.print(minutos);
miLCD.print(":");
miLCD.print(segundos);
}
void reproducirCancion(int* cancion) {
// Actualizamos la frecuencia PWM
actualizarTiempo();
while(j<16){
if(cancion[j]==0){
analogWrite(pinSPK, 0);//para la nota 0
delay(400);
}else {
// Ciclo de trabajo de 50%
analogWriteFrequency(pinSPK, cancion[j]);//CONFIGURA LA FRECUENCIA
analogWrite(pinSPK, 128); //CONFIGURA EL CICLO DE TRABAJO al 50%-- 255/2
delay(200);
actualizarTiempo();//actualiuza contador una vez
analogWrite(pinSPK, 0);
delay(200);
}
j++;
}
j=0;
}
void seleccionarCancion(int indice) {
if(indice==0){//empieza en CERO la posicion de un vector
cancion=maryHadALittleLamb;
miLCD.clear();
miLCD.setCursor(1, 1);
miLCD.print("maryHadALittleLamb");
}else if(indice==1){
cancion=twinkleTwinkle;
miLCD.clear();
miLCD.setCursor(1, 1);
miLCD.print("twinkleTwinkle");
} else if(indice==2){
cancion=jingleBells;
miLCD.clear();
miLCD.setCursor(1, 1);
miLCD.print("jingleBells");
} else if(indice==3){
cancion=odeToJoy;
miLCD.clear();
miLCD.setCursor(1, 1);
miLCD.print("odeToJoy");
}
}
void loop() {
for(i=0; i<4; i++){//si se a precionado algun boton
// Si se presiona alguno de los siete pulsadores
if(digitalRead(pinPUL[i]) == LOW){
delay(5);
seleccionarCancion(i);
inicio_tiempo=millis();//toma tiempo
reproducirCancion(cancion);
miLCD.setCursor(0, 0);
miLCD.print("Play: ");
}
while(digitalRead(pinPUL[i])==LOW);
delay(5);
// Ciclo de trabajo 0% al soltar el pulsador
analogWrite(pinSPK, 0);
}
}