Neste post você irá aprender como enviar comandos de um joystick
para Arduino, utilizando a porta serial.
A imagem abaixo lista os componentes necessários para a realização
deste experimento.
A imagem abaixo mostra como os componentes devem ser ligados na
protoboard. É importante que os componentes sejam ligados no Arduino quando ele
estiver desligado para não correr o risco de danificar a placa.
Após ligado os componentes conforme
a imagem acima é preciso programar o Arduino. Ligue o Arduino no computador,
abra a interface de desenvolvimento (IDE) e cole o código abaixo. As
"//" no código significam comentário, ou seja, o que for escrito após
as "//" na mesma linha a IDE do Arduino não considera como código.
Após colocar o código, pressione no menu
superior. O código, pode ser ligar led
Após
compilado o programa no Arduino é preciso compilar o programa em python, para
este exemplo foi utilizado o sistema operacional Linux. Abra o terminal de
comandos e digite:
gedit arquivo.py &
Irá abrir uma nova janela, cole o código abaixo e salve o
programa.
Programação em Python
import sys
import serial
pipe = open('/dev/input/js0', 'r') #Porta em que o controle está conectado
porta = '/dev/ttyACM0' #Porta em que o Arduino está conectado
baud_rate = 9600
action = []
spacing = 0
def escrever_porta(valor):
try:
#valor = (raw_input("Digite o valor a ser enviado:"));
Obj_porta = serial.Serial(porta, baud_rate)
Obj_porta.write(valor)
Obj_porta.close()
except serial.SerialException:
print 'ERRO: Verifique se ha algum dispositivo conectado'
return valor
while 1:
for character in pipe.read(1):
action += ['%02X' % ord(character)]
if len(action) == 8:
num = int (action[5], 16) #traduz para inteiro
percent254 = str(((float(num)-128.0)/126.0)-100)[4:6]
percent128 = str((float(num)/127.0))[2:4]
if percent254 == '.0':
percent254 = '100'
if percent128 == '0':
percent128 = '100'
if action[6] == '01': #Botao (1, 2, 3, 4)
if action[4] == '01':
print 'Voce pressionou o botao: ' + action[7]
escrever_porta(action[7])
elif action[7] == '00': #Direita ou esquerda
if action[4] == 'FF':
print 'Voce pressionou: PARA DIREITA'
escrever_porta('D')
elif action[4] == '01':
print 'Voce pressionou: PARA ESQUERDA'
escrever_porta('E')
elif action[7] == '01':
if action[4] == 'FF':
print 'Voce pressionou: PARA BAIXO'
escrever_porta('B')
elif action[4] == '01':
print 'Voce pressionou: PARA CIMA'
escrever_porta('C')
action = []
Conecte o joystick no computador e após salvar o
programa, abra novamente o terminal e escreva:
python arquivo.py
Agora é possível
testar o joystick, mostrando os resultados no Arduino.#define baixo A4
#define cima A2
#define direita A3
#define esquerda A1
//...
void setup()
{
Serial.begin(9600);
pinMode(cima, OUTPUT);
pinMode(baixo, OUTPUT);
pinMode(esquerda, OUTPUT);
pinMode(direita, OUTPUT);
}
void loop()
{
if(Serial.available())
{
switch(Serial.read())
{
case 'C': digitalWrite(cima, HIGH);
break;
case 'B': digitalWrite(baixo, HIGH);
break;
case 'D': digitalWrite(direita, HIGH);
break;
case 'E': digitalWrite(esquerda, HIGH);
break;
}
delay(100);
digitalWrite(cima, LOW);
digitalWrite(baixo, LOW);
digitalWrite(direita, LOW);
digitalWrite(esquerda, LOW);
}
}