Arduino - Ayuda con Servo.

 
Vista:

Ayuda con Servo.

Publicado por Luis Andres Garcia P (1 intervención) el 01/06/2020 03:58:05
Hola a todos. Estoy creando un Reloj con Servo, y tengo un problema que no puedo resolver.
Quiero implementar un botón que haga lo siguiente:
Iniciar el reloj, pausar el reloj, y si lo dejo apretado unos 3 segundos o más, reiniciar el reloj.
Intenté hacerlo lo mejor que pude, pero al presionar el botón el servo se vuelve loco. empieza a moverse como loco hasta que presiono el botón nuevamente para apgarlo.
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
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
#include <Servo.h>
 
Servo ServoReloj;
const int pinBoton = 7;
int PosSeg;
int ContMin = 0;
int EstadoBoton;
int EstadoBotonAnterior;
int pulsacion=0;
int Seg;
int periodotiempo;
unsigned long TiempoAhora = 0;
 
void setup()
{
 Serial.begin(9600);
 ServoReloj.attach(2);
 pinMode(pinBoton, INPUT_PULLUP);
 EstadoBotonAnterior = digitalRead(pinBoton);
}
 
 
void loop()
{
 
 
      TiempoAhora = millis();
        detecta_pulsacion();
        if (pulsacion>0)
        {
      if(millis() > TiempoAhora + periodotiempo)
    {
      TiempoAhora = millis();
       if (pulsacion>=0)
    {
    for(PosSeg = 1; PosSeg <= 180; PosSeg +=3)
      {
        ServoReloj.write(PosSeg);
          DEC_To_Second_Servo(PosSeg);
        detecta_pulsacion();
      }
         ContMin++;
        Serial.print("Minutos Totales:  ");
        Serial.println(ContMin);
    }
    }
   }
}
//----------------------------------------Convercion de Decimales a Segundos e imprimiendolos-----------------------------------------------//
int DEC_To_Second_Servo (int Second_Servo_Value1)
{
  int result;
    switch (Second_Servo_Value1)
           {
            case 1: Serial.println("1");break;
             case 4: Serial.println("2");break;
            case 7: Serial.println("3");break;
                case 10: Serial.println("4");break;
            case 13: Serial.println("5");break;
                case 16: Serial.println("6");break;
            case 19: Serial.println("7");break;
                case 22: Serial.println("8");break;
            case 25: Serial.println("9");break;
                case 28: Serial.println("10");break;
            case 31: Serial.println("11");break;
                case 34: Serial.println("12");break;
            case 37: Serial.println("13");break;
                case 40: Serial.println("14");break;
            case 43: Serial.println("15");break;
                case 46: Serial.println("16");break;
            case 49: Serial.println("17");break;
                case 52: Serial.println("18");break;
            case 55: Serial.println("19");break;
                case 58: Serial.println("20");break;
            case 61: Serial.println("21");break;
                case 64: Serial.println("22");break;
            case 67: Serial.println("23");break;
                case 70: Serial.println("24");break;
            case 73: Serial.println("25");break;
                case 76: Serial.println("26");break;
            case 79: Serial.println("27");break;
                case 82: Serial.println("28");break;
            case 85: Serial.println("29");break;
                case 88: Serial.println("30");break;
            case 91: Serial.println("31");break;
                case 94: Serial.println("32");break;
            case 97: Serial.println("33");break;
                case 100: Serial.println("34");break;
            case 103: Serial.println("35");break;
                case 106: Serial.println("36");break;
            case 109: Serial.println("37");break;
                case 112: Serial.println("38");break;
            case 115: Serial.println("39");break;
                case 118: Serial.println("40");break;
            case 121: Serial.println("41");break;
                case 124: Serial.println("42");break;
            case 127: Serial.println("43");break;
                case 130: Serial.println("44");break;
            case 133: Serial.println("45");break;
                case 136: Serial.println("46");break;
            case 139: Serial.println("47");break;
                case 142: Serial.println("48");break;
            case 145: Serial.println("49");break;
                case 148: Serial.println("50");break;
            case 151: Serial.println("51");break;
                case 154: Serial.println("52");break;
            case 157: Serial.println("53");break;
                case 160: Serial.println("54");break;
            case 163: Serial.println("55");break;
                case 166: Serial.println("56");break;
            case 169: Serial.println("57");break;
                case 172: Serial.println("58");break;
            case 175: Serial.println("59");break;
 
            default : result = (1);
           }
           return result;
}
 
void detecta_pulsacion()
{
    EstadoBoton = digitalRead(pinBoton);
 
    if (EstadoBoton != EstadoBotonAnterior)
    {
      if (EstadoBoton == HIGH)
      {
        Serial.println("Nueva Pulsacion:  ");
        pulsacion++;
        Serial.println(pulsacion);
        switch (pulsacion){
        case 1: periodotiempo=1000; break;
        case 2: periodotiempo=0; break;
        case 3: periodotiempo=1000; break;
 
        }
      }
    }
    EstadoBotonAnterior = EstadoBoton;
}

También noté que si presiono más de 3 veces el pulsador ya no pasa nada, yo creí que solamente se usarían esos 3 valores, pero se siguen incrementando...
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder