-
Notifications
You must be signed in to change notification settings - Fork 0
/
TecladoAnalogico.ino
173 lines (117 loc) · 4.28 KB
/
TecladoAnalogico.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
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
// Bilioteca desejada
#include <Keyboard.h>
// Definição de pinos
#define CTRL_F1 A0
#define CTRL_F3 A1
#define CTRL_F4 A2
#define CTRL_F5 A3
#define CTRL_F6 A4
#define CTRL_F8 A5
#define SHIFT_F1 A8
#define SHIFT_F2 A9
#define SHIFT_F3 A10
// Definição de configuração de hardware
#define NUMERO_PINOS 9
#define LIMIAR_PRESSIONADO 100 // Regular de acordo com o desejado
#define CONTROLE_TECLADO 3
#define LED_HABILITA 4
//#define DEBUG // Descomente caso seja necessário verificar as leituras analógicas
#define APP
// Prototipo de funções
void controleTeclado();
// Estrutura de dados
typedef struct{
unsigned char pino;
char codigoChave;
bool pressionado;
unsigned int valorAnalogico;
bool ultimoEstado;
}teclado;
String dadosTeclado[]{"CTRL + F1","CTRL + F3","CTRL + F4","CTRL + F5","CTRL + F6","CTRL + F8","SHIFT + F1","SHIFT + F2","SHIFT + F3"};
// Declara a esturuta de dados para as teclas desejadas
teclado tecla[]{
{CTRL_F1,KEY_F1,false,0,false},
{CTRL_F3,KEY_F3,false,0,false},
{CTRL_F4,KEY_F4,false,0,false},
{CTRL_F5,KEY_F5,false,0,false},
{CTRL_F6,KEY_F6,false,0,false},
{CTRL_F8,KEY_F8,false,0,false},
{SHIFT_F1,KEY_F1,false,0,false},
{SHIFT_F2,KEY_F2,false,0,false},
{SHIFT_F3,KEY_F3,false,0,false}
};
// Variavel Global
unsigned char habilita_teclado = 0;
// *** Setup ***
void setup() {
for(int indice ; indice < NUMERO_PINOS; indice++){ // Configura os LDR's com entrada
pinMode (tecla[indice].pino, INPUT); // Define os pinos como entrada analogica
}
pinMode(CONTROLE_TECLADO, INPUT_PULLUP); // Configura o botão com a topologia resistor pullup
pinMode(LED_HABILITA, OUTPUT); // Configura LED como saída
digitalWrite(CONTROLE_TECLADO,1); // Mantem o nível lógico igual a 1
digitalWrite(LED_HABILITA,0); // Desliga o LED
Keyboard.begin(); // Habilita o Arduino Leonardo para função HID - Teclado
#ifdef DEBUG
Serial.begin(9600); // Inicia a comunicação serial
#endif
attachInterrupt(digitalPinToInterrupt(CONTROLE_TECLADO),controleTeclado, LOW); // Método para chamar o serviço de interrupção da placa Atmel32u
}
// *** Loop ***
void loop() {
if(habilita_teclado){ // Caso habilite o teclado esse bloco será executado
#ifdef APP
for(int indice = 0; indice <NUMERO_PINOS; indice++){
tecla[indice].valorAnalogico = analogRead(tecla[indice].pino);
if(tecla[indice].valorAnalogico < LIMIAR_PRESSIONADO){tecla[indice].pressionado = true;}
delay(1);
if(indice >= NUMERO_PINOS-4){ // Mapea os LDRs relacionados ao CTRL
if(tecla[indice].pressionado && !tecla[indice].ultimoEstado) {
Keyboard.press(KEY_LEFT_CTRL);//Pressiona o Ctrl
Keyboard.press(tecla[indice].codigoChave);
Serial.println(dadosTeclado[indice]);
tecla[indice].ultimoEstado = true;
}
}
else{// Mapea os LDRs relacionados ao CTRL
if(tecla[indice].pressionado && !tecla[indice].ultimoEstado) {
Keyboard.press(KEY_LEFT_SHIFT);//Pressiona o Shift
Keyboard.press(tecla[indice].codigoChave); // Pressiona o código de teclado selecionado
Serial.println(dadosTeclado[indice]);
tecla[indice].ultimoEstado = true;
}
}
if(tecla[indice].valorAnalogico > LIMIAR_PRESSIONADO){tecla[indice].pressionado = false;}
if (!tecla[indice].pressionado && tecla[indice].ultimoEstado){
Keyboard.releaseAll();
tecla[indice].ultimoEstado = false;
}
}// Fim FOR
delay(1);
#endif
#ifdef DEBUG
for(int indice = 0; indice <NUMERO_PINOS; indice++){
Serial.print(tecla[indice].pressionado);
//Serial.print(tecla[indice].valorAnalogico);
Serial.print("\t");
}// fim FOR
Serial.print("\n");
delay(10);
#endif
} // fimIF
else{
#ifdef DEBUG
Serial.println("*** TECLADO DESABILITADO ***");
delay(1000);
#endif
}
}
void controleTeclado(){ // Função para habilitar a leitura dos LDR's
habilita_teclado =! habilita_teclado;
if(habilita_teclado){
digitalWrite(LED_HABILITA,1);
}
else {
digitalWrite(LED_HABILITA,0);
}
}// fim controleTeclado