Baixe o app para aproveitar ainda mais
Prévia do material em texto
Linguagem de Programação e Projetos (LPP) Professores: Antonio Eduardo Citron Wilton Moreira Ferraz Junior Comunicação sem fio com o controle do PS2 Recursos dos controles PS2 O controle do Playstation 2 têm 12 teclas analógicas sensíveis à pressão (4 teclas para direção, 4 teclas de operação: Cruz, Triângulo, Círculo e Quadrado e por fim as teclas L1, L2, R1 e R2) e 5 teclas digitais (MODE, START, SELECT, R3, L3) e 2 joysticks analógicos. Existem 2 motores dentro dos controles que podem produzir vibração com base em interações com o jogo. Recursos dos controles PS2 O controle sem fio funciona com frequência de 2,4 GHz e tem alcance de 10 metros. Também possui uma conexão óptica para envio e recebimento de dados. Este controle precisa de apenas 3 pilhas AAA para alimentação (em alguns casos, precisa apenas de 2 pilhas AAA). Onde você pode usar o controle PS2: Como controle robôs com rodas e carros de controle remoto Como controle de braços robóticos Como controle uma câmera Como controle drones Como conectar o controle PS2 ao Arduino O receptor do controlador PS2 inclui 9 pinos: Como conectar o controle PS2 ao Arduino O receptor do controlador PS2 inclui 9 pinos: Dados (Data): linha mestre para envio de dados ao escravo (MOSI) Comando (Command): linha escrava para envio de dados ao mestre (MISO) Vibração (Vibration Motor): alimentação de motores de vibração; 7,2 volts a 9 volts GND (Ground): terra dos circuitos Como conectar o controle PS2 ao Arduino O receptor do controlador PS2 inclui 9 pinos: VCC (Power): alimentação dos circuitos; 3,3 volts Atenção (Attention): Pin CS ou Chip Select para chamar o escravo e preparar a conexão Relógio (Clock): equivalente ao pino SCK para relógio Sem conexão (No Connection): não utilizado Reconhecimentio (Acknowledge): reconhece o sinal do controlador para o receptor PS2 Interface do controle PS2 com o Arduino Biblioteca PS2X Para baixar a biblioteca acesse o link: https://bityli.com/ozDyoyB https://drive.google.com/file/d/1YzoJTzRmUClJZgzmgHVNE_9_n-Da9Onw/view?usp=sharing Biblioteca PS2X As principais funções desta biblioteca são: ps2x.config_gamepad(clock, command, attention, data, Pressures? Rumble?); Define o pino do controlador e a sensibilidade à pressão e vibração dos motores. Se você quiser teclas insensíveis à pressão ou motores sem vibração, defina Pressures e Rumble como false. Esta função retorna valor para erro Biblioteca PS2X erro = ps2x.config_gamepad(13,11,10,12, true, false); ERRO DESCRIÇÃO 0 Controle Encontrado e configurado com sucesso 1 Controle não Encontrado, verifique a fiação ou reinicie o Arduino 2 Controle Encontrado, mas não aceitando comandos 3 Controle não entrou no modo detecção de clique, este modo pode não ser suportado Biblioteca PS2X ps2x.readType(); Determina o tipo de controlador detectado tipo = ps2x.readType(); TIPO DESCRIÇÃO 0 Controle não foi detectado corretamente 1 Detecção do controle DualShock 2 Detecção do controle GuitarHero. 3 Detecção do controle Sony DualShock Biblioteca PS2X ps2x.read_gamepad(boolean motor1, byte motor2); Define os valores de vibração para os motores. motor1 pode utilizar true - ligado e false - desligado. Já o motor2 que é o maior pode receber valores entre 0-255. Se a função ps2x.enableRumble() não for utilizada pode-se utilizar ps2x.read_gamepad() para ler os botões do controle GuitarHero Biblioteca PS2X ps2x.Button(button type); Retorna 1 quando a tecla específica no argumento da função é pressionada. No controle DualShock, as teclas são nomeadas da seguinte forma: Biblioteca PS2X No controle DualShock, as teclas são nomeadas da seguinte forma: Biblioteca PS2X ps2x.Analog(button type); Retorna o valor das teclas analógicas. (A ação quando a interação com uma tecla do controle). Exemplo: Quando a tecla select é mantida pressionada a ação retornada é um valor binário que pode ser convertido para outras bases numéricas; Serial.println(ps2x.Analog(PSAB_PAD_UP), DEC); Biblioteca PS2X Mapeamento dos botões Botões direcionais: NOME FUNÇÃO PSB_PAD_UP Botão direcional para cima PSB_PAD_DOWN Botão direcional para baixo PSB_PAD_LEFT Botão direcional para a esquerda PSB_PAD_RIGHT Botão direcional para a direita Biblioteca PS2X Mapeamento dos botões Botões de ação: NOME FUNÇÃO PSB_GREEN ou PSB_TRIANGLE Botão triângulo verde PSB_RED ou PSB_CIRCLE Botão círculo vermelho PSB_BLUE ou PSB_CROSS Botão X azul PSB_PINK ou PSB_SQUARE Botão quadrado rosa Biblioteca PS2X Mapeamento dos botões Gatilhos: NOME FUNÇÃO PSB_L1 Botão 1 => gatilho lado esquerdo PSB_R1 Botão 1 => gatilho lado direito PSB_L2 Botão 2 => gatilho lado esquerdo PSB_R2 Botão 2 => gatilho lado direito Biblioteca PS2X Mapeamento dos botões Sticks (sim, você pode pressionar o stick como um botão): NOME FUNÇÃO PSB_L3 Botão stick esquerdo PSB_R3 Botão stick direito Biblioteca PS2X Mapeamento dos botões Menu NOME FUNÇÃO PSB_SELECT Botão select PSB_START Botão start Biblioteca PS2X Mapeamento dos botões Joystick (Stick) Para ler o valor analógico (que será convertido em um valor inteiro entre 0 e 255) dos sticks use o seguinte método: ps2x.Analog(button type); NOME FUNÇÃO PSS_LY Posição y do stick esquerdo PSS_LX Posição x do stick esquerdo PSS_RY Posição y do stick direito PSS_RX Posição x do stick direito Exemplo Circuito Exemplo Código // incluindo Biblioteca #include <PS2X_lib.h> #define Led1 2 #define Led2 3 #define Led3 4 #define Led4 5 PS2X ps2x; // criando a classe Controle PS2 int erro = 0; byte tipo = 0; Exemplo Código void setup(){ // configurando os pinos do Led pinMode(Led1, OUTPUT); pinMode(Led2, OUTPUT); pinMode(Led3, OUTPUT); pinMode(Led4, OUTPUT); // Inicializando a comunicação Serial Serial.begin(57600); //Configuração de Pinos, acionando verificação //de clique e desabilitando a vibração erro = ps2x.config_gamepad(13,11,10,12, true, false); Exemplo Código // verifica o códifo de erro if(erro == 0){ Serial.println("Controle Encontrado, configurado com sucesso"); } else if(erro == 1){ Serial.println("Controle não Encontrado, verifique a fiação ou reinicie o Arduino"); }else if(erro == 2){ Serial.println("Controle Encontrado, mas não aceitando comandos"); }else if(erro == 3){ Serial.println("O controle não entrou no modo detecção de clique, este modo pode não ser suportado"); } Exemplo Código // Verificando o tipo de controle tipo = ps2x.readType(); switch(tipo) { case 0: Serial.println("Tipo de Controle Desconhecido"); break; case 1: Serial.println("Controle DualShock Controller Encontrado"); break; case 2: Serial.println("Controle GuitarHero Encontrado"); break; } } Exemplo Código void loop(){ if(erro == 1){ //Sai do loop() se o controle não for encontrado return; } else { //Controle DualShock ps2x.read_gamepad(false, 0); //Aciona a leitura dos botões // Acende os leds com base nos botões D-pad if(ps2x.Button(PSB_PAD_UP)) { digitalWrite(Led1,HIGH); Serial.println("Acende Led1"); } if(ps2x.Button(PSB_PAD_RIGHT)){ digitalWrite(Led2,HIGH); Serial.println("Acende Led2"); } Exemplo Código if(ps2x.Button(PSB_PAD_LEFT)){ digitalWrite(Led3,HIGH); Serial.println("Acende Led3"); } if(ps2x.Button(PSB_PAD_DOWN)){ digitalWrite(Led4,HIGH); Serial.println("Acende Led4"); } i f (!ps2x.Button(PSB_PAD_DOWN) && !ps2x.Button(PSB_PAD_UP) && !ps2x.Button(PSB_PAD_RIGHT) && !ps2x.Button(PSB_PAD_LEFT)) { digitalWrite(Led1,LOW); digitalWrite(Led2,LOW); digitalWrite(Led3,LOW); digitalWrite(Led4,LOW); Serial.println("Apaga os Leds"); } delay(50); } } Referencias ALBUQUERQUE, Igor Fonseca; Arduino Robot With PS2 Controller (PlayStation 2 Joystick), disponível em <https://create.arduino.cc/projecthub/igorF2/arduino-robot-with-ps2-controller-playstation-2-joystick-85bddc>, Acessado em: 14/set/22 ELECTROPEAK; How to Interface PS2 Wireless Controller with Arduino, disponível em <https://create.arduino.cc/projecthub/electropeak/how-to-interface-ps2-wireless- controller-w-arduino-a0a813>, Acessado em: 14/set/22 W E T Z E L , E r i c ; E C K H A R D T , K u r t . A r d u i n o - P S 2 X , d i s p o n í v e l e m <https://github.com/madsci1016/Arduino-PS2X>, Acessado em: 14/set/22 PORTER, Bill. PlayStation 2 Controller Arduino Library v1.0, disponível em <http://www.billporter.info/2010/06/05/playstation-2-controller-arduino-library-v1- 0/>, Acessado em: 14/set/22
Compartilhar