SOBRE

LightBlog
Responsive Ads Here

terça-feira, 29 de abril de 2014

#12 Utilizando joystick no Arduino com linguagem Python

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);
  } 
}