-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathronda.c
100 lines (82 loc) · 1.9 KB
/
ronda.c
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
/* ------ Programa Ronda ------ */
/* Ana Carolina Requena Barbosa */
/* RA: 163755 */
#include "bico.h"
#define unit 40
void alarme();
void continue_a_nadar();
void pound_the_alarm();
void vira90();
void vira();
unsigned int timer;
void _start(void){
timer = 1;
// seta o primeiro alarme
alarme();
// comeca a andar
continue_a_nadar();
// registra uma callback para virar caso haja uma parede no caminho
register_proximity_callback(4, 1000, vira);
register_proximity_callback(3, 1000, vira);
while(1);
}
void alarme(){
unsigned int agora;
// adiciona o alarme para o tempo de agora mais a unidade de tempo
get_time(&agora);
add_alarm(pound_the_alarm, agora + timer * unit);
}
void continue_a_nadar(){
motor_cfg_t motor0, motor1;
motor0.id = 0;
motor0.speed = 25;
motor1.id = 1;
motor1.speed = 25;
set_motors_speed(&motor0, &motor1);
}
// executa o alarme
void pound_the_alarm(){
// vira o robo
vira90();
// incrementa o tempo para proximo deslocamento
timer++;
// se o timer terminar a ronda, reseta
if(timer > 50)
timer = 1;
// seta proximo alarme
alarme();
}
void vira90(){
unsigned int i, temp;
motor_cfg_t motor0, motor1;
motor0.id = 0;
motor0.speed = 0;
motor1.id = 1;
motor1.speed = 15;
set_motors_speed(&motor0, &motor1);
// espera ate que o robo vire 90 graus
get_time(&i);
get_time(&temp);
while (temp < i + 750)
get_time(&temp);
// apos virar, continua a andar
continue_a_nadar();
}
// vira caso tenha uma parede na frente
void vira(){
short unsigned int dist[16];
motor_cfg_t motor0, motor1;
motor0.id = 0;
motor0.speed = 0;
motor1.id = 1;
motor1.speed = 10;
set_motors_speed(&motor0, &motor1);
do {
dist[4] = read_sonar(4);
dist[3] = read_sonar(3);
} while((dist[4] < 400) && (dist[3] < 400));
motor0.speed = 0;
motor1.speed = 0;
set_motors_speed(&motor0, &motor1);
continue_a_nadar();
}