Classe+StepperRobot+-+Outros+recursos

Home > Robótica > Bibliotecas **Recursos** > RunTimer > Timer2 > CircularBuffer > SerialLog > ActionPlan **Dispositivos** > Ultrassom > Array de sensores > NRF24L01 > Wireless log > RF24Control **Movimento** > StepperMotor > StepperMotorTm > StepperRobot Inicialização > StepperRobot Operação > **StepperRobot Recursos**

Monitoramento
Para verificar o status interno da classe foram implementados os seguintes métodos:

Retorna true se o robô está em movimento ou false se não.
 * boolean isMoving **

Retorna true se o modo meio passo está ativo, false se não.
 * boolean halfStep **

Retorna true se o robô está desacelerando, false se não.
 * boolean onDecel **

Retorna o código do movimento corrente, ou -1 se o robô não está em movimento.
 * char currentMoveType **

Posicionamento
Conforme o robô vai executando movimentos, a classe mantém um controle de posição e orientação do robô. Para obter essas informações, foram implementados os métodos abaixo. O valores têm como referência a posição inicial do robô. **//Point2d//** é uma estrutura que contém dois valores //float// x e y, declarada no arquivo //pbotDefs.h//. O sistema de coordenadas é um plano cartesiano xy onde, na posição inicial, o eixo y é positivo diretamente à frente do robô e negativo atrás. O eixo x é positivo à direita e negativo à esquerda. O robô começa na posição (0,0), rotação 0 e direção (0,1). Por exemplo, se logo depois de ligado o robô fizer um giro de 90 graus à direita usando o movimento **//mvSpinR//**, então ao final do movimento os novos valores serão posição (0,0), rotação 90 e direção (1,0). Esse controle é feito após cada passo executado, então os valores estão sempre atualizados.

Retorna a rotação do robô em relação à posição inicial. O valor é retornado em graus.
 * float getRotation **

A direção é um vetor com módulo 1 que indica a rotação do robô em forma vetorial. Esse formato é mais indicado para alguns cálculos relacionados ao posicionamento.
 * void getDirection(Point2d* dir) **

Retorna a posição atual do robô na forma de coordenadas (x,y).
 * void getPosition(Point2d* pos) **

Eventos
Outra forma de monitorar estados dentro do robô é capturar os eventos que ele dispara. Até o momento estão implementados os seguintes eventos:

Evento disparado imediatamente antes de iniciar um movimento.
 * void onBeforeMove(char movType, float param) **

Evento disparado imediatamente depois de completar um movimento.
 * void onAfterMove(char movType, float param) **

Este evento só é disparado se for feita uma requisição chamando o método **//setTravelledDistReport//** descrito abaixo. É disparado sempre que o robô percorre a distancia informada na requisição´ou quando o movimento é finalizado. Movimentos que não modificam a posição do robô não disparam esse evento. É o caso dos movimentos **//mvBrake//** e os dois do tipo **//Spin//**.
 * void onTravelledDist(float dist, float moveDist) **
 * ** //dist// ** : distância percorrida desde o último evento.
 * ** //moveDist// ** : distância percorrida desde o início do movimento.

Ativa/desativa o disparo de eventos **//onTravelledDist//**. Os eventos serão disparados sempre que o robô percorrer a distância informada. O valor zero no parâmetro **//dist//** desativa o disparo dos eventos.
 * void setTravelledDistReport(float dist) **

Este é o equivalente de rotação do evento acima. Quando o evento é ativado pelo método setRotationArcReport, o evento é disparado sempre que a rotação varia o arco informado. Movimentos que não mudam a rotação, não disparam o evento. É o caso dos movimentos mvBrake, mvAhead e mvBack.
 * void onRotationArc(float arc, float moveArc) **
 * // **arc** // : variação desde o último evento.
 * // **moveArc** // : variação desde o início do movimento.

Ativa/desativa o disparo de eventos **//onRotationArc//**. Os eventos serão disparados sempre que a rotação variar o arco informado no parâmetro **//arc//**. O valor zero no parâmetro desativa o disparo dos eventos.
 * void setRotationArcReport(float arc) **