Se me queda "colgado" dentro de una función
Publicado por Marcelo (2 intervenciones) el 12/10/2020 01:50:45
Hice un código que lee un pulsador con antirrebote, en donde si el botón es pulsado 2 veces en menos de 2,5 segundos, se enciende un led y suena un buzzer 3 veces, pero si en esos 2,5 segundos solo es pulsado una vez y luego de esto pasan 2,5 segundos más sin ningún nuevo pulsado, todo vuelve a cero.
Es ahí donde aparece mi problema se queda en un bucle infinito ejecutando la función: "void borrado ()".
No se como hacer para que vuelva a ejecutarse el void loop.
Gracias
Es ahí donde aparece mi problema se queda en un bucle infinito ejecutando la función: "void borrado ()".
No se como hacer para que vuelva a ejecutarse el void loop.
Gracias
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
const int pulsador = 2;
const int led = 13;
const int buzz=5;
int lectura = 0, lecturaAnterior = 0;
const int tiemposis = 2500;
const int tiempoborrado = 5000;
unsigned long disparo =0;
unsigned long flancoSubida = 0;
int tiempoAntirebote = 50, contador = 0;
void setup() {
pinMode(pulsador, INPUT);
pinMode(led, OUTPUT);
Serial.begin (9600);
}
/*void(* resetFunc) (void) = 0;*/
void loop() {
lectura = digitalRead(pulsador);
if (lectura == HIGH && lecturaAnterior == LOW && (millis() - flancoSubida) > tiempoAntirebote ){
disparo = millis ();
contador++;
Serial.println (contador);
if (contador == 2 && (millis() - disparo) < tiemposis){
digitalWrite (led,1);
delay (30);
tone (buzz,2000);
delay (30);
digitalWrite (led,0);
delay (30);
noTone (buzz);
delay (30);
digitalWrite (led,1);
delay (30);
tone (buzz,1000);
delay (30);
digitalWrite (led,0);
delay (30);
noTone (buzz);
delay (30);
digitalWrite (led,1);
delay (30);
tone (buzz,2000);
delay (30);
digitalWrite (led,0);
delay (30);
noTone (buzz);
delay (30);
contador = 0;
}
flancoSubida = millis();
}
if (contador < 2 && (millis() - disparo) > tiempoborrado){
borrado ();
}
lecturaAnterior = lectura;
}
void borrado (){
contador = 0;
disparo = 0;
lectura = 0;
lecturaAnterior = 0;
Serial.println ("Contador borrado");
Serial.println ("Else activado");
}
Valora esta pregunta


0