Estou tendo uma problema ao tentar adquirir dados para um cálculo.
Basicamente o código vai calcular o comprimento total de uma uma bobina a partir de três valores:
d1 = diâmetro interno
d2 = diâmetro externo
T = espessura
Código:
float d1 = 0, d2 = 0, T = 0, Lm = 0, Lt = 0;
int modo = 1, cont = 0;
const byte V [8] [3] = {{0,0,0},
{0,0,1},
{0,1,0},
{0,1,1},
{1,0,0},
{1,0,1},
{1,1,0},
{1,1,1}};
const int tecla [4] [3] = {{1,2,3},
{4,5,6},
{7,8,9},
{10,0,11}};
void setup() {
Serial.begin(9600);
}
void loop() {
switch(modo){
case 1:
/* Modo 1: Armazena os dados da bobina
d1: diâmetro interno
d2: diâmetro externo
Lm: comprimento que será feita a manutenção
T = espessura da bobina */
Serial.println("Digite o diâmetro interno:");
while(cont == 0){
if(Serial.available() > 0){
d1 = Serial.parseFloat();
cont = 1;
}
}
Serial.println("Digite o diâmetro externo:");
while(cont == 1){
if(Serial.available() > 0){
d2 = Serial.parseFloat();
cont = 2;
}
}
Serial.println("Digite a espessura:");
while(cont == 2){
if(Serial.available() > 0){
T = Serial.parseFloat();
cont = 3;
}
}
Serial.println("Digite comprimento da manutenção:");
while(cont == 3){
if(Serial.available() > 0){
Lm = Serial.parseFloat();
cont = 0;
}
}
Lt = TamanhoTotal(d1, d2, T);
Serial.println(d1);
Serial.println(d2);
Serial.println(T);
break;
}
}
Inicialmente ele funciona, a primeira variável (d1) é armazenada normalmente, porém, ele pula a segunda (d2) e vai para a terceira, eu digito a terceira e envio e ele pula a quarta (Lm). E no fim das contas a única variável realmente armazenada é a primeira, todas as outras três ficam em 0.00 (print).
Talvez isso seria um problema com esse parseFloat? Que estaria pegando sempre o primeiro valor válido do buffer? Ou seria com o Serial.available? Ou com algo que ainda não conheço?