Bueno ya he acabado parte del proyecto de iniciacion
Basicamente es hacer una calculadora con arduino, de momento solo hace operaciones básicas, pues el teclado que tengo es Hexadecimal, pero para ir empezando no esta mal. Gracias Curro por tu ayuda...
Aqui os dejo el programa para quien quiera utilizarlo, y agradeceria cualquier onsejo para optimizarlo.
// librerias que vamos a utilizar
#include <Keypad.h>
#include <LiquidCrystal.h>
//inicializacion del lcd
LiquidCrystal lcd(5,4,3,2,1,0);
// Inicializacion teclado
const byte Columnas = 4;
const byte Filas = 4;
byte Pines_Filas[Filas] = {13,12,11,10};
byte Pines_Columnas[Columnas] = {9,8,7,6};
// Mapa teclado
char mapa [Filas][Columnas] = {
{'+','-','X','/'},
{'=','9','6','3'},
{'0','8','5','2'},
{'.','7','4','1'}
};
int i=0;
String operador="";
String operador1="";
String operador2="";
char operacion;
char tecla;
float numero1;
double memoria;
double resultado;
// Creamos el objeto tecla
Keypad teclado =Keypad (makeKeymap(mapa),Pines_Filas,Pines_Columnas,Filas,Columnas);
// inicializacion
void setup()
{
//Serial.begin(9600);
lcd.begin(20,4);
}
//inicio del programa
void loop()
{
lcd.setCursor(1,1); //Presentacion de la calculadora
lcd.print("Caculadora by Paco");
delay(3000);
lcd.clear(); // Pasado 3 seg, se limpia la calculadora
int i =0;
lcd.setCursor(1,1);
do
{
tecla = teclado.getKey(); //escaneamos tecla
switch(tecla) //construimos los operadores o la operacion segun el caso
{
case ('.'):
lcd.print(".");
operador +='.';
break;
case ('+'):
lcd.print(" + ");
intercambio();
operacion='+';
i=0;
break;
case ('-'):
lcd.print(" - ");
intercambio();
operacion='-';
i=0;
break;
case ('X'):
lcd.print(" X ");
intercambio();
operacion='X';
break;
case ('/'):
lcd.print(" / ");
intercambio();
operacion='/';
break;
case ('='):
lcd.print (" = ");
tecla = NO_KEY;
switch(operacion) //segundo bucle case esta vez es para realizar la operacion
{
case ('+'):
//numero1 = atof(operador1);
resultado = StrToDouble(operador1) + StrToDouble(operador);
break;
case ('-'):
resultado = StrToDouble(operador1) - StrToDouble(operador);
break;
case('X'):
resultado = StrToDouble(operador1) * StrToDouble(operador);
break;
case('/'):
resultado = StrToDouble(operador1) / StrToDouble(operador);
break;
}
operador="";
operador1="";
lcd.setCursor(1,3);
lcd.print(resultado,6);
do
{
tecla=teclado.getKey();
}while (tecla==NO_KEY);
lcd.clear();
lcd.begin(1,1);
break;
case (NO_KEY): //Si la tecla no ha sido pulsada salimos
break;
default:
lcd.print(tecla);
operador += tecla;
break;
}
}while(tecla |='f');
//Bucle sin fin
}
void intercambio()
{
tecla=NO_KEY;
operador1=operador;
operador="";
}
double StrToDouble(String Texto)
{
char cadena[Texto.length()+1];
Texto.toCharArray(cadena, Texto.length()+1);
double myFloat = atof(cadena);
return myFloat;
}