Comunicação e Movimentos – Homúnculo

Comunicação e Movimentos

A comunicação com o Jarvis pode se dar de três maneiras diferentes:

  1. Pela porta serial (Serial), através do Monitor Serial ou qualquer outro aplicativo do tipo;
  2. Por uma conexão TCP na porta 2390 do IP obtido da rede wi-fi;
  3. Por uma conexão serial Bluetooth (SPP).

A comunicação por Bluetooth só serve para movimentos, por enquanto (maio/2016), mas em breve funcionará como as outras duas, recebendo quaisquer comandos. Os comandos devem seguir o que foi apresentado no post Protocolo, com a possibilidade de múltiplos comandos separados pelo caracter “|” (tal que). A princípio recomendo utilizar o Monitor Serial do Arduino IDE, pois você terá informações de depuração na tela, o que torna mais fácil identificar problemas. Faça testes com envios simples, como…

A100|B90|C30

… e outros mais complexos como:

*A120;B70;C30:5

E veja os servos se movimentarem. Esta também é uma ótima oportunidade para ajustá-los, conforme explicado no post Preparativos.

O que acontece dentro da Linkit ONE é o seguinte:

  1. Ela espera dados por uma das três maneiras acima, continuamente;
  2. Ao receber algo, ela quebra a informação em tokens (pequenos pedaços de texto), através da separação pelo caracter “|”;
  3. Ela itera sobre esses tokens executando cada um, de acordo com o comando dado.

E assim o loop se repete indefinidamente. A quebra é realizada através da função split(). Alguns comandos são palavras inteiras (como RESET e OFF, por exemplo), já outros são identificados pelo primeiro caracter (como ^, @, #, ~, etc.). Caso nenhum comando seja reconhecido, assume-se que é um servo com uma posição (como A100, por exemplo).

Os tokens também são subdivididos, já que normalmente possuem mais de um elemento. Para isso, existem as funções:

getValue(s) – extrai o valor numérico do servo (A=0, B=1, etc.) ou simplesmente o valor numérico (no caso da pausa);

getExtraValue(s) – extrai o valor numérico depois do caracter “:” (como ao movimentar múltiplos servos [*], por exemplo).

Funções com nomes auto-explicativos são:

offServo(servonum) – Desliga o servo especificado;

moveServo(servonum, pos, velocidade) – Movimenta o servo especificado para a posição desejada com n passos (velocidade);

moveServos(servonums[], poss[], velocidade) – Movimenta múltiplos servos para suas posições, com n passos (velocidade);

playServo(s) – Interpreta o texto e chama moveServo();

playServos(matriz) – Recebe uma matriz e chama moveServos();

E basicamente estas são as funções necessárias para a movimentação. Para maiores detalhes, “use the Source, Luke!”

No próximo post veremos outras funções do código.

 

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Translate »