Boa tarde pessoas!

Sou novo por aqui procurando resolver algumas dúvidas, mas primeiro vem a ajuda!

Posto aqui uma sketch de controle de até 8 servo motores com o controle ps3!

#include <PS3BT.h>
#include <Servo.h>
#include <SPI.h>

// cria USB adaptador exemplo
USB Usb;
BTD Btd(&Usb);
// cria o exemplo de duas maneiras
// (1) apenas cria o exemplo de usbBT como armazenamento e emparelhamento
// (2) cria armazenamento e o endereço bt
// PS3BT PS3(&Btd);
PS3BT PS3(&Btd,0x00,0x1B,0xDC,0x0F,0x77,0xA8);
// 00:1B:DC:0F:77:A8

// Cria objeto servo, max 8
Servo servoLeme;
Servo servoSpeed;
Servo servoArm;

// valores do controle para serem lidos do wireless
// valores do controle para min, mid, and max
// minZeroHat e maxZeroHat define o "zero"
int leftHatY, rightHatX;
int minHat = 0;
int minZeroHat = 117;
int zeroHat = 128;
int maxZeroHat = 137;
int maxHat = 255;

// valores de velocidade do servo sao calculados a partir dos valores do controle
// valores do servo para min, zero, e max velocidade do motor
// servo deve parar no zero e o zero deve estar exatamente entre min e max
// zeroServo e usado para parar o motor no zero do controle
int speedL, speedR;
int minSpeed = 0;
int zeroSpeed = 90;
int maxSpeed = 180;

void setup() {
Serial.begin(9600);
// attach servo nos pinos digitais
servoLeme.attach(5);
servoSpeed.attach(6);
servoArm.attach(3);
// comeca o servidor USB
if (Usb.Init() == -1) {
Serial.print(F("\r\nOSC did not start"));
while(1); //parada
}
Serial.print(F("\r\nPS3 Bluetooth Library Started"));
}

void loop() {
Usb.Task();
if(PS3.PS3Connected) {

// =================================================
// obtem valores dos controles
leftHatY = PS3.getAnalogHat(LeftHatY);
rightHatX = PS3.getAnalogHat(RightHatX);
// verifica se os valores do controle estao fora do zero definedo pelo minZeroHat e maxZeroHat
// para o servo de acordo com a posicao zero do controle
if(leftHatY < minZeroHat || leftHatY > maxZeroHat || rightHatX < minZeroHat || rightHatX > maxZeroHat) {

// Serial.print("\n");
// regular motor speed with no negative
speedL = map(leftHatY,minHat,maxHat,minSpeed,maxSpeed);
// Serial.print(leftHatY);
// Serial.print(" ");
// Serial.print(speedL);
servoLeme.write(speedL);

// Serial.print(" ");
// velocidade reversa maxServo and minServo
speedR = map(rightHatX,minHat,maxHat,maxSpeed,minSpeed);
// Serial.print(rightHatX);
// Serial.print(" ");
// Serial.print(speedR);
servoSpeed.write(speedR);

} else {
servoLeme.write(zeroSpeed);
servoSpeed.write(zeroSpeed);
}
// =================================================
// analogicos - L2 e R2
if(PS3.getAnalogButton(L2) || PS3.getAnalogButton(R2)) {
Serial.print(F("\r\nL2: "));
Serial.print(PS3.getAnalogButton(L2));
if(!PS3.PS3NavigationConnected) {
Serial.print(F("\tR2: "));
Serial.print(PS3.getAnalogButton(R2));
}
}
// =================================================
// botoes digitais
// disconecta quando PS botao e apertado
if(PS3.getButtonClick(PS)) {
Serial.print(F("\r\nPS Disconnect"));
PS3.disconnect();
} else {
// outros botoes digitais
// Botoes constantes devem ser maiusculos:
// TRIANGLE, CIRCLE, CROSS, SQUARE
// UP, RIGHT, DOWN, LEFT
// L1, R1, SELECT, PS, START
// L2, R2 retorna valores analogicos
if(PS3.getButtonClick(TRIANGLE)) {
Serial.print(F("\r\nTraingle"));
PS3.setRumbleOn(RumbleHigh);
}
if(PS3.getButtonClick(CIRCLE)) {
Serial.print(F("\r\nCircle"));
PS3.setRumbleOn(RumbleLow);
}
if(PS3.getButtonClick(CROSS)) {
Serial.print(F("\r\nCircle"));
PS3.setRumbleOff();
}
}
}

}

Exibições: 215

Anexos

Responder esta

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço