Comunicação Serial - Arduino e Game Maker
Versão de 15maio2012, por Fabrício Silva
Esse tutorial tem como objetivo a implementação e teste da comunicação serial entre o Game
Maker e a placa Arduino. Para a elaboração deste tutorial foi usada a placa Arduino Diecimila e
o Game Maker versão 8.1.135 Standard. Esse tutorial não funciona na versão Lite.
COMPONENTES NECESSÁRIOS
■
RS232.dll - Fundamental para o funcionamento da comunicação serial. Esse arquivo
deve estar no mesmo diretório dos arquivos do Game Maker;
■
Arduino Software - Programa para escrever código e gravar na placa. Ele pode ser
adquirido em http://arduino.cc. A versão utilizada aqui é a 1.0;
■
Software Game Maker e os arquivos de teste (Teste_ArduinoGM.gm81 e
Teste_ArduinoGM.gb1);
■
GMBlink.ino - Programa que será gravado na Arduino.
PROCEDIMENTOS
1. Instalando, configurando e programando a Arduino
a. Conecte a Arduino no computador via USB. Verifique se o led PWR está ligado,
ele indica que a placa está alimentada. Caso contrário há algum problema com a
sua placa ou o cabo.
b. No Gerenciador de Dispositivos, em Portas, verificar em qual porta USB está
conectado
a
placa.
Nesse caso a placa está na porta COM20. Foi fácil de identificar por ser o único
componente ligado numa porta USB. Talvez seja um pouco mais trabalhoso
identificar qual é a porta da placa enquanto outros dispositivos estão ligado à
USB Serial Port.
c. Para esse projeto, a dll exige que a Arduino esteja na porta 1, 2, 3 ou 4. Por isso
acesse o menu propriedades clicando com o botão esquerdo do mouse na porta
da placa.
Em Definições de porta, acesse as opções avançadas e escolha outra porta
entre COM1 e COM4. A figura abaixo mostra que posso escolher entre a porta
COM1 e COM2, visto que as outras estão sendo utilizadas. Caso nenhuma das
quatro estiverem disponíveis, será necessário descobrir qual dispositivo está em
uma das quatro e modificar a sua porta.
d. Agora abra o projeto arquivo do programa que será gravado no Arduino, dentro
da pasta GMBlink. No menu Tools, verifique em Board se a versão da placa
selecionada é a que você está utilizando. Verifique também em Serial Port se a
porta utilizada está selecionada. Na parte inferior da janela é possível conferir a
placa e porta selecionada.
e. Em File, clique em Upload (Ctrl + U). Na parte inferior da janela deve ser
verificado a mensagem “Done uploading” que indica que o programa já foi
transferido para a placa. Agora a Arduino já está configurada corretamente e
programada.
2. Usando o programa teste do Game Maker
a. Abra o arquivo Teste_ArduinoGM.gm81.
b. No objeto obj_control, abra o código do evento Create e edite a variável “com”
para o número da porta que está usando. Na figura abaixo a variável recebeu o
valor 2, que é o número da porta que está sendo usado nesse tutorial.
c. Confirme a alteração clicando na seta verde, primeiro item do menu superior da
janela do código.
d. Na no menu Run, clique em Run normally, ou aperte F5 (atalho).
FUNCIONAMENTO DOS PROGRAMAS
A comunicação entre o Arduino e o Game Maker ocorre devido a algumas funções específicas,
dependendo do sentido da comunicação. Na Arduino, as funções Serial.read() e Serial.print()
recebe (lê) e envia (imprime) dados. No GM, as funções para envio e leitura de dados são,
respectivamente, RS232_WriteByte e RS232_ReadByte. Os parâmetros dessas últimas não
são muito conhecidos, visto que a biblioteca de scripts da comunicação foi retirado de um
fórum do Game Maker, e o autor não explicou essas funções. Link do tópico:
http://gmc.yoyogames.com/index.php?showtopic=530696.
Através da interface do “jogo” no GM, é possível entendermos o funcionamento do teste. O
Game Maker envia dados sobre o estado do led e a velocidade que ele deve piscar para a
Arduino, que interpreta e executa o comando com o led da própria placa. Dessa forma estamos
testando a comunicação GM para Arduino. Em resposta, o Arduino envia uma informação para
o GM falando em qual estado está.
Por exemplo, quando o programa do GM inicia, ele inicializa o estado em 1 (desligado), e a
velocidade 1. Ao apertar espaço, o estado passa para 2 e é enviado para a Arduino que liga o
led e envia para o GM que agora ela está no estado 2. O GM então atualiza o estado que o led
está, e dá próxima vez que a tecla espaço for pressionada, ele vai saber que estava no estado
2 e deve passar para o 3. E na próxima, do estado 3 para o estado 1, e assim segue.
Esses dados são enviados num pacote inteiro de dois algarismos, onde o primeiro representa a
velocidade e o segundo o estado. Para concatenar os dados para envio usa-se a formula
concat = estado+10*(6-velocidade). Assim, 11 representa desligado e velocidade 5, 53
piscando com velocidade 1, e assim por diante. Essa inversão na velocidade foi feita porque no
programa da Arduino, a velocidade é tratada como atraso (delay, em milisegundos) entre led
ligado e desligado, logo quanto maior a velocidade, menor deve ser esse delay. Depois a
velocidade é convertida para milisegundos no programa da placa, pela fórmula vel=5*(auxmode), onde aux-mode é o primeiro dígito do pacote multiplicado por 10.
Exemplificando com um pacote:
Supondo que queremos o led piscando com velocidade 4, logo enviamos o pacote 23. No
programa da Arduino, a variável aux recebe o número 23. A variável mode, que representa o
estado do led, recebe 3, o digito mais a direita (mode=aux%10). A variável vel, que representa
o delay, recebe 20, o digito da velocidade multiplicado por 10 (aux-mode = 23-3). Depois ele é
multiplicado por 5, ficando vel = 200, (vel = 5*(aux-mode)). Ou seja, o led vai acender, ficar 200
ms ligado, desligar por mais 200 ms, e retornar o ciclo. A tabela abaixo mostra a relação entre
a velocidade, pacote e o delay, tomando o estado 3 como fixo.
Velocidade
Pacote
Delay (ms)
1
2
53
43
250
200
3
4
33
23
150
100
5
13
50
INTERFACE DO PROGRAMA TESTE
OBSERVAÇÕES
1. Se trocar muito rápido de estados, apertando espaço, é possível que o programa não
interprete devido aos delays.
Download

Tutorial Comunicação Arduino e Game Maker