Se asigna una tecla para calcular el valor de una función, en éste caso se sustituye la tecla ‘*’ por una función factorial como ejemplo:
Al presionar la tecla «!» se obtiene el valor del factorial del número.
5 ! 120.000
Instrucciones Arduino
El archivo de intrucciones modificado a partir de calculadora básica y la función de la tecla escrita al final se muestra a continuación:
// Calculadora tecla factorial 2018.06.24 // blog.espol.edu.ec/edelros // edelros@espol.edu.ec #include <LiquidCrystal_I2C.h> // LCD por I2C #include <Wire.h> //comunicación I2C #include <Keypad.h> //Teclado // Pantalla LCD. npxmp FilasxColumnas const byte mp = 20; const byte np = 4; LiquidCrystal_I2C lcd(0x27,mp,np); // Teclado ntxmt FilasxColumnas const byte nt = 4; const byte mt = 4; char tabla[nt][mt]={ {'1', '2', '3', '+'}, {'4', '5', '6', '-'}, {'7', '8', '9', '!'}, {'C', '0', '.', '='}}; byte PinF[nt] = {7,6,5,4}; byte PinC[mt] = {3,2,1,0}; Keypad teclado = Keypad(makeKeymap(tabla), PinF,PinC,nt,mt); // variables de calculadora float numA = 0; float numB = 0; float resultado = 0; String num1, num2; char operador = ' '; int tamano = 0; byte cualnum = 0; boolean haypunto = 0; void setup(){ // inicializa pantalla lcd.init(); lcd.backlight(); lcd.setCursor(0,0); lcd.print("Calculadora-Basica"); lcd.setCursor(0,1); lcd.print("FCNM-ESPOL"); delay (2000); lcd.clear(); lcd.setCursor(0,0); lcd.print("blog.espol.edu.ec"); lcd.setCursor(0,1); lcd.print("/matg1052"); delay (2000); lcd.clear(); } void loop(){ char tecla = teclado.getKey(); // tecla presionada numero if (tecla != NO_KEY){ if (tecla=='1' || tecla=='2' || tecla=='3' || tecla=='4' || tecla=='5' || tecla=='6' || tecla=='7' || tecla=='8' || tecla=='9' || tecla=='0'){ if (cualnum <= 1){ num1 = num1 + tecla; cualnum = 1; } if (cualnum == 2){ num2 = num2 + tecla; } } // tecla punto decimal if (tecla=='.' and haypunto==0){ if (cualnum == 1 or cualnum == 0){ tamano = num1.length(); if (tamano == 0) {num1= "0.";} else {num1 = num1 + tecla;} } if (cualnum == 2){ tamano = num2.length(); if (tamano == 0) {num2= "0.";} else {num2 = num2 + tecla;} } haypunto = 1; } //tecla de Operacion if (cualnum >= 1 && (tecla == '+' || tecla == '-' || tecla == '!' || tecla == '/')){ operador = tecla; cualnum = 2; haypunto = 0; } // obtener resultado if (tecla == '=' && cualnum == 2){ obtenerresultado(); } // tecla factorial if (tecla == '!'){ resultado = factorial(numA); num1 = String(resultado); num2 = ""; cualnum = 2; haypunto = 0; } //tecla Borrar C Clear if (tecla == 'C'){ cualnum = 0; num1 = ""; num2 = ""; operador = ' '; resultado = 0; haypunto = 0; } numA = num1.toFloat(); numB = num2.toFloat(); // SALIDA A PANTALLA LCD mostrarpantalla(); } } void obtenerresultado(){ if (operador == '+') {resultado = numA + numB;} if (operador == '-') {resultado = numA - numB;} if (operador == '*') {resultado = numA * numB;} if (operador == '/') {resultado = numA / numB;} num1 = String(resultado); num2 = ""; cualnum = 2; haypunto = 0; } void mostrarpantalla(){ lcd.clear(); lcd.setCursor(0,0); // muestra decimales = 3 lcd.print(numA,3); if (numB!=0){ lcd.setCursor(0,1); lcd.print(numB,3); } lcd.setCursor(mp-2,0); lcd.print(operador); } // ------ Funcion Factorial ---- float factorial(float n){ float resultado = 1; int i = 2; for (i = 2; i<=n; i++){ resultado = resultado*i; } return resultado; }