-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathkit_evasor.cpp
95 lines (82 loc) · 2.17 KB
/
kit_evasor.cpp
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
/*
* kit Evasor de obstáculos 2.0
* Taloselectronics
* soporte@taloselectronics.com Rafael Lozano Rolón
*/
#include <Kit_evasor.h>
void Kit_evasor::modo_evasor(int Distancia, uint8_t velocidad)
{
float Distancia_izq, Distancia_der;
Motores_mv(velocidad, velocidad);
if (obtener_distancia() <= Distancia)
{
Motores_mv(-50, -50);
delay(250);
Motores_mv(0, 0);
//Barrido de servo de derecha a izquierda
for (size_t i = 90; i < Angulo_max; i++)
{
servo_1.write(i);
delay(5);
}
delay(300);
Distancia_izq = obtener_distancia();
for (size_t i = Angulo_max; i > Angulo_min; i--)
{
servo_1.write(i);
delay(5);
}
delay(300);
Distancia_der = obtener_distancia();
for (size_t i = Angulo_min; i < 90; i++)
{
servo_1.write(i);
delay(5);
}
delay(250);
if (Distancia_izq < Distancia_der)
{
//Obstaculo detectado en el lado izquierdo, debe girar a la derecha
Motores_mv(velocidad_giro, -velocidad_giro);
delay(500);
Motores_mv(velocidad, velocidad);
}
else
{
//Obstaculo detectado en el lado derecho por lo que debe girar a la izquierda
Motores_mv(-velocidad_giro, velocidad_giro);
delay(500);
Motores_mv(velocidad, velocidad);
}
}
}
float Kit_evasor::obtener_distancia()
{
long lduration;
long ldistance;
//Se manda un pulso por el pin Trigger
digitalWrite(Trigger, LOW);
delayMicroseconds(2);
digitalWrite(Trigger, HIGH);
delayMicroseconds(10);
digitalWrite(Trigger, LOW);
//Se mide cuanto tiempo tardo en us
//Ecuación d = l_distancia/2 * velocidad cm/us
lduration = pulseIn(Echo, HIGH);
ldistance = (lduration / 2) / 29.1;
return ldistance;
}
void Kit_evasor::init()
{
Motores_init();
pinMode(Trigger, OUTPUT);
pinMode(Echo, INPUT);
servo_1.attach(Servo_pin);
servo_1.write(90);
}
Kit_evasor::Kit_evasor() : Robot::Robot()
{
}
Kit_evasor::~Kit_evasor()
{
}