Hola, necesito que me echen una mano con un código que la verdad ya me tiene estresado, sobre todo porque no tengo una base sólida de programación y no sé mucho acerca de esto.
Estoy haciendo un proyecto y lo que necesito es que:
Lo que quiero que haga es que al presionar un push un motor stepper gire tantos grados y al terminar un buzzer pite 3 veces y una tira LED encienda y apague con desvanecimiento y que todo eso tenga un contador el cual se proyecte en un LCD que vaya aumentando cada vez que se cierre/oprima el push.
El problema es que el buzzer se queda pitando y la tira LED no es continua ya que enciende, se apaga, y tiene una demora para realizar nuevamente la acción. Además, el proceso inicia sin haber antes presionado el push, y al presionarlo no funciona ciertas veces.
¡Muchas gracias!
int LED = 6;
int Buzzer = 12;
int Push = 13;
int Retardo = 2;
int dato_rx = 0;
int Buttonstate = 0;
int ValorLED = 0; // Tira LED
int numero_pasos = 1600; // Grados a girar del motor
const int tiempo = 1500; // Tiempo activo del buzzer
const int tiempo2 = 1200; // Tiempo inactivo del buzzer
String leeCadena;
void setup(){
Serial.begin (9600);
pinMode (13, INPUT); // PUSH BUTTON - Entrada
pinMode (12, OUTPUT); // Buzzer - Salida
pinMode (11, OUTPUT);
pinMode (10, OUTPUT);
pinMode (9, OUTPUT);
pinMode (8, OUTPUT);
pinMode (6, OUTPUT); // Tira LED - Salida
}
void loop(){
Buttonstate = digitalRead(Push); // Lectura del PUSH
if (Buttonstate == HIGH) // Condición PUSH
{
digitalWrite (dato_rx, HIGH); // Activación
while (Serial.available())
{
delay (Retardo);
char c = Serial.read();
leeCadena += c;
}
if (leeCadena.length()>0)
{
dato_rx = leeCadena.toInt();
Serial.print (dato_rx);
Serial.println ("Grados");
delay (Retardo);
dato_rx = (dato_rx * 1.4222222222);
}
while (dato_rx>numero_pasos)
{
paso_izq();
numero_pasos = numero_pasos +1;
}
while (dato_rx<numero_pasos)
{
paso_der();
numero_pasos = numero_pasos -1;
}
leeCadena = "";
apagado();
digitalWrite (Buzzer, HIGH);
delay (tiempo);
digitalWrite (Buzzer, LOW);
delay (tiempo2);
digitalWrite (Buzzer, HIGH);
delay (tiempo);
digitalWrite (Buzzer, LOW);
delay (tiempo2);
for (int ValorLED = 0; ValorLED <= 255; ValorLED++)
{
analogWrite (LED, ValorLED);
delay (4);
}
for (int ValorLED = 255; ValorLED >= 0; ValorLED--)
{
analogWrite (LED, ValorLED);
delay (4);
}
}
}
void paso_der(){
digitalWrite (11, LOW);
digitalWrite (10, LOW);
digitalWrite (9, HIGH);
digitalWrite (8, HIGH);
delay (Retardo);
digitalWrite (11, LOW);
digitalWrite (10, HIGH);
digitalWrite (9, HIGH);
digitalWrite (8, LOW);
delay (Retardo);
digitalWrite (11, HIGH);
digitalWrite (10, HIGH);
digitalWrite (9, LOW);
digitalWrite (8, LOW);
delay (Retardo);
digitalWrite (11, HIGH);
digitalWrite (10, LOW);
digitalWrite (9, LOW);
digitalWrite (8, HIGH);
delay (Retardo);
}
void paso_izq(){
digitalWrite (11, HIGH);
digitalWrite (10, HIGH);
digitalWrite (9, LOW);
digitalWrite (8, LOW);
delay (Retardo);
digitalWrite (11, LOW);
digitalWrite (10, HIGH);
digitalWrite (9, HIGH);
digitalWrite (8, LOW);
delay (Retardo);
digitalWrite (11, LOW);
digitalWrite (10, LOW);
digitalWrite (9, HIGH);
digitalWrite (8, HIGH);
delay (Retardo);
digitalWrite (11, HIGH);
digitalWrite (10, LOW);
digitalWrite (9, LOW);
digitalWrite (8, HIGH);
delay (Retardo);
}
void apagado(){
digitalWrite(11, LOW);
digitalWrite(10, LOW);
digitalWrite(9, LOW);
digitalWrite(8, LOW);
}