//admitir que não exista movimento curvo
int encoder1signal,encoder2signal,countencoderesq,countencoderdir;
#define botaoresultado 4
struct Vectorpos {
float distance;
float angle;
};
Vectorpos Position [100];
void setup() {
Serial.begin(115200);
pinMode(botaoresultado, INPUT_PULLUP);
}
void loop() {
encoder1signal = map(analogRead(A0),0,1023,1,-1);
encoder2signal = map(analogRead(A1),0,1023,-1,1);
if (encoder1signal != 0) {
countencoderesq += encoder1signal;
imprime();
}
if (encoder2signal != 0) {
countencoderdir += encoder2signal;
imprime();
}
if (digitalRead(botaoresultado)==LOW){
static float anguloacumulado = 0;
static int i = 0;
float deltaesq = countencoderesq * 0.94;
float deltadir = countencoderdir * 0.94;
float dist = (deltaesq+deltadir)/2;
float angulodorobo = (180*(deltaesq-deltadir))/(13*PI); //largura do robô=13 ; conversão de RAD para DEG
anguloacumulado = anguloacumulado + angulodorobo;
Position[i].distance = dist;
Position[i].angle = anguloacumulado;
i++;
Serial.print("Distância percorrida nesse trecho: ");
Serial.print(dist);
Serial.print("cm ");
Serial.print(" Com ângulo absoluto: ");
Serial.print(anguloacumulado);
Serial.println("°");
for (int cont=0; cont<i; cont++){
Serial.print(Position[cont].distance);
Serial.print("cm ");
Serial.print(Position[cont].angle);
Serial.println("°");
}
//ver se precisa zerar a contagem dos encoders
}
delay(25);
}
void imprime(){
Serial.print("Esquerda: ");
Serial.print(countencoderesq);
Serial.print(" Direita: ");
Serial.println(countencoderdir);
}