-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathSumoTradicional.ino
133 lines (90 loc) · 2.34 KB
/
SumoTradicional.ino
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
// Código utilizado na competição de 2015
// Data da última mofificação: 15/08
#include <Ultrasonic.h>
#define SOM_FRENTE_ECHO 12
#define SOM_FRENTE_TRIG 13
#define SOM_DIREITA_ECHO 11
#define SOM_DIREITA_TRIG 10
#define MOTOR_E_F 3
#define MOTOR_E_T 2
#define MOTOR_D_F 4
#define MOTOR_D_T 5
Ultrasonic sensorSomFrente(SOM_FRENTE_TRIG, SOM_FRENTE_ECHO);
Ultrasonic sensorSomDireita(SOM_DIREITA_TRIG, SOM_DIREITA_ECHO);
boolean somFrente, somDireito;
void giraHorario() {
/* Motor esquerdo pra frente*/
digitalWrite(MOTOR_E_F, HIGH);
digitalWrite(MOTOR_E_T, LOW);
/* Motor direito pra tras */
digitalWrite(MOTOR_D_T, HIGH);
digitalWrite(MOTOR_D_F, LOW);
}
void giraAntiHorario() {
/* Motor esquerdo pra tras */
digitalWrite(MOTOR_E_T, HIGH);
digitalWrite(MOTOR_E_F, LOW);
/* Motor direito pra frente */
digitalWrite(MOTOR_D_F, HIGH);
digitalWrite(MOTOR_D_T, LOW);
}
void avanca() {
/* Motor esquerdo pra frente */
digitalWrite(MOTOR_E_F, HIGH);
digitalWrite(MOTOR_E_T, LOW);
/* Motor direito pra frente */
digitalWrite(MOTOR_D_F, HIGH);
digitalWrite(MOTOR_D_T, LOW);
delay(200);
}
void volta() {
/* Motor esquerdo pra tras */
digitalWrite(MOTOR_E_F, LOW);
digitalWrite(MOTOR_E_T, HIGH);
/* Motor direito tras */
digitalWrite(MOTOR_D_F, LOW);
digitalWrite(MOTOR_D_T, HIGH);
}
boolean testaSomDireito() {
boolean retorno = false;
int dist = sensorSomDireita.Ranging(CM);
/* Valor analogico do pino do sensor*/;
if(dist <= 60) {
while(!testaSomFrente())
giraHorario();
delay(10);
retorno = true;
}
return retorno;
}
boolean testaSomFrente() {
boolean retorno = false;
int dist = sensorSomFrente.Ranging(CM);
/* Valor analogico do pino do sensor*/;
if(dist <= 60) {
retorno = true;
}
return retorno;
}
void setup() {
pinMode(MOTOR_D_F, OUTPUT);
pinMode(MOTOR_D_T, OUTPUT);
pinMode(MOTOR_E_F, OUTPUT);
pinMode(MOTOR_E_T, OUTPUT);
pinMode(SOM_FRENTE_ECHO, INPUT);
pinMode(SOM_FRENTE_TRIG, OUTPUT);
pinMode(SOM_DIREITA_ECHO, INPUT);
pinMode(SOM_DIREITA_TRIG, OUTPUT);
}
void loop() {
somFrente = testaSomFrente();
if(somFrente) {
avanca();
delay(10);
}
else {
somDireito = testaSomDireito();
if(!somDireito)
giraAntiHorario();
}
}