Os botões devem ser ligados conforme imagem abaixo, de forma que um dos terminais de cada um dos botões estejam em um linha e o outro terminal em uma coluna.
Montagem do circuito na PCB Atenção!! O teclado que eu utilizei, foi retirado de um ponto eletrônico portátil que não estava mais sendo usado. Não sei se ele tem a mesma construção de outros teclados, principalmente destes vendidos para ser utilizado com o Arduino, portanto, talvez sejam necessárias algumas alterações, para rodar com outros teclados. Inicialmente a placa foi feita sem o capacitor representado no circuito acima, mas durante os testes percebi que ainda haviam oscilações que retornavam leituras com valores errados. Pra tentar minimizar as leituras erradas inclui o capacitor de 100nF.
Para testar a placa primeiramente rodei o código abaixo para identificar o valor lido em cada uma das teclas. Ao executar é verificada uma oscilação entre leituras de um mesmo botão, não sendo possível identificar o valor correto para cada botão. Código 01
Para tentar chegar em um valor mais aproximado do real, rodeio o código abaixo, no qual faço a leitura 200 vezes, e depois faço a média de todos esses valores, chegando então em um valor que dá um retorno com menos variações. código 02:
void setup() {
Serial.begin(9600);
}
void loop() {
const int LEITURAS = 200;
long soma = 0;
long media = 0;
int leitura = analogRead(A5);
for (int i=0;i < LEITURAS; i++){ soma += leitura; }
media = soma / LEITURAS;
Serial.println(media);
delay(100);
}
Abaixo está o código que foi mostrado no vídeo. Mas quem for tentar reproduzir, é necessário fazer vários testes, já que eventualmente é possível que falhas ocorram, portanto, essa solução ainda não é 100% confiável, mas ainda sim serve como base para algumas aplicações.
void setup() {
Serial.begin(9600);
}
char getTecla(){
const int LEITURAS = 300;
long soma = 0;
long media = 0;
int maior = 0;
int menor = 1023;
for (int i = 0; i < LEITURAS; i++) {
int leitura = analogRead(A5); //PINO ANALOGICO A5. MUDAR AQUI
if (leitura <= 368) { soma=0; break; }
menor = (menor > leitura) ? leitura : menor;
maior = (maior < leitura) ? leitura : maior;
soma += leitura;
if ((maior-menor) >= 4){ soma=0; break; }
}
media = soma / LEITURAS;
char c = ' ';
if (media <= 1023 && media >= 971) {c = '1'; }
if (media <= 970 && media >= 886) {c = '2'; }
if (media <= 885 && media >= 814) {c = '3'; }
if (media <= 813 && media >= 739) {c = 'A'; }
if (media <= 738 && media >= 673) {c = '4'; }
if (media <= 672 && media >= 631) {c = '5'; }
if (media <= 630 && media >= 595) {c = '6'; }
if (media <= 594 && media >= 552) {c = 'B'; }
if (media <= 551 && media >= 513) {c = '7'; }
if (media <= 512 && media >= 489) {c = '8'; }
if (media <= 488 && media >= 466) {c = '9'; }
if (media <= 465 && media >= 438) {c = 'C'; }
if (media <= 437 && media >= 413) {c = '*'; }
if (media <= 412 && media >= 398) {c = '0'; }
if (media <= 397 && media >= 383) {c = '#'; }
if (media <= 382 && media >= 369) {c = 'D'; }
//somente para testes, retirar ao ser usado
if (c != ' '){
Serial.print(media);
Serial.print(" - ");
Serial.print(maior);
Serial.print(" - ");
Serial.print(menor);
Serial.print(" - ");
Serial.print(maior-menor);
Serial.print(" - ");
}
return c;
}
void loop() {
char c = getTecla();
if (c != ' '){
Serial.println(c);
delay(150);
}
}
Nesse vídeo mostro um exemplo de como criar um banco de dados simples com o Arduino, utilizando Ethernet Shield com SD Card, utilizando a biblioteca EDB (Extended Database Library).
os arquivos html são salvos no cartão de memória. Os dados são retornados para o browser através de javascript no formato JSON.
Depois de instalada a biblioteca acima, é preciso corrigir um bug que existe no código-fonte da biblioteca. abra o arquivo EDB.cpp e modifique a seguinte função, incluindo a linha sinalizada pelo +: