Problema de calculadora simple [cerrado]

0

Así que estoy tratando de crear un programa de calculadora en arduino usando estos códigos.

void loop()
{
    char keypressed = myKeypad.getKey();
    if (keypressed != NO_KEY)
    {
        //Serial.print(keypressed - 48);
        Serial.print(keypressed);

        if(keypressed > 47 && keypressed < 58)
        {
              if(!mySwitch)
              {
                  num1 = (num1*10) + (keypressed - 48);
              }else{
                  num2 = (num2*10) + (keypressed - 48);
              }
         }

         if(keypressed == 61)
         {
             answer = num1 + num2;
             Serial.println(answer);    
             num1 = 0;
             num2 = 0;
             mySwitch = false;
         }else if (keypressed == 43)
         {
             mySwitch = true;
         }
    }
}

Este código es para sumar los números. Hago un bucle anidado

if(keypressed == 61)
{
    if(keypressed == 43){
        answer = num1 + num2;
        Serial.println(answer);    
        num1 = 0;
        num2 = 0;
        mySwitch = false;
    }else if (keypressed == 43){
        mySwitch = true;
    }

    if(keypressed == 45){
        answer = num1 - num2;
        Serial.println(answer);    
        num1 = 0;
        num2 = 0;
        mySwitch = false;
    }else if (keypressed == 45){
        mySwitch = true;
    }
}

solo acepta el valor y no lo calcula después de presionar el signo "=" por cierto "61", "43", "45" es el valor ASCII de "=", "+", "-"

    
pregunta NewInEverything

1 respuesta

1

Suponiendo que entendí lo que está tratando de hacer (restar cuando se presiona '-' y la adición cuando se presiona '+'), use lo siguiente:

#include <Keypad.h>

const byte numRows = 4; //number of rows on the keypad
const byte numCols = 4; //number of columns on the keypad

//keymap defines the key pressed according to the row and columns just as appears on        the keypad
char keymap[numRows][numCols] =
{
    {'1', '2', '3', '+'},
    {'4', '5', '6', '-'},
    {'7', '8', '9', 'C'},
    {' ', '0', '=', 'D'}
};

//Code that shows the the keypad connections to the arduino terminals
byte rowPins[numRows] = {11, 10, 9, 8}; //Rows 0 to 3
byte colPins[numCols] = {7, 6, 5, 4}; //Columns 0 to 3

//initializes an instance of the Keypad class
Keypad myKeypad = Keypad(makeKeymap(keymap), rowPins, colPins, numRows, numCols);

long num1, num2, answer;
boolean mySwitch = false;
boolean do_subtraction_flag = false;  // when true we will apply subtraction

void setup()
{
    Serial.begin(9600);
    num1 = 0;
    num2 = 0;
}

//If key is pressed, this key is stored in 'keypressed' variable
//If key is not equal to 'NO_KEY', then this key is printed out
//if count=17, then count is reset back to 0 (this means no key is pressed during the   whole keypad scan process


void loop()
{
    char keypressed = myKeypad.getKey();

    if(keypressed != NO_KEY)
    {

        //Serial.print(keypressed - 48);
        Serial.print(keypressed);

        if(keypressed > 47 && keypressed < 58)  // is between '0' and '9'
        {
            if(!mySwitch)
            {
                num1 = (num1 * 10) + (keypressed - 48);
            }
            else
            {
                num2 = (num2 * 10) + (keypressed - 48);
            }
        }

        if(keypressed == '=')
        {
            if(do_subtraction_flag)  // we want to subtract the numbers
            {
                answer = num1 - num2;
            }
            else  // we want to add the numbers
            {
                answer = num1 + num2;
            }

            Serial.println(answer);
            num1 = 0;
            num2 = 0;
            mySwitch = false;
            do_subtraction_flag = false;
        }
        else if(keypressed == '+')
        {
            mySwitch = true;
        }
        else if(keypressed == '-')
        {
            mySwitch = true;
            do_subtraction_flag = true;
        }
    }
}

He añadido una variable booleana de marca denominada do_subtraction_flag
La bandera se establece según el botón utilizado, falso para la suma y verdadero para la resta.
Su valor se usa cuando se presiona '=' para ejecutar condicionalmente el código que resta num2 de num1 o los agrega.

Tenga en cuenta que he reemplazado keypressed == 61 con keypressed == '='
y keypressed == 43 con keypressed == '+'
Es mucho más fácil leer el código de esta manera.

    
respondido por el alexan_e

Lea otras preguntas en las etiquetas