-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathsumalam.ino
136 lines (103 loc) · 3.37 KB
/
sumalam.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
134
135
136
#include <SparkFun_TB6612.h>
#include <Wire.h>
#include <VL53L0X.h>
#define linha0 A0 //Definindo A0 como o sensor de cor da direita
#define linha1 A1 //Definindo A1 como o sensor de cor da esquerda
int vira = 0; //A variável "vira" será usada para escolher para qual lado o robo ira girar, depende de qual foi o último sensor que avistou o robo adversario
int viralinha = 0;
int valDIR = 0; // variavel do sensor de distancia da direita
int valESQ = 0; //variavel do sensor de distancia da esquerda
//pinos XSHUT dos sensorESQs são utilizados para poder definir diferentes endereços
#define tofDIR 7 //XSHUT tof1
#define tofESQ 13 //XSHUT tof2
//Definindo os enfereços de cada sensor
#define idsensorDIR 41
#define idsensorESQ 42
//definindos os pinos para controle da ponte h
#define AIN1 1
#define BIN1 4
#define AIN2 0
#define BIN2 5
#define PWMA 3
#define PWMB 6
#define STBY 2
// these constants are used to allow you to make your motor configuration
// line up with function names like forward. Value can be 1 or -1
const int offsetA = 1;
const int offsetB = 1;
//Criando um objeto para cada sensor
VL53L0X sensorDIR;
VL53L0X sensorESQ;
//criando um objeto para cada motor
Motor motorDIR = Motor(AIN1, AIN2, PWMA, offsetA, STBY);
Motor motorESQ = Motor(BIN1, BIN2, PWMB, offsetB, STBY);
void setup() {
pinMode(tofDIR, OUTPUT);
pinMode(tofESQ, OUTPUT);
Wire.begin();
//definindo endereço do Sensor1
sensorDIR.setAddress(idsensorDIR);
pinMode(tofDIR, INPUT);
delay(10); //Dando um tempo pra não zoar
sensorESQ.setAddress(idsensorESQ);
pinMode(tofESQ, INPUT);
delay(10);
//métodos da própria biblioteca utilizados para inicialização
sensorDIR.init();
sensorESQ.init();
sensorDIR.setTimeout(300);
sensorESQ.setTimeout(300);
sensorDIR.startContinuous();
sensorESQ.startContinuous();
delay(4000);
}
void loop() {
// valDIR = analogRead(linha0); // read the input pin
// valESQ = analogRead(linha1);
//-------------------------------------- LOGICA DE COMBATE -------------------------------------------------------//
//caso 1: os dois sensores de cor estando no preto//
//if (valDIR > 100 && valESQ > 100){
valDIR = sensorDIR.readRangeContinuousMillimeters();
valESQ = sensorESQ.readRangeContinuousMillimeters();
if (valDIR < 500 && valESQ < 500){
motorESQ.drive(200);
motorDIR.drive(200);
}
else if (valDIR > 500 && valESQ < 500){
motorESQ.drive(100);
motorDIR.drive(200);
vira = 1;
}
else if (valDIR < 500 && valESQ > 500){
motorESQ.drive(200);
motorDIR.drive(100);
vira = 0;
}
else if (valDIR > 500 && valESQ > 500 && vira == 0){
motorESQ.drive(110);
motorDIR.drive(-110);
}
else {
motorESQ.drive(-110);
motorDIR.drive(110);
}
// }
//caso 2: esquerda no branco //
//else if (valDIR > 100 && valESQ < 100){
// motorESQ.drive(-180);
// motorDIR.drive(-180);
// delay(400);
// motorESQ.drive(-100);
// motorDIR.drive(100);
// delay(350);
// }
//caso 3: direita no branco //
//else {
// motorESQ.drive(-180);
// motorDIR.drive(-180);
// delay(300);
// motorESQ.drive(100);
// motorDIR.drive(-100);
// delay(300);
// }
}