Mbed Simple C Калькулятор - PullRequest
       29

Mbed Simple C Калькулятор

0 голосов
/ 30 ноября 2018

Я создал код для реализации клавиатуры на микроконтроллере Mbed.Код проверяет введенный контакт по сравнению с правильным контактом.

Теперь мне нужна помощь для преобразования этого кода в простой калькулятор.Я не знаю, как преобразовать массив символов в строку, чтобы вернуть целочисленные значения.Я хочу иметь возможность ввести номер один, выбрать операцию, ввести номер 2 и вычислить.Например: 10 + 21 = 31

Я хотел бы иметь возможность назначить операции (+, -, /, *) для клавиш 1-4.Буду признателен за любую помощь!

edit: я пытался использовать 'value = atoi (str)' безуспешно.Будет ли изначально выгоднее создавать целочисленный массив вместо символьного массива?

#include "mbed.h"

DigitalOut led2(LED2);
DigitalOut led1(LED1);               // Declare LED
DigitalOut rows [4]= {PA_5, PA_1, PA_2, PA_3};       // Declare Rows
DigitalIn columns [3]= {PB_6, PB_7, PD_0};           // Declare Columns
char numpad [4] [3]= {
    {'1', '2', '3'},
    {'4', '5', '6'},
    {'7', '8', '9'},
    {'*', '0', '#'},
};
int c= 0;

int main (){
    char detected [6] = " ";
    char strCheck[]   = "3333#"; 
    led2 = 1;

    columns [0]. mode (PullUp);
    columns [1]. mode (PullUp);
    columns [2]. mode (PullUp);
    char read; 

    while (1){
        for (int i=0; i<4; i++){
            rows[0]= 1; 
            rows[1]= 1;
            rows[2]= 1; 
            rows[3]= 1;
            rows[i]= 0;
            wait (0.01);
            for (int j= 0; j<3; j++) {
                if (columns [j]== 0) {
                    read= numpad [i][j];
                    printf("%c \n\r", read);
                    detected [c]= numpad [i][j];
                    detected [c+1]= '\0';
                    printf("%s \n\r", detected);
                    c++;
                         if (c==5) {
                         c= 0;
                    }
                    wait (0.005);
                    while (columns [j]== 0);
                }
            }
        }
        if (strcmp (detected, strCheck)== 0){
            led1 = 1;
            led2 = 0;
            printf ("%s \n\r", detected);
            c = 0;
            detected[0]= '\0';
        }
        else if (read== '*') { 
            led1 = 0;
            led2 = 1;
            c = 0;
            detected [0] = '\0';
        }  
    }
}
...