#include <ezBuzzer.h> // ezBuzzer library
// Definimos los pines donde tenemos conectadas las bobinas
#define IN1 4
#define IN2 5
#define IN3 6
#define IN4 7
const int BUZZER_PIN = 3;
bool motor = false;
int n = 0;
int stepperInterval = 500;
int stepperTimer = 0;
int pasoActual = 0;
ezBuzzer buzzer(BUZZER_PIN); // create ezBuzzer object that attach to a pin;
// notes in the melody:
int melody[] = {
NOTE_E5, NOTE_E5, NOTE_E5,
NOTE_E5, NOTE_E5, NOTE_E5,
NOTE_E5, NOTE_G5, NOTE_C5, NOTE_D5,
NOTE_E5,
NOTE_F5, NOTE_F5, NOTE_F5, NOTE_F5,
NOTE_F5, NOTE_E5, NOTE_E5, NOTE_E5, NOTE_E5,
NOTE_E5, NOTE_D5, NOTE_D5, NOTE_E5,
NOTE_D5, NOTE_G5
};
// note durations: 4 = quarter note, 8 = eighth note, etc, also called tempo:
int noteDurations[] = {
8, 8, 4,
8, 8, 4,
8, 8, 8, 8,
2,
8, 8, 8, 8,
8, 8, 8, 16, 16,
8, 8, 8, 8,
4, 4
};
// Secuencia de pasos (par máximo)
int paso [4][4] =
{
{1, 1, 0, 0},
{0, 1, 1, 0},
{0, 0, 1, 1},
{1, 0, 0, 1}
};
void setup()
{
Serial.begin(115200);
// Todos los pines en modo salida
pinMode(IN1, OUTPUT);
pinMode(IN2, OUTPUT);
pinMode(IN3, OUTPUT);
pinMode(IN4, OUTPUT);
pinMode(8, INPUT_PULLUP);
pinMode(9, INPUT_PULLUP);
}
void loop()
{
long time = millis();
buzzer.loop(); // MUST call the buzzer.loop() function in loop()
if (buzzer.getState() == BUZZER_IDLE) {
int length = sizeof(noteDurations) / sizeof(int);
buzzer.playMelody(melody, noteDurations, length); // playing
}
if(digitalRead(8)==LOW){
motor = true;
n = 100;
}
if(digitalRead(9) == LOW){
motor = true;
n = -100;
}
if(motor == true){
if(n > 0){
Serial.println(abs(time - stepperTimer));
if(abs(time - stepperTimer) > stepperInterval){
stepperTimer = time;
digitalWrite(IN1, paso[pasoActual][0]);
digitalWrite(IN2, paso[pasoActual][1]);
digitalWrite(IN3, paso[pasoActual][2]);
digitalWrite(IN4, paso[pasoActual][3]);
pasoActual++;
if(pasoActual == 4){
pasoActual = 0;
}
n--;
}
}else if(n<0){
Serial.println(abs(time - stepperTimer));
if(abs(time - stepperTimer) > stepperInterval){
stepperTimer = time;
digitalWrite(IN1, paso[pasoActual][3]);
digitalWrite(IN2, paso[pasoActual][2]);
digitalWrite(IN3, paso[pasoActual][1]);
digitalWrite(IN4, paso[pasoActual][0]);
pasoActual++;
if(pasoActual == 4){
pasoActual = 0;
}
n++;
}
}else{
motor = false;
}
}
}