Important changes to forums and questions
All forums and questions are now archived. To start a new conversation or read the latest updates go to forums.mbed.com.
10 years, 7 months ago.
UART/SERIAL CALCULATOR HELP
I think I have the code for a single digit 4 function calculator, the interface is the terminal
I need help changing this code to a 2 digit 4 function calculator, any help is appreciated.
the code is attached /media/uploads/larcoc/final_project_micro2.docx
1 Answer
10 years, 7 months ago.
A very very simple way of doing it. I write simple because there is no check about the char to verify if it is an digit or other.
#include "mbed.h"
Serial pc(USBTX, USBRX);
int main()
{
while(1)
{
int num1;
int num2;
int func;
int sol;
char a;
pc.printf("enter first number\n");
a = pc.getc();
num1 =( a - 48)*10; // first digit * 10;
a = pc.getc();
num1 += a=48;
pc.printf("%d\n ", num1);
pc.printf("enter second number\n");
a = pc.getc();
num2 =( a - 48)*10; // first digit * 10;
a = pc.getc();
num2 += a=48; // add to num1 the digit.
pc.printf("%d\n ", num2);
pc.printf("enter function (1 for add, 2 for subtract, 3 for multiply, 4 for divide)\n");
char c = pc.getc();
func = c - 48;
pc.printf("%d\n ", func);
if (func == 1)
{
pc.printf("solution\n");
sol = (num1 + num2);
pc.printf("%d\n ", sol);
}
if (func == 2)
{
pc.printf("solution\n");
sol = (num1 - num2);
pc.printf("%d\n ", sol);
}
if (func == 3)
{
pc.printf("solution\n");
sol = (num1 * num2);
pc.printf("%d\n ", sol);
}
if (func == 4)
{
pc.printf("solution\n");
sol = (num1 / num2);
pc.printf("%d\n ", sol);
}
}
}
to check if the char is a digit you could use something like :
do
{
a = pc.getc()-'0';
} while (a<0 || a>9);
Personally I'd replace the series of if (func== n ) with a single switch statement. It makes the code more readable:
switch(func) {
case 1:
pc.printf("solution\n%d\n",num1+num2);
break;
case 2:
pc.printf("solution\n%d\n",num1-num2);
break;
case 3:
pc.printf("solution\n%d\n",num1*num2);
break;
case 4:
if (num2 !=0)
pc.printf("solution\n%.2f\n",(float)num1/num2); // slightly different so that it doesn't round down to the nearest whole number.
else
pc.printf("division by 0 error\n");
break;
default:
pc.printf("invalid function\n");
break;
}
thanks for the quick response!
posted by Carlos Larco 02 Apr 2015