forked from IFRN-SC/robo_hardware
-
Notifications
You must be signed in to change notification settings - Fork 0
/
robo_hardware2.h
155 lines (111 loc) · 4.97 KB
/
robo_hardware2.h
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
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
//nesse arquivo as funcoes devem ser somente declaradas
#ifndef ROBO_HARDWARE_H
#define ROBO_HARDWARE_H
#include <Arduino.h>
#include <Servo.h>
#include "cor.h"
#include "pinagem.h"
#include "Ultrasonic.h"
#include "EEPROM2.h"
#include "CorTcs23.h"
#include "CorTcs34.h"
#include "led_botoes/Botao.h"
#include "led_botoes/Led.h"
enum{
TCS23,
TCS34
};
struct calibracao_dados{
HSV brancoDir;
HSV brancoEsq;
HSV pretoDir;
HSV pretoEsq;
HSV verdeDir;
HSV verdeEsq;
HSV cinzaDir;
HSV cinzaEsq;
int refletanciaDir;
int refletanciaMaisDir;
int refletanciaEsq;
int refletanciaMaisEsq;
};
struct refletancia_dados{
float valorLedLigado;
float valorLedDesligado;
float valorDiferenca;
};
class robo_hardware:private pinagem{
private:
#define AJUSTE_PINO_SENSOR 36
#define OFF 0
#define AJUSTE_MOTOR 0.65
#define MAX_10_BITS 1023.0 //Maior valor que um numero de 10 bits pode obter
#define CALIBRACAO_SONAR 40.4 //Valor para calibrar os sonares. Quanto maior esse valor menor a inclinação da reta de calibracao
#define ENDERECO_EEPROM 0
public:
robo_hardware();
void configurar(bool habilitar_garra=true);
void habilitaTCS34();
void habilitaTCS23();
// boolean lerSensorFimDeCurso();
//As funcoes retornam o valor lido do sensor refletancia
const float lerSensorDeLinha(const int sensor, bool ledLigado=true); //recebe um pino analogico (A0, A1, A2 e etc) e retorna um valor de 0 a 100
inline const float lerSensorLinhaEsq(){ return lerSensorDeLinha(SENSOR_LINHA_ESQUERDO);} //retorna um valor de 0 a 100
inline const float lerSensorLinhaMaisEsq(){ return lerSensorDeLinha(SENSOR_LINHA_MAIS_ESQUERDO);} //retorna um valor de 0 a 100
inline const float lerSensorLinhaDir(){ return lerSensorDeLinha(SENSOR_LINHA_DIREITO);} //retorna um valor de 0 a 100
inline const float lerSensorLinhaMaisDir(){ return lerSensorDeLinha(SENSOR_LINHA_MAIS_DIREITO);} //retorna um valor de 0 a 100
inline const float lerSensorLinhaEsqSemRuido(){ return lerDadosSensorLinhaEsq().valorDiferenca;} //retorna um valor de 0 a 100
inline const float lerSensorLinhaMaisEsqSemRuido(){ return lerDadosSensorLinhaMaisEsq().valorDiferenca;} //retorna um valor de 0 a 100
inline const float lerSensorLinhaDirSemRuido(){ return lerDadosSensorLinhaDir().valorDiferenca;} //retorna um valor de 0 a 100
inline const float lerSensorLinhaMaisDirSemRuido(){ return lerDadosSensorLinhaMaisDir().valorDiferenca;} //retorna um valor de 0 a 100
const refletancia_dados lerDadosSensorDeLinha(const int sensor);
inline const refletancia_dados lerDadosSensorLinhaEsq(){ return lerDadosSensorDeLinha(SENSOR_LINHA_ESQUERDO);}
inline const refletancia_dados lerDadosSensorLinhaMaisEsq(){return lerDadosSensorDeLinha(SENSOR_LINHA_MAIS_ESQUERDO);}
inline const refletancia_dados lerDadosSensorLinhaDir(){return lerDadosSensorDeLinha(SENSOR_LINHA_DIREITO);}
inline const refletancia_dados lerDadosSensorLinhaMaisDir(){return lerDadosSensorDeLinha(SENSOR_LINHA_MAIS_DIREITO);}
//A funcao para acionar os motores de locomocao do robo
//A funcao recebe um percentual de tensao do motor esquerdo e direito
//A funcao so recebe valores que variem de 100 ate -100
void acionarMotores(float percetualMotorEsquerdo, float percetualMotorDireito);
//funcao para acionar os servomotores
void acionarServoGarra1(int angInicial, int angFinal, int tempo);
void acionarServoGarra2(int angInicial, int angFinal, int tempo);
void acionarServoGarra1(int angFinal);
void acionarServoGarra2(int angFinal);
float lerSensorSonarFrontal();
float lerSensorSonarEsq();
float lerSensorSonarDir();
//funcoes para trabalhar com os sensores de Cor
HSV getHSVEsquerdo(); //realiza a leitura do sensor de cor esquerdo e retorna uma estrutura HSV. Ver cor.h
RGB getRGBEsquerdo(); //realiza a leitura do sensor de cor esquerdo e retorna uma estrutura RGB. Ver cor.h
HSV getHSVDireito(); //realiza a leitura do sensor de cor direito e retorna uma estrutura HSV. Ver cor.h
RGB getRGBDireito(); //realiza a leitura do sensor de cor direito e retorna uma estrutura RGB. Ver cor.h
void salvarCalibracao(calibracao_dados cal);
void lerCalibracao(calibracao_dados &cal);
void ligarLed(const int led)const;
void desligarLed(const int led)const;
void ligarTodosLeds()const;
void desligarTodosLeds()const;
inline const bool botao1Pressionado()const{return botao1.estaPressionado();}
inline const bool botao2Pressionado()const{return botao2.estaPressionado();}
inline const bool botao3Pressionado()const{return botao3.estaPressionado();}
private:
static int tipoSensorCor;
static Servo servoGarra1;
static Servo servoGarra2;
void tensao(float valor_por_cento,int pino);
//SensorCor cor_direita(s2,s3, out);
//SensorCor corDireita;
//SensorCor corEsquerda;
CorTcs23 corDireita;
CorTcs23 corEsquerda;
CorTcs34 corDireita34;
CorTcs34 corEsquerda34;
Ultrasonic sonarFrontal;
Ultrasonic sonarEsq;
Ultrasonic sonarDir;
Botao botao1, botao2, botao3;
Led led1, led2, led3;
};
static robo_hardware robo;
#endif