int led = 2;
int boton = 7;
//MOTOR DOS
int enable1 = 4;
int input1 = 3;
int input2= A5;
//MOTOR UNO
int enable2 = 10;
int input3 = 9;
int input4 = 6;
unsigned long ultimoTiempoRebote = 0;
unsigned long delayRebote = 30;
int ultimoEstadoBoton = HIGH; // El estado anterior del botón, HIGH porque usamos INPUT_PULLUP
int estadoBoton = HIGH; // El estado actual del botón
int estadoLed = LOW; // El estado del LED
//buzzer
int buzzer = A3;
// Notas musicales con nombres
#define DO8 4186 // C4
#define RE8 4698 // D4
#define MI8 5274 // E4
#define FA8 5587 // F4
#define SOL8 6271 // G4
#define LA8 7040 // A4
#define SI8 7902 // B4
#define DO5 523 // C5
#define RE5 587
#define MI5 659
#define SOL7 3135
#define LA7 3520
#define SI7 3951
// Notas graves (una octava menos)
#define DO3 131 // C3
#define RE3 147 // D3
#define MI3 165 // E3
#define FA3 175 // F3
#define SOL3 196 // G3
#define LA3 220 // A3
#define SI3 247 // B3
void setup() {
pinMode(led, OUTPUT);
pinMode(boton, INPUT_PULLUP);
//Logica motores
pinMode(input1, OUTPUT);
pinMode(input2, OUTPUT);
pinMode(input3, OUTPUT);
pinMode(input4, OUTPUT);
pinMode(enable1, OUTPUT);
pinMode(enable2, OUTPUT);
Serial.begin(9600);
Serial.println("Bienvenidos");
// Inicializamos el LED
digitalWrite(led, estadoLed);
}
void encenderLed(){
estadoLed = 1;
}
void apagarLed(){
estadoLed = 0;
}
void cambiarEstadoLed(){
digitalWrite(led, estadoLed);
if(estadoLed){
Serial.println("Led Encendido");
}else{
Serial.println("Led Apagado");
}
}
void avanzar() {
digitalWrite(input1, HIGH);
digitalWrite(input2, LOW);
digitalWrite(input3, HIGH);
digitalWrite(input4, LOW);
analogWrite(enable1, 255);
analogWrite(enable2, 255); // Velocidad máxima
}
void retroceder() {
digitalWrite(input1, LOW);
digitalWrite(input2, HIGH);
digitalWrite(input3, LOW);
digitalWrite(input4, HIGH);
analogWrite(enable1, 255);
analogWrite(enable2, 255);
}
void girarIzq() {
digitalWrite(input1, LOW);
digitalWrite(input2, HIGH);
digitalWrite(input3, HIGH);
digitalWrite(input4, LOW);
analogWrite(enable1, 255);
analogWrite(enable2, 255);
}
void girarDerecha() {
digitalWrite(input1, HIGH);
digitalWrite(input2, LOW);
digitalWrite(input3, LOW);
digitalWrite(input4, HIGH);
analogWrite(enable1, 255);
analogWrite(enable2, 255);
}
void stop() {
digitalWrite(input1, LOW);
digitalWrite(input2, LOW);
digitalWrite(input3, LOW);
digitalWrite(input4, LOW);
}
//La Cucaracha
void tocarLaCucaracha(){
tone(buzzer, SOL7); delay(300);
tone(buzzer, SOL7); delay(300):
tone(buzzer, SOL7); delay(300);
tone(buzzer, DO8); delay(450);
tone(buzzer, MI8); delay(600);
tone(buzzer, SOL7); delay(300);
tone(buzzer, SOL7); delay(300);
tone(buzzer, SOL7); delay(300);
tone(buzzer, DO8); delay(450);
tone(buzzer, MI8); delay(600);
tone(buzzer, DO8); delay(250);
tone(buzzer, DO8); delay(250);
tone(buzzer, SI7); delay(250);
tone(buzzer, SI7); delay(250);
tone(buzzer, LA7); delay(250);
tone(buzzer, LA7); delay(250);
tone(buzzer, SOL7); delay(750);
tone(buzzer, SOL7); delay(300);
tone(buzzer, SOL7); delay(300);
tone(buzzer, SOL7); delay(300);
tone(buzzer, SI7); delay(450);
tone(buzzer, RE8); delay(600);
tone(buzzer, SOL7); delay(300);
tone(buzzer, SOL7); delay(300);
tone(buzzer, SOL7); delay(300);
tone(buzzer, SI7); delay(450)
tone(buzzer, RE8); delay(600);
tone(buzzer, SOL8); delay(250);
tone(buzzer, LA8); delay(250);
tone(buzzer, SOL8); delay(250);
tone(buzzer, FA8); delay(250);
tone(buzzer, MI8); delay(250);
tone(buzzer, RE8); delay(250);
tone(buzzer, DO8); delay(250);
noTone(buzzer); delay(1000);
}
void loop() {
int lecturaBoton = digitalRead(boton); // Leemos el estado actual del botón
// Si la lectura ha cambiado (hubo un rebote o cambio real)
if (lecturaBoton != ultimoEstadoBoton) {
ultimoTiempoRebote = millis(); // Reiniciamos el temporizador de debounce
}
// Si ha pasado suficiente tiempo desde el último cambio
if ((millis() - ultimoTiempoRebote) > delayRebote) {
// Si el estado del botón ha cambiado
if (lecturaBoton != estadoBoton) {
estadoBoton = lecturaBoton;
// Solo actuamos cuando el botón se presiona (estado LOW)
if (estadoBoton == LOW) {
estadoLed = !estadoLed; // Cambiamos el estado del LED
cambiarEstadoLed(); // Actualizamos el LED
}
}
}
// Guardamos el estado actual como el último estado
ultimoEstadoBoton = lecturaBoton;
char respuesta = Serial.read();
switch(respuesta){
case 'p':
encenderLed();
cambiarEstadoLed();
break;
case 'b':
apagarLed();
cambiarEstadoLed();
break;
case 'w':
avanzar();
break;
case 's':
retroceder();
break;
case 'a':
girarIzq();
break;
case 'd':
girarDerecha();
break;
case 'x':
stop();
break;
case 'm':
tocarLaCucaracha();
}
}