Informtica
Laboratorio de Electrnica II
VI Ciclo
Laboratorio N 4
Integrantes
Apellidos y Nombres Cdigo
Villena Jimenez William A. 2013011913
Quispe Vsquez Vctor R. 2013235198
2017 - II
Ing. Rubn Gil Chacaltana 1
Universidad Nacional Federico Villarreal FIEI Ing. Informtica
Procedimiento
Caso de Estudio 1
Entregables:
Cdigo.
Esquemtico.
Evidencias de funcionamiento.
Diagrama de bloques de la mquina de estados.
Circuito Funcional.
Plazo de entrega 2 semanas.
CODIGO ARDUINO:
#include <Keypad.h>
#include <LiquidCrystal.h>
#include <EEPROM.h>
#include <string.h>
//Caracter de Grados
byte grado[8] =
{
0b00001100,
0b00010010,
0b00010010,
0b00001100,
0b00000000,
0b00000000,
0b00000000,
0b00000000
};
char T_Keys[FILAS][COLUM] = {
{'1','2','3','U'},
{'4','5','6','D'},
{'7','8','9','N'},
{'C','0','M','E'}
};
//Variables de Configuracion
bool unidad;
bool beep = true;
byte setPoint;
void setup() {
Serial.begin(9600);
lcd.begin(16,2);
pinMode(leds,OUTPUT);
pinMode(l_lcd,OUTPUT);
digitalWrite(l_lcd, HIGH);
simular();
inicializar(); //Inicializar las variables de configuracion desde la
EEPROM
if (setPoint > 0)
{
estado = 1;
}
void loop()
{
switch(estado)
{
case 1: reset();
pantalla(2);
while(1)
{
//Mostrando Temperatura
mostrarTemp();
key = keypad.getKey();
if (key != NO_KEY)
{
//(Pin,Frecuencia(Hz),Duracion(milisegundos))
tono(beep);
if (key == 'M')
{
estado = 2;
break;
}
}
}
break;
case 2:
{
pantalla(3);
bool salir = true;
while(salir)
{
key = keypad.getKey();
if (key != NO_KEY)
{
tono(beep);
switch(key)
{
case 'U': cursor('1',2);
break;
case 'D': cursor('2',2);
break;
case 'E': switch(poscur)
{
case 1: estado = 3;
salir = false;
continue;
case 2: estado = 4;
salir = false;
continue;
}
break;
case 'M': estado = 1;
salir = false;
continue;
}
}
}
break;
}
case 3:
{
bool salir = true;
posicion = 0;
pantalla(8);
int valor = 0;
while(salir)
{
key = keypad.getKey();
if (key != NO_KEY)
{
tono(beep);
switch(key)
{
case 'U': case 'D': break;
lcd.setCursor(posicion + 11,1);
lcd.print(" ");
lcd.setCursor(posicion + 11,1);
break;
if(setPoint != valor)
{
setPoint = valor;
guardar(1);
estado = 2;
posicion = 0;
salir = false;
continue;
}
else
{
estado = 2;
posicion = 0;
salir = false;
continue;
}
}
break;
ingreso[posicion] = key;
lcd.setCursor((posicion + 11),1);
lcd.print(key);
posicion++;
}
break;
}
}
}
break;
}
case 4:
{
pantalla(6);
op1 = unidad;
pantalla(7);
bool salir = true;
while(salir)
{
key = keypad.getKey();
if (key != NO_KEY)
{
tono(beep);
switch(key)
{
case 'U': op1 = !op1;
pantalla(7);
break;
case 'D': op1 = !op1;
pantalla(7);
break;
case 'E': if (op1 == unidad)
{
estado = 2;
salir = false;
continue;
}
else
{
unidad = op1;
guardar(1);
estado = 2;
salir = false;
continue;
}
case 'M': estado = 2;
salir = false;
continue;
}
}
}
break;
}
}
}
void reset()
{
digitalWrite(leds,LOW);
posicion = 0;
}
void inicializar()
{
unidad = EEPROM.read(7);
setPoint = EEPROM.read(8);
}
void simular()
{
int aux;
EEPROM.write(7,0);
EEPROM.write(8,45);
}
void mostrarTemp()
{
//leer el sensor en A14
temp = analogRead(pinLM35);
//Calcular la temperatura con la formula
temp = (5.0 * temp * 100.0) / 1024.0;
case 2: lcd.clear();
lcd.setCursor(0,0);
lcd.print(" Temperatura: ");
lcd.setCursor(0,1);
lcd.print("-> <-");
break;
case 6: lcd.clear();
lcd.print("Unidad de Temp a");
lcd.setCursor(0,1);
lcd.print("registrar: ");
break;
case 7: if(op1 == 0)
{
lcd.setCursor(12,1);
lcd.write(1);
lcd.print("C");
}
else
{
lcd.setCursor(12,1);
lcd.write(1);
lcd.print("F");
}
break;
case 8: lcd.clear();
lcd.print("Ingrese valor de");
lcd.setCursor(0,1);
lcd.print("setPoint: ");
break;
case 9: lcd.clear();
lcd.print("Temp. fuera de");
lcd.setCursor(0,1);
lcd.print("Rango del Sensor");
delay(2000);
break;
// case XX:break;
}
}
{
//Posicionando el Cursor al entrar al menu
case '0': lcd.setCursor(0,0);
lcd.print(">");
poscur = 1;
break;
}
}
PROTEUS
ARMADO FISICO: