void setup() {
Serial.begin(9600);
pinMode(LED_BUILTIN, OUTPUT);
}
void cleanBuffer(){
while (Serial.available() > 0){
Serial.read();
}
}
float adicao(float A, float B){
return (A + B);
}
float subtracao(float A, float B){
return (A - B);
}
float multiplicacao(float A, float B){
return (A * B);
}
float divisao(float A, float B){
return (A / B);
}
void loop(){ //formato de entrada: (num1 num2 operacao)
cleanBuffer();
Serial.print("Digite o primeiro numero:\n ");
while (Serial.available() == 0){
}
float num1 = Serial.parseFloat();
Serial.println(num1);
cleanBuffer();
Serial.print("Digite o segundo numero:\n ");
while (Serial.available() == 0){
}
float num2 = Serial.parseFloat();
Serial.println(num2);
cleanBuffer();
Serial.print("Digite a operacao (+, -, * ou /):\n ");
while (Serial.available() == 0){
}
char operacao = Serial.read();
cleanBuffer();
float resultado = 0;
bool operacaoValida = true;
switch(operacao){
case '+':
resultado = adicao(num1, num2);
break;
case '-':
resultado = subtracao(num1, num2);
break;
case '*':
resultado = multiplicacao(num1, num2);
break;
case '/':
if(num2 == 0){ //verifica se a divisao eh valida
operacaoValida = false;
} else{
resultado = divisao(num1, num2);
break;
}
}
if (operacaoValida){
Serial.print("Resultado: ");
Serial.println(resultado);
if(resultado == 0){
digitalWrite(LED_BUILTIN, LOW);
delay(250);
}
if(resultado < 0){
resultado = resultado * (-1);
}
for (int i = 0; i < abs((int)resultado); i++){ //pisca o led para num antes da vigula
digitalWrite(LED_BUILTIN, HIGH);
delay(1000);
digitalWrite(LED_BUILTIN, LOW);
delay(1000);
}
float decimal = (resultado) - abs((int)resultado);
decimal = decimal * 10;
for(int i = 0; i < abs(decimal); i++){ //pisca o led para primeiro num depois da vigula
digitalWrite(LED_BUILTIN, HIGH);
delay(500);
digitalWrite(LED_BUILTIN, LOW);
delay(500);
}
Serial.println("Sucesso");
} else{
Serial.println("Operacao invalida, tente novamente");
}
delay(1000);
}