Sei sulla pagina 1di 4

=================================================

/*
Programa V 7b.2.13 by Fons
Programa de teclado matricial 4x4 para una entrada
analogica

SIN LCD IMPLEMENTADO

Se agrega testeo para calibrar el teclado, cuidado con * o 0


noviembre/2013
..::Arduino-Ruls::..*/

//=================================================
/*Declaracion de librerias*/
#include <stdlib.h>

//=================================================
/*Declaracion de las constantes a usar

-Pines de entrada
-Pines de salida
-Teclado
*/

//___________________________________________Entrada
const int TecladoM=A0;

//___________________________________________Salida
const int PW= 9;

//___________________________________________Teclado
//Valores para la lectura analogica
const int Vmin=150;
//Valores para cada tecla
const int Vd=166, Vc=296, Vb=408, Va=563;
const int Vgato=178, V9=336, V6=488, V3=728;
const int V0=182, V8=348, V5=514, V2=788;
const int Vaste=188, V7=371, V4=566, V1=915;

//==================================================
/*Variavbles
char
inicio caracter para hacer valido el inicio
pass[] para comparar con la entrada
letra almaecna tecla de letra presionada
numero almacena tecla de numero presioanda
int
valor para el valor si se mete puros numeros
bandera2 para decir que se ingreso letra
entradateclado para almacenar el valor del adc
i para el for
bandera1 para la toma de tecla
superior para umbral superior
inferior para umbral inferior
cosa bandera para machs de comapracion */
char codigo[4],inicio,pass[4]={'B','A','D','#'},letra,numero;
int entradateclado, i=0, bandera1=0, superior,inferior,cosa=0,bandera2=0,valor=0;

//========================================================
/*Void setup de condiguracion
-Serial.begin para la comunicacion de entrada y salida
*/

void setup() {
Serial.begin(9600);
analogWrite(PW,0);
}

//============================================================
/*Void loop*/
void loop() {

Serial.print("rnnPresiona B para iniciar o C calibrarrn";);


while(inicio!='B'&&inicio!='C'){
lectora();
if(letra!='x'){
Serial.print(letra);
inicio=letra;}
}//fin while de inicio

if(inicio=='C'){
Serial.print("rnVamos a testear las teclas hasta que presiones brn";);
delay(1000);
while(inicio!='B'){
inicio=Serial.read();
entradateclado = analogRead(TecladoM);
Serial.print("rEl valor de la tecla presionada: ";);
Serial.println(entradateclado);
delay(300);
}//fin while testeo
}//fin para el teseteo
delay(1500);

Serial.print("rnDame tus teclas para asignar al pwm o passn[pass = BAD#]rn";);


for (i=0;i<=3;i++){
lectora();

if(letra!='x'){
Serial.print(letra);
codigo[i]=letra;
bandera2=1;}
if(numero!='y'){
Serial.print(numero);
codigo[i]=numero;}

if(codigo[i]==pass[i])cosa=cosa+1;
delay(350);
}//fin for de llenado
delay(600);
Serial.print("rn==================rnMatches en pass: ";);
Serial.println(cosa);
delay(2000);

//Comparando si es la contrase�a por el cntador


if(cosa==4)Serial.print("rn==================n correcto, me diste el pass
correcton";);
else{
if(bandera2==0){
Serial.print("rn==================nNo me diste es pass correcto, pero fuern
numeros";);
Serial.print("rn voy a cargar al pwm: ";);
valor=atol(codigo);
Serial.print(valor);
Serial.print("rn Su equivalente a pwm es: ";);
valor=valor*0.25;
if(valor>=255)valor=255;
if(valor<=0)valor=0;
Serial.print(valor);
delay(1000);
analogWrite(PW,valor);
delay(2000);
analogWrite(PW,0);}
else{
Serial.print("rnno me diste pass correcta ni num para pwmrn";);
delay(1000);}
}//fin esle

//Reiniciando las banderas


inicio='x';
bandera1=0;
cosa=0;
bandera2=0;
valor=0;
}//fin loop main

//===================================================================
/*Funciones

-lectura Para regrear un valor del teclado matricial


*/

void lectora(){
bandera1=0;

while(bandera1==0){
entradateclado=0;
while(entradateclado<Vmin){
entradateclado = analogRead(TecladoM);
delay(100);
entradateclado = analogRead(TecladoM);
delay(30);
}//fin while de presionar teclado

entradateclado = analogRead(TecladoM);
superior=entradateclado+1;
inferior=entradateclado-1;
letra='x';
numero='y';

if (superior>=Vd && Vd>=inferior)letra='D';


else if (superior>=Vgato && Vgato>=inferior)letra='#';
else if (superior>=V0 && V0>=inferior)numero='0';
else if (superior>=Vaste && Vaste>=inferior)letra='*';
else if (superior>=Vc && Vc>=inferior)letra='C';
else if (superior>=V9 && V9>=inferior)numero='9';
else if (superior>=V8 && V8>=inferior)numero='8';
else if (superior>=V7 && V7>=inferior)numero='7';
else if (superior>=Vb && Vb>=inferior)letra='B';
else if (superior>=V6 && V6>=inferior)numero='6';
else if (superior>=V5 && V5>=inferior)numero='5';
else if (superior>=V4 && V4>=inferior)numero='4';
else if (superior>=Va && Va>=inferior)letra='A';
else if (superior>=V3 && V3>=inferior)numero='3';
else if (superior>=V2 && V2>=inferior)numero='2';
else if (superior>=V1 && V1>=inferior)numero='1';
else{letra='x';numero='y';delay(300);}

if(letra=='x' && numero=='y')bandera1=0;


else bandera1=1;
}//fin while de bandera
}//fin void bandera

Potrebbero piacerti anche