Hola, estoy haciendo un programa sobre una caja musical en Arduino Uno
Uso un sensor HC-SR04 a una distancia menor a 30cm esto activará mi pista y encenderá mi servomotor que empezará en 90° y después avanzará de 2° en 2° hasta llegar a 0°, de 0° irá aumentando también de 2° en 2° hasta llegar a 180°, quedando en bucle, todo de forma individual ya funciona
Mi problema es que a la hora de juntar los programas, sólo funciona el sensor y la pista, pero mi servomotor se queda atascado sin realizar nada, ya hice una prueba de forma individual y si funciona mi servomotor, sólo es cuando uno el programa
Si alguien puedes ayudarme a corregir este programa se lo agradecería demasiado
Este es mi programa (la pista esta recortada porque es demasiado texto)
#include <Servo.h>
Servo servoMotor;
const int trigPin = 9;
const int echoPin = 10;
const int tonePin = 11;
const int servoPin = 6;
int angulo = 90;
bool objetoDetectado = false;
bool servoActivado = false;
unsigned long tiempoActivacion = 0;
void setup() {
servoMotor.attach(servoPin);
servoMotor.write(angulo);
delay(1000);
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
pinMode(tonePin, OUTPUT);
}
void loop() {
int distancia = medirDistancia();
if (distancia < 30 && !servoActivado) {
servoActivado = true;
objetoDetectado = true;
tiempoActivacion = millis();
PlayMusic();
girarServo();
}
if (servoActivado && millis() - tiempoActivacion > 96000) {
servoMotor.detach();
servoActivado = false;
}
delay(100);
}
int medirDistancia() {
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
long tiempo = pulseIn(echoPin, HIGH);
int distancia = tiempo * 0.034 / 2;
return distancia;
}
void PlayMusic() {
tone(tonePin, 493, 479.46380625);
delay(532.7375625);
delay(2.9761875);
tone(tonePin, 391, 158.03555625);
delay(175.5950625);
delay(2.9761875);
tone(tonePin, 440, 158.03555625);
delay(175.5950625);
delay(2.9761875);
tone(tonePin, 493, 479.46380625);
delay(532.7375625);
delay(2.9761875);
tone(tonePin, 440, 158.03555625);
delay(175.5950625);
delay(2.9761875);
tone(tonePin, 440, 318.74968125);
delay(354.1663125);
delay(2.9761875);
tone(tonePin, 440, 158.03555625);
delay(175.5950625);
delay(2.9761875);
}
void girarServo() {
servoMotor.attach(servoPin);
for (angulo = 90; angulo >= 0; angulo -= 2) {
servoMotor.write(angulo);
delay(15);
}
while (millis() - tiempoActivacion < 96000) {
for (angulo = 0; angulo <= 180; angulo += 2) {
servoMotor.write(angulo);
delay(15);
}
for (angulo = 180; angulo >= 0; angulo -= 2) {
servoMotor.write(angulo);
delay(15);
}
}
}