Estou fazendo uns testes com um motor 360 graus, mas está me deixando louco um problema
O código que estou usando é o seguinte.
#include <Servo.h>
Servo myservo;
double pos = 0;
char c_pos[3];
int count = 0;
void setup()
{
myservo.attach(9);
Serial.begin(9600);
Serial.println("Inicializado");
}
void loop()
{
int number;
int algarismo;
while (Serial.available())
{
char c = Serial.read();
Serial.print("Lido ");
Serial.println(c);
if (c == '\n')
{
Serial.print(" Count ");
Serial.print(count);
Serial.println("Contando ");
for (int i = 0; i < count; i++)
{
Serial.print(" i ");
Serial.print(i);
Serial.print(" Potencia ");
Serial.print(pow(10, count - 1 - i));
Serial.print(" Numero C ");
algarismo = c_pos[i] - 48;
Serial.print(algarismo);
Serial.print(" Expon ");
int expon = count - i -1;
Serial.print(expon);
number = (int)pow(10, expon);
Serial.print(" number pow ");
Serial.print(number);
number = number * algarismo;
pos = int(pos + number);
Serial.print(" pos ");
Serial.println(pos);
}
Serial.println(" ");
Serial.print("Posicao ");
Serial.print(pos);
Serial.println("---");
myservo.write(pos);
count = 0;
pos = 0;
}
else
{
c_pos[count] = c;
count++;
}
}
}
O resultado sempre que digito 100 é esse:
Count 3Contando
i 0 Potencia 100.00 Numero C 1 Expon 2 number pow 99 pos 99.00
i 1 Potencia 10.00 Numero C 0 Expon 1 number pow 10 pos 99.00
i 2 Potencia 1.00 Numero C 0 Expon 0 number pow 1 pos 99.00
Posicao 99.00---
se eu digito 100, fica em 99 se eu digito 200 fica em 198.
Não encontro onde pode ser meu erro, estou a duas noites com isso, se puderem me dar uma ajuda, agradeço