Gerador de Movimentos
É bem mais confortável e prático desenvolver os movimentos através de uma interface gráfica. Por isso, desenvolvi o JARVIS_mgen, que foi feito em .NET (Visual Basic 2015), já que se trata de um projeto simples e rápido. Por enquanto (maio/2016) o programa se encontra, em sua maioria, em Português (do Brasil), então peço desculpas aos leitores não-brasileiros.
Através do JARVIS_mgen você pode estabelecer a conexão TCP simplesmente ajustando o IP e clicando em “Inicializar”. Além de fazer a conexão, este botão também inicializa os valores mínimos e máximos de cada servo (que também pode ser feita através do arquivo “init.seq”).
Abaixo está a tela do JARVIS_mgen, e uma explicação sobre cada controle da janela.
O botão OFF, como o nome sugere, envia o comando OFF (que desliga todos os servos).
Existem controles deslizantes (horizontais e verticais) para cada servo, onde se pode definir também os valores mínimos e máximos dos pulsos (dentro das caixas de texto); estes valores *não* são guardados, então caso precise mudar, tome nota e altere no código do programa. A letra em cada controle refere-se ao servo (A=0, B=1, C=2, etc.). A checkbox serve para mover simultaneamente mais de um servo, sendo o caixa marcada (com um V) para mover na mesma direção e desmarcada (em branco) para mover na posição oposta; isso só serve se você estiver movendo um controle com a caixa indeterminada (com o quadrado, como ver por padrão). O botão >> em cada controle de servo serve para inserir a posição atual na lista de movimentos para execução, por exemplo, colocar o servo A na posição 100 e pressionar este botão fará inserir A100 na lista embaixo do botão LIMPAR. Aliás, este botão limpa as posições inseridas ali.
Atenção: os servos se movimentarão APENAS se a caixa ATIVAR estiver marcada. Isto é por medida de segurança, já que você pode esquecer (como eu, no começo) e mover as barras de rolagens fazendo os servos se movimentarem inesperadamente, podendo causar acidentes.
O botão PAUSA insere uma pausa de tempo (com o comando ~). O botão DESLIGAR insere o desligamento de um determinado servo (comando !).
A ideia é inserir tudo que será executado nesta lista e depois usar um dos botões de execução. É possível deletar posições da lista com o botão Delete e editá-los com um duplo-clique. A edição é particularmente necessária para que você possa inserir movimentos simultâneos (com o comando *). E nada impede de transformar um comando em outro, pois você pode inserir uma pausa (~300), dar um duplo-clique nela, e transformá-la em uma chamada para um áudio (@r2d2.mp3) ou para imagem (#deadpool.img). Contanto que nenhum comando fique errado, você pode alterar a lista a vontade com o duplo-clique.
O botão EXECUTAR (embaixo da lista de posições) envia cada comando separadamente e faz as pausas manualmente, diferente do botão EXECUTAR TUDO que, como o nome sugere, envia tudo de uma vez para que a Linkit ONE se encarregue da execução. Há diferenças entre estes dois botões, no que se refere a execução dos movimentos, um poderá ser mais lento do que o outro, então é recomendável testar com ambos. A caixa de texto embaixo do botão EXECUTAR refere-se a quantidade de vezes que a sequência será executada (vale para ambos).
Os botões P/ CIMA e P/ BAIXO servem para mudar a ordem da posição selecionada na lista. O botão <- cria uma referência para o movimento selecionado do lado direito, colocando-o na lista de posições (^arquivo.seq). Já o botão << carrega a sequência para a lista (ao invés de referenciar); note que só é possível carregar um arquivo por vez desta maneira para a lista, pois a mesma é limpa antes. O botão >> grava a sequência de posições em um arquivo de movimento (ao informar o nome não coloque o .seq, ele será inserido automaticamente). O botão EXECUTAR embaixo da lista de movimentos gravados executa diretamente o movimento selecionado.
Vale ressaltar que todos os botões de execução, quando fazem referência a movimentos existentes, como por exemplo inicial.seq, andar.seq, chute.seq, etc., não enviam o comando como lido, ou seja, não é enviado “^andar.seq” e sim o conteúdo do arquivo andar.seq. Isso porque, caso você esteja alterando um movimento que já existe no armazenamento (interno ou cartão de memória) da Linkit ONE, você estaria executando o que está nela e não o que você está editando no computador. Posto isto, vale ressaltar que pode haver diferença no tempo de execução a partir do JARVIS_mgen e a partir do momento que o movimento está no armazenamento. Sempre teste ambos e faça ajustes de acordo. Procure não enviar sequências muito longas, porque diferente da execução interna, onde há referências de um movimento a outro, os comandos são todos enviados (se você tem 4 movimentos com 10 posições cada um, serão enviadas as 40 posições). Referências a áudios (.mp3) e imagens (.img) vão sempre se referir ao que está no armazenamento (interno ou cartão SD).
O botão “Converter arquivo do LCD Assistant” converte o arquivo gerado pelo LCD Assistant, que é um aplicativo muito útil para se trabalhar com LCDs, para um arquivo .img que será utilizado internamente na Linkit ONE para exibição de imagens no OLED. Farei um post separado explicando como formatar e gerar estas imagens.
Só é possível fazer a conexão TCP com apenas um cliente e não descobri um jeito de determinar que o cliente desconectou, então coloquei para, ao fechar o JARVIS_mgen, ele enviar o comando RESET, que faz a Linkit ONE aguardar um novo cliente TCP (para uma próxima execução do JARVIS_mgen). Sem isso, você precisaria desligar e ligar a placa para conseguir conectar novamente (ou ligar com o cabo e enviar o RESET pelo Monitor Serial).
Bom, devo estar esquecendo de comentar algo, mas este post já está grande demais.