Está en la página 1de 10

Universidad de Sonora

Sistemas embebidos 3:00-4:00pm

Gerardo Valenzuela Hernández

Integrantes:

Medina López Javier Esteban


Quiroz Sanchez David Eduardo
Valdez Díaz Ernesto
Armenta Curlango Ruben
Guerrero Axel

Introducción

Esta práctica haremos uso de la memoria EEPROM para guardar voltajes y mostrarlos en la
pantalla LCD mediante un teclado con el cual tendremos queingresar una contraseña para que
la pantalla arroje datos (voltaje) almacenados en la memoria.
Materiales utilizados:
- 2 potenciómetros
- Pantalla LCD
- Arduino UNO
- Teclado 4x4 de membrana
- Puentes (cables)
- Protoboard

Códgio:

#include <Keypad.h>

#include <LiquidCrystal.h>

#include <EEPROM.h>

const int POT = A3; // Define el pin analógico en donde se conecta el potenciometro

int value,PW,CurrentPW=1234; //Variable PW es donde se guardara la contraseña, variable CurrentPW es la


contraseña por defecto

float volt; //En esta variable se guardara la salida del potenciometro.

char Key; //En esta variable se guardara la tecla que se presione del teclado matricial

//Variables para configurar teclado

const byte rows = 4;

const byte col = 4;

byte pRows[] = {3,2,1,0};

byte pCol[] = {4,5,6,7};

char teclas[4][4] = {{'*','0','=','A'},

{'1','2','3','B'},

{'4','5','6','C'},

{'7','8','9','D'}};

Keypad teclado = Keypad( makeKeymap(teclas), pRows, pCol, rows, col);


LiquidCrystal lcd(13, 12, 11, 10, 9, 8); //(RS, E, D4,D5, D6, D7)

void setup() {

lcd.begin(16, 2); // Inicia el LCD 16 columnas y 2 filas

teclado.setHoldTime(1000); //Tiempo de espera para el teclado

EEPROM.get( 0, PW ); //Se leé las dos primeras celdas de la memoria EEPROM y se guarda en PW

if(PW!=CurrentPW && PW>0){ //Si PW es diferente a 1234 y PW es mayor a 0

CurrentPW=PW; //Para el caso de tener configurada la contraseña a una diferente que la por defecto

//lcd.print("PW: "); //Por si se olvidan la contraseña le quitan los "//" y muestra al iniciar el arduino la contraseña
guardada

//lcd.print(CurrentPW);

//delay(5000);

void loop() {

char KeyOp;

int i,j;

float vEE[4];

//Lectura del potenciometro

value=analogRead(POT);

//Cambiar la lectura de 0-1023 a un valor en voltaje de 0-5 V

volt=(value*5/1023.0);
lcd.home(); // Coloca el cursor en las coordenadas (0,0)

lcd.print("LECTURA DE VOLTAJE"); // Escribe en el LCD el mensaje entre comillas

lcd.setCursor(0,1); // Coloca el cursor en las coordenadas (0,0)

lcd.print("POT (V): "); // Escribe en LCD

lcd.print(volt); // Escribe en LCD el valor de la variable volt

Key=teclado.getKey(); //Realiza barrido y espera por 1000ms a que se presione un boton

if(Key>='A' && Key<='C'){ //Se debe presionar una tecla A, B o C

KeyOp=Key; //Se guarda el A en variable KeyOP

lcd.clear(); //Borra lo que este en pantalla lcd

lcd.home(); // Coloca el cursor en las coordenadas (0,0)

lcd.print("Ingrese Contrasena:"); //Escribe mensaje en LCD

PW=password(); //Llama a la subrutina password y el valor que retorne la subrutina lo guarda en PW

//Valida la contraseña

if(PW == CurrentPW){

if(KeyOp=='A'){ //Grabar datos en la memoria

lcd.clear();

lcd.home(); // Coloca el cursor en las coordenadas (0,0)

lcd.print("Grabando..."); // Escribe en LCD

//Incrementa el for de 4 en 4 hasta ingresar 4 valores del voltaje

for(i=2;i<2+ 4*sizeof(float);i+= sizeof(float)){ //El sizeof al tener una variable de tipo flotante retora un 4

value=analogRead(POT); // Lee el voltaje

volt=(value*5/1023.0);
EEPROM.put( i, volt ); //Graba los datos de voltaje en el memoria EEPROM desde la celda 2 hasta la 17

delay(1000);

if(KeyOp=='B'){ //Cambiar la contraseña

lcd.home(); // Coloca el cursor en las coordenadas (0,0)

lcd.print("Nueva Contrasena:"); // Escribe no LCD

PW=password(); //Llama a la subrutina password y el valor que retorne la subrutina lo guarda en PW

EEPROM.put( 0, PW ); //Graba la nueva contraseña en la memoria EEPROM en las celdas 0 y 1

lcd.clear();

lcd.home(); // Coloca el cursor en las coordenadas (0,0)

lcd.print("Contrasena guardada!!!"); // Escribe no LCD

CurrentPW=PW; //Actualiza la variable current PW

delay(2000);

if(KeyOp=='C'){ //Visualizar valore guardados

lcd.clear();

lcd.home(); // Coloca el cursor en las coordenadas (0,0)

j=0;

//Incrementa el for de 4 en 4 hasta ingresar 4 valores del voltaje

for(i=2;i<2+ 4*sizeof(float);i+= sizeof(float)){ //El sizeof al tener una variable de tipo flotante retora un 4
EEPROM.get( i, vEE[j] ); //Lee los datos de la EEPROM desde la celda 2 y los guarda en la variable vEE

j++;

lcd.setCursor(0,0); //LCD en primera fila

for(j=0;j<2;j++){ //Se muestran los 2 primeros datos

lcd.print(j+1);

lcd.print(')');

lcd.print(vEE[j]);

lcd.print("; ");

lcd.setCursor(0,1); //LCD en segunda fila

for(j=2;j<4;j++){ //Se muestran los dos ultimos datos

lcd.print(j+1);

lcd.print(')');

lcd.print(vEE[j]);

lcd.print("; ");

delay(5000); //Espera 5 segundos

lcd.clear();

}else{
lcd.clear();

lcd.home(); // Coloca el cursor en las coordenadas (0,0)

lcd.print("Contrasena incorrecta!!"); // Escribe no LCD

delay(2000);

int password(void){ //Subrutina password para ingresar contraseña

int pass,i=0;

String KeyWord;

lcd.setCursor(0, 1);

//Espera a que se ingresen los 4 digitos y se compara

while(i<4){

Key=teclado.waitForKey(); //Espera a que se presione un boton, el programa no avanza

if(Key>='0' && Key<='9'){ //Valida si se digito un número

lcd.print('*'); //Imprime un * por cada digito

KeyWord += Key; //Se almacena la tecla presionada en Keyword

i++; //Se incrementa hasta 4 para salir del While

if(Key=='D'){ //Si se presiona D para cuando no se saben la contraseña

i=4;
}

if(KeyWord.length()>0){ //Se consulta el tamaño del strig de la variable Keyword y si es mayor a 0 entra al if

pass=KeyWord.toInt(); //Convierte el string en un valor entero y lo guarda en pass

}else{

pass=0; //Si keyword es 0 entonces pass sera 0

return(pass); //Retorna el valor de pass al lugar donde se llamo a la subrutina

Circuito físico:

También podría gustarte