سلام
می خواستم با آردوینو و چندتا ماژول یه ماشین حساب درست کنم، ولی وقتی اعداد بزرگ را در هم ضرب می کنم حاصلضرب اشتباهی می دهد!
به عنوان مثال اگر عدد 9999999 را در 100 ضرب کنم نتیجه حاصل ضرب درست است، ولی اگر 9999999 را در 1000 ضرب کنم نتیجه ی اشتباهی می دهد! چرا؟
مشکل از کدهاست یا آردوینو توانایی محاسبه ندارد؟

این هم کد ماشین حساب:
فقط کافیه کد را روی برد کامپایل کنید و با ارتباط سریال محاسبات را انجام دهید و نیاز به اتصال ماژولی نیست.
/* Serial arduino calculator in this project, you can make basic arithmetic with the help of arduino, almost like a very rustic calculator. It accepts two numbers and a signal, and makes the operation, witch can be of +, -, * or /. E.G. : send "2+3" (Without quotes and with no space separing the info), and arduino answers 5. Digit "7-3" and arduino te responde com 4. Criado por João Paulo Rodrigues PoltronieriThis code is on public domain
*/// first of all, create variables to store
// the information sent to arduinolong number1; // first number of the calculation,
// sent through the Serial monitor// If you take a look, it’s a long varible, so
// we’re able to use big numberslong number2; // second number sent through the SM
char calSignal; // create a char variable to store
// the calcuation signal.long result; // result of the calculation
void setup() {
Serial.begin(9600); // begins serial communications
Serial.println(“Send me a calculation”);
Serial.println(“E.G. : 2+3”);
Serial.println();
// prints this to test serial communication, and
// prints a line space
}void loop() {
while(Serial.available() > 0) {
// while there are dada being sent to arduino,number1 = Serial.parseInt(); // number1 will be the first number // Note the use of "Serial.parseInt, so, // in case you use 23, it stores in // number1 the number 23 // if we used Serial.read(), it would // only store 2 calSignal = Serial.read(); // calSignal will be the first // info after the first number number2 = Serial.parseInt(); // stores the second // number in number2 resolucao(); // Custom function to solve the calculations Serial.println("Resultado = "); Serial.println(result); // Prints the result of the calculation Serial.println(); // jumps a line Serial.println("Outra conta, por favor"); // prints Serial.println(); // jumps a line}
}void resolucao() { // Custom function that
// solves the calculationsswitch (calSignal) {
// Here we use “switch…case” to save some space on
// the sketch. It’s, basicaly, a function that verifies
// various “if” statements.// Here, it verifies what's the value held by // calSigna. Basicaly, it verifies the "signal" // of the calculation case '+' : // if calSignal is '+' result = number1 + number2; // sums the numbers // and makes result hold the value of the calculation break; // break to exit the "case" case '-' : // if calSignal is '+' result = number1 - number2; // subtracts the numbers // and makes result hold the value of the calculation break; // break to exit the "case" case '*' : // if calSignal is '+' result = number1 * number2; // multiplies the numbers // and makes result hold the value of the calculation break; // break to exit the "case" case '/' : // se calSignal for '/' result = number1 / number2; // divides the numbers // and makes result hold the value of the calculation // PS: in case the division isn't exact, the result // will be the nearest integrer break; // break to exit the "case" default : // If it's not any of these... Serial.println("CONTA INVÁVIDA"); // Creates an "error" Serial.println(); //result = 0;
}
}
