Un ROV de agua dulce, con mando de PS2

Si te gustan los modelos Radio Control RC este es tu foro.
asesorplaza1
Colaborador
Colaborador
Mensajes: 209
Registrado: Jue Ene 24, 2019 6:51 am
Ubicación: Cuenca

Re: Un ROV de agua dulce, con mando de PS2

Mensaje por asesorplaza1 »

Muchas gracias Alberto
Las librerías a las que haces referencia, ya las había estudiado, y de ellas he ido sacando los “trozos” que me interesaban para hacer funcionar el mando.
Incluso he estado intentando hacer funcionar el LED como tú explicas en la última publicación, y no me daba resultado, solo funcionaba con un botón, cuando incluía mas botones y mas funciones dejaba de funcionar. Por eso tuve que usar el cambio de estado del LED con la línea

Código: Seleccionar todo

LEDHdlts = !LEDHdlts;
A demás de esas páginas que apuntas hay esta otra
https://github.com/Lynxmotion/Arduino-PS2X
Que explica cómo utilizar el mando de PS2 con el Arduino Mega 2560, que es el que yo estoy utilizando, usando los pines 22, 23, 24, 25, para que no haya conflicto con las comunicaciones, ni con el resto de funciones que hace el Arduino mientras está usando el mando. Por eso he llegado al trozo de código para encender el LED con 4 líneas, en vez de las 14 que necesitas tú, para encender el LED.
No digo que mi método sea mejor que el tuyo, si no que este tuyo ya lo he probado y para mas botones, no es el adecuado, porque el Arduino se lía y deja de funcionar.

Un saludo a todos.
Adjuntos
02_Mando_PS2_Enciende_Led_ok.rar
(1.63 KiB) Descargado 67 veces
Última edición por asesorplaza1 el Dom Dic 06, 2020 7:26 pm, editado 1 vez en total.
asesorplaza1
Colaborador
Colaborador
Mensajes: 209
Registrado: Jue Ene 24, 2019 6:51 am
Ubicación: Cuenca

Re: Un ROV de agua dulce, con mando de PS2

Mensaje por asesorplaza1 »

Pongo el código para que no lo tengáis que descargar

Código: Seleccionar todo


#include "PS2X_lib.h"  //for v1.6
#include "Servo.h"

PS2X ps2x; // Creamos un Controlador clase PS2

Servo UpLServo;     // Creamos un objeto ESC arriba izquierda
Servo UpRServo;     // Creamos un objeto ESC arriba derecha
Servo HorizLServo;  // Creamos un objeto ESC horizontal izquierda
Servo HorizRServo;  // Creamos un objeto ESC horizontal derecha
Servo CamServo;     // Creamos un objeto servo para el pitch de la camara

const int led1 = 30;

volatile boolean LEDHdlts;

int ForwardVal = 0;   // valor leído en palo PS2 derecho arriba/abajo
int YawLeftVal = 0;   // valor leído en palo PS2 derecho derecha/izquierda
int UpVal = 0;        // valor leído en palo PS2 izquierdo arriba/abajo
int RollLeftVal = 0;  // valor leído en palo PS2 izquierdo derecha/izquierda
int CamPitch = 90;

int upLraw = 0;  // Variables para transportar el valor actual de los datos a los ESC
int upRraw = 0;
int HLraw = 0;
int HRraw = 0;

int auxMillis = 0;
int intervaloEncendido = 1000;

void setup() {

  Serial.begin(9600);
  Serial.flush(); // Depura la informacion del puerto Serie

  // Configuracion de los pines y ajustes:  GamePad (clock, command, attention, data, Pressures?, Rumble?) verifica el error
  ps2x.config_gamepad(22, 23, 24, 25, true, true);

  pinMode(led1, OUTPUT); // Establece el pin del LED como salida

  UpLServo.attach(32);    // El servo arriba izquierda ataca en el pin 32
  UpRServo.attach(34);    // El servo arriba derecha ataca en el pin 34
  HorizLServo.attach(36); // El servo horizontal izquierda ataca en el pin 36
  HorizRServo.attach(38); // El servo horizontal derecha ataca en el pin 38
  CamServo.attach(40);    // El servo del pitch de la camara ataca en el pi 40

  delay (1000);
}

void loop() {

  if ( millis() - auxMillis > intervaloEncendido) {

  ps2x.read_gamepad();   // Lee el controlador

  if (ps2x.Button(PSB_START)) {   // Sera verdadero cuando se presione el botón
    Serial.println(F("\n Botón Start esta siendo presionado"));
  }

  if (ps2x.Button(PSB_SELECT)) {
    Serial.println(F("\n Botón Select esta siendo presionado"));
  }

    if (ps2x.ButtonPressed(PSB_PAD_UP)) {      // Sera verdad cuando se presione el botón, 1 vez ON / 1 vez OF
      LEDHdlts = !LEDHdlts;
      Serial.println(F("\n Botón izquierda arriba presionado:"));
    }

    if (ps2x.ButtonPressed(PSB_PAD_DOWN)) {
      LEDHdlts = !LEDHdlts;
      Serial.println(F("\n Botón izquierda abajo presinado:"));
    }

    if (ps2x.ButtonPressed(PSB_PAD_RIGHT)) {
      LEDHdlts = !LEDHdlts;
      Serial.println(F("\n Botón izquierda derecha presionado:"));
    }

    if (ps2x.ButtonPressed(PSB_PAD_LEFT)) {
      LEDHdlts = !LEDHdlts;
      Serial.println(F("\n Botón Izquierda Izquierda presionado:"));
    }

    if (ps2x.ButtonPressed(PSB_GREEN)) {
      LEDHdlts = !LEDHdlts;
      Serial.println(F("\n Triangulo presionado"));
    }

    if (ps2x.ButtonPressed(PSB_RED)) {
      LEDHdlts = !LEDHdlts;
      Serial.println(F("\n Circulo presionado"));
    }

    if (ps2x.ButtonPressed(PSB_PINK)) {
      LEDHdlts = !LEDHdlts;
      Serial.println(F("\n Cuadrado presinado"));
    }

    if (ps2x.ButtonPressed(PSB_BLUE)) {
      LEDHdlts = !LEDHdlts;
      Serial.println(F("\n X presionado"));
    }

    if (ps2x.ButtonPressed(PSB_L1)) {
      LEDHdlts = !LEDHdlts;
      Serial.println(F("\n L1 presionado"));
    }

    if (ps2x.ButtonPressed(PSB_L2)) {
      LEDHdlts = !LEDHdlts;
      Serial.println(F("\n L2 presionado"));
    }

    if (ps2x.ButtonPressed(PSB_L3)) {
      LEDHdlts = !LEDHdlts;
      Serial.println(F("\n L3 presionado"));
    }

    if (ps2x.Button(PSB_R1)) {  // Será verdad mientras se mantenga pulsado el boton
      CamPitch = CamPitch + 1;
      LEDHdlts = !LEDHdlts;
      Serial.println(F("\n R1 presionado"));
    }

    if (ps2x.Button(PSB_R2)) {
      CamPitch = CamPitch - 1;
      LEDHdlts = !LEDHdlts;
      Serial.println(F("\n R2 presionado"));
    }

    if (ps2x.ButtonPressed(PSB_R3)) {
      LEDHdlts = !LEDHdlts;
      Serial.println(F("\n R3 presionado"));
    }

    ForwardVal = ps2x.Analog(PSS_RY);
    YawLeftVal = ps2x.Analog(PSS_RX);
    UpVal = ps2x.Analog(PSS_LY);
    RollLeftVal = ps2x.Analog(PSS_LX);

    upLraw = (128 - UpVal) + (128 - RollLeftVal) / 2; // esto será hasta un valor de 192
    upRraw = (128 - UpVal) - (128 - RollLeftVal) / 2; // esto será hasta un valor de 192
    HLraw = (128 - ForwardVal) + (128 - YawLeftVal); // esto será hasta un valor de 256
    HRraw = (128 - ForwardVal) - (128 - YawLeftVal); // esto será hasta un valor de 256

    // Scala los valores para que sean adecuados para los ESC y los servos
    upLraw = map(upLraw, -193, 193, 0, 179);
    upRraw = map(upRraw, -193, 198, 0, 179);
    HLraw = map(HLraw, -256, 256, 0, 179);
    HRraw = map(HRraw, -256, 256, 0, 179);

    // escribe el valor 0 en los servos

    UpLServo.write(upLraw);
    UpRServo.write(upRraw);
    HorizLServo.write(HLraw);
    HorizRServo.write(HRraw);

    CamPitch = constrain(CamPitch, 30, 149); // mantiene el servo de la camara dentro del limite de 30 - 149
    CamServo.write(CamPitch);  //  Mueve el servo de la camara

    digitalWrite(led1, LEDHdlts); // Enciende el Led Amarillo

  }
}

asesorplaza1
Colaborador
Colaborador
Mensajes: 209
Registrado: Jue Ene 24, 2019 6:51 am
Ubicación: Cuenca

Re: Un ROV de agua dulce, con mando de PS2

Mensaje por asesorplaza1 »

Buenas noches.
He escrito el código como me dijo Tsanshon (Alberto), y como ya había comentado, con ese código el Arduino se lía y no obedece a las ordenes del mando completamente, mueve el servo cuando mantengo pulsados los botones R1 y R2, en el Monitor Serie escribe el botón que estoy pulsando, pero el led no se enciende ni se apaga.

Lo que si he conseguido con las recomendaciones de Alberto, es estabilizar las reacciones del mando y del Arduino, ahora me hace caso siempre, pero con mi código.

Adjunto los dos códigos, para que veáis las diferencias.

Un saludo.
Adjuntos
02_Mando_PS2_Enciende_Led_ok.rar
(1.66 KiB) Descargado 70 veces
02_PS2_Enciende_Led_Tsanshon.rar
(1.73 KiB) Descargado 76 veces
asesorplaza1
Colaborador
Colaborador
Mensajes: 209
Registrado: Jue Ene 24, 2019 6:51 am
Ubicación: Cuenca

Re: Un ROV de agua dulce, con mando de PS2

Mensaje por asesorplaza1 »

Este es el código como dice Alberto

Código: Seleccionar todo


#include "PS2X_lib.h"  // para la v1.6
#include "Servo.h"

PS2X ps2x; // Creamos un Controlador clase PS2

Servo UpLServo;     // Creamos un objeto ESC arriba izquierda
Servo UpRServo;     // Creamos un objeto ESC arriba derecha
Servo HorizLServo;  // Creamos un objeto ESC horizontal izquierda
Servo HorizRServo;  // Creamos un objeto ESC horizontal derecha
Servo CamServo;     // Creamos un objeto servo para el pitch de la camara

const int LED_PIN_1 = 30; // Creamos un LED Verde en el pin 30

boolean ledState; // Guarda el estado del LED on/of

int ForwardVal = 0;   // valor leído en palo PS2 derecho arriba/abajo
int YawLeftVal = 0;   // valor leído en palo PS2 derecho derecha/izquierda
int UpVal = 0;        // valor leído en palo PS2 izquierdo arriba/abajo
int RollLeftVal = 0;  // valor leído en palo PS2 izquierdo derecha/izquierda
int CamPitch = 90;

int upLraw = 0;  // Variables para transportar el valor actual de los datos a los ESC
int upRraw = 0;
int HLraw = 0;
int HRraw = 0;
int CSraw = 0;

int auxMillis = 0;
int intervaloEncendido = 1000;

void setup() {

  Serial.begin(9600);
  Serial.flush(); // Depura la informacion del puerto Serie

  // Configuracion de los pines y ajustes:  GamePad (clock, command, attention, data, Pressures?, Rumble?) verifica el error
  ps2x.config_gamepad(22, 23, 24, 25, true, true);

  pinMode(LED_PIN_1, OUTPUT); // Establece el pin del LED como salida

  UpLServo.attach(32);    // El servo arriba izquierda ataca en el pin 32
  UpRServo.attach(34);    // El servo arriba derecha ataca en el pin 34
  HorizLServo.attach(36); // El servo horizontal izquierda ataca en el pin 36
  HorizRServo.attach(38); // El servo horizontal derecha ataca en el pin 38
  CamServo.attach(40);    // El servo del pitch de la camara ataca en el pi 40

  delay (1000);
}

void loop() {

  if ( millis() - auxMillis > intervaloEncendido) {

    ps2x.read_gamepad();   // Lee el controlador

    bool ButtonPressed; // Sera verdad cuando se presione el botón, 1 vez ON / 1 vez OF
    bool Button;        // Sera verdad mientras se mantenga el boton presionado   

    if (ps2x.Button(PSB_START)) {  // Sera verdadero cuando se presione el botón
      Serial.println(F("\n Botón Start esta siendo presionado"));
    }

    if (ps2x.Button(PSB_SELECT)) {
      Serial.println(F("\n Botón Select esta siendo presionado"));
    }

    ButtonPressed = ps2x.ButtonPressed(PSB_PAD_UP);
    if ( ButtonPressed == true)
    {
      Serial.println(F("\n Botón izquierda arriba presionado:"));
      if (ledState == true)
      {
        digitalWrite(LED_PIN_1, HIGH);
      }
      else
      {
        digitalWrite (LED_PIN_1, LOW);
      }
    }

    ButtonPressed = ps2x.ButtonPressed(PSB_PAD_DOWN);
    if (ButtonPressed == true)
    {
      Serial.println(F("\n Botón izquierda abajo presinado:"));
      if (ledState == true)
      {
        digitalWrite (LED_PIN_1, HIGH);
      }
      else
      {
        digitalWrite(LED_PIN_1, LOW);
      }
    }

    ButtonPressed = ps2x.ButtonPressed(PSB_PAD_RIGHT);
    if (ButtonPressed == true)
    {
      Serial.println(F("\n Botón izquierda derecha presionado:"));
      if (ledState == true)
      {
        digitalWrite(LED_PIN_1, HIGH);
      }
      else
      {
        digitalWrite (LED_PIN_1, LOW);
      }
    }

    ButtonPressed = ps2x.ButtonPressed(PSB_PAD_LEFT);
    if (ButtonPressed == true)
    {
      Serial.println(F("\n Botón Izquierda Izquierda presionado:"));
      if (ledState == true)
      {
        digitalWrite (LED_PIN_1, HIGH);
      }
      else
      {
        digitalWrite (LED_PIN_1, LOW);
      }
    }

    ButtonPressed = ps2x.ButtonPressed(PSB_GREEN);
    if (ButtonPressed == true)
    {
      Serial.println(F("\n Triangulo presionado"));
      if (ledState == true)
      {
        digitalWrite (LED_PIN_1, HIGH);
      }
      else
      {
        digitalWrite (LED_PIN_1, LOW);
      }
    }

    ButtonPressed = ps2x.ButtonPressed(PSB_RED);
    if (ButtonPressed == true)
    {
      Serial.println(F("\n Circulo presionado"));
      if (ledState == true)
      {
        digitalWrite (LED_PIN_1, HIGH);
      }
      else
      {
        digitalWrite (LED_PIN_1, LOW);
      }
    }

    ButtonPressed = ps2x.ButtonPressed(PSB_PINK);
    if (ButtonPressed == true)
    {
      Serial.println(F("\n Cuadrado presinado"));
      if (ledState == true)
      {
        digitalWrite (LED_PIN_1, HIGH);
      }
      else
      {
        digitalWrite (LED_PIN_1, LOW);
      }
    }

    ButtonPressed = ps2x.ButtonPressed(PSB_BLUE);
    if (ButtonPressed == true)
    {
      Serial.println(F("\n X presionado"));
      if (ledState == true)
      {
        digitalWrite (LED_PIN_1, HIGH);
      }
      else
      {
        digitalWrite (LED_PIN_1, LOW);
      }
    }

    ButtonPressed = ps2x.ButtonPressed(PSB_L1);
    if (ButtonPressed == true)
    {
      Serial.println(F("\n L1 presionado"));
      if (ledState == true)
      {
        digitalWrite (LED_PIN_1, HIGH);
      }
      else
      {
        digitalWrite (LED_PIN_1, LOW);
      }
    }

    ButtonPressed = ps2x.ButtonPressed(PSB_L2);
    if (ButtonPressed == true)
    {
      Serial.println(F("\n L2 presionado"));
      if (ledState == true)
      {
        digitalWrite (LED_PIN_1, HIGH);
      }
      else
      {
        digitalWrite (LED_PIN_1, LOW);
      }
    }

    ButtonPressed = ps2x.ButtonPressed(PSB_L3);
    if (ButtonPressed == true)
    {
      Serial.println(F("\n L3 presionado"));
      if (ledState == true)
      {
        digitalWrite (LED_PIN_1, HIGH);
      }
      else
      {
        digitalWrite (LED_PIN_1, LOW);
      }
    }

    Button = ps2x.Button(PSB_R1);
    if (Button == true)
    {
      CamPitch = CamPitch + 1;
      Serial.println(F("\n R1 presionado"));
      if (ledState == true)
      {
        digitalWrite (LED_PIN_1, HIGH);
      }
      else
      {
        digitalWrite (LED_PIN_1, LOW);
      }
    }

    Button = ps2x.Button(PSB_R2);
    if (Button == true)
    {
      CamPitch = CamPitch - 1;
      Serial.println(F("\n R2 presionado"));
      if (ledState == true)
      {
        digitalWrite (LED_PIN_1, HIGH);
      }
      else
      {
        digitalWrite (LED_PIN_1, LOW);
      }
    }

    ButtonPressed = ps2x.ButtonPressed(PSB_R3);
    if (ButtonPressed == true)
    {
      Serial.println(F("\n R3 presionado"));
      if (ledState == true)
      {
        digitalWrite (LED_PIN_1, HIGH);
      }
      else
      {
        digitalWrite (LED_PIN_1, LOW);
      }
    }

    ForwardVal = ps2x.Analog(PSS_RY);
    YawLeftVal = ps2x.Analog(PSS_RX);
    UpVal = ps2x.Analog(PSS_LY);
    RollLeftVal = ps2x.Analog(PSS_LX);

    upLraw = (128 - UpVal) + (128 - RollLeftVal) / 2; // esto será hasta un valor de 192
    upRraw = (128 - UpVal) - (128 - RollLeftVal) / 2; // esto será hasta un valor de 192
    HLraw = (128 - ForwardVal) + (128 - YawLeftVal); // esto será hasta un valor de 256
    HRraw = (128 - ForwardVal) - (128 - YawLeftVal); // esto será hasta un valor de 256

    // Escala los valores para que sean adecuados para los ESC y los servos
    upLraw = map(upLraw, -193, 193, 0, 179);
    upRraw = map(upRraw, -193, 198, 0, 179);
    HLraw = map(HLraw, -256, 256, 0, 179);
    HRraw = map(HRraw, -256, 256, 0, 179);

    // escribe el valor 0 en los servos

    UpLServo.write(upLraw);
    UpRServo.write(upRraw);
    HorizLServo.write(HLraw);
    HorizRServo.write(HRraw);

    CamPitch = constrain(CamPitch, 30, 149); // mantiene el servo de la camara dentro del limite de 30 - 149
    CamServo.write(CamPitch);  //  Mueve el servo de la camara

    digitalWrite(LED_PIN_1, ledState); // Enciende el Led Verde

  }
}

asesorplaza1
Colaborador
Colaborador
Mensajes: 209
Registrado: Jue Ene 24, 2019 6:51 am
Ubicación: Cuenca

Re: Un ROV de agua dulce, con mando de PS2

Mensaje por asesorplaza1 »

Este es mi código

Código: Seleccionar todo


#include "PS2X_lib.h"  //for v1.6
#include "Servo.h"

PS2X ps2x; // Creamos un Controlador clase PS2

Servo UpLServo;     // Creamos un objeto ESC arriba izquierda
Servo UpRServo;     // Creamos un objeto ESC arriba derecha
Servo HorizLServo;  // Creamos un objeto ESC horizontal izquierda
Servo HorizRServo;  // Creamos un objeto ESC horizontal derecha
Servo CamServo;     // Creamos un objeto servo para el pitch de la camara

const int led1 = 30; // Creamos un LED Verde en el pin 30

volatile boolean LEDHdlts; // Cambia el estado del LED on/of

int ForwardVal = 0;   // valor leído en palo PS2 derecho arriba/abajo
int YawLeftVal = 0;   // valor leído en palo PS2 derecho derecha/izquierda
int UpVal = 0;        // valor leído en palo PS2 izquierdo arriba/abajo
int RollLeftVal = 0;  // valor leído en palo PS2 izquierdo derecha/izquierda
int CamPitch = 90;

int upLraw = 0;  // Variables para transportar el valor actual de los datos a los ESC
int upRraw = 0;
int HLraw = 0;
int HRraw = 0;

int auxMillis = 0;
int intervaloEncendido = 1000;

void setup() {

  Serial.begin(9600);
  Serial.flush(); // Depura la informacion del puerto Serie

  // Configuracion de los pines y ajustes:  GamePad (clock, command, attention, data, Pressures?, Rumble?) verifica el error
  ps2x.config_gamepad(22, 23, 24, 25, true, true);

  pinMode(led1, OUTPUT); // Establece el pin del LED como salida

  UpLServo.attach(32);    // El servo arriba izquierda ataca en el pin 32
  UpRServo.attach(34);    // El servo arriba derecha ataca en el pin 34
  HorizLServo.attach(36); // El servo horizontal izquierda ataca en el pin 36
  HorizRServo.attach(38); // El servo horizontal derecha ataca en el pin 38
  CamServo.attach(40);    // El servo del pitch de la camara ataca en el pi 40

  delay (1000);
}

void loop() {

  if ( millis() - auxMillis > intervaloEncendido) {

  ps2x.read_gamepad();   // Lee el controlador

  if (ps2x.Button(PSB_START)) {   // Sera verdadero cuando se presione el botón
    Serial.println(F("\n Botón Start esta siendo presionado"));
  }

  if (ps2x.Button(PSB_SELECT)) {
    Serial.println(F("\n Botón Select esta siendo presionado"));
  }

    if (ps2x.ButtonPressed(PSB_PAD_UP)) {  // Sera verdad cuando se presione el botón, 1 vez ON / 1 vez OF
      LEDHdlts = !LEDHdlts;
      Serial.println(F("\n Botón izquierda arriba presionado:"));
    }

    if (ps2x.ButtonPressed(PSB_PAD_DOWN)) {
      LEDHdlts = !LEDHdlts;
      Serial.println(F("\n Botón izquierda abajo presinado:"));
    }

    if (ps2x.ButtonPressed(PSB_PAD_RIGHT)) {
      LEDHdlts = !LEDHdlts;
      Serial.println(F("\n Botón izquierda derecha presionado:"));
    }

    if (ps2x.ButtonPressed(PSB_PAD_LEFT)) {
      LEDHdlts = !LEDHdlts;
      Serial.println(F("\n Botón Izquierda Izquierda presionado:"));
    }

    if (ps2x.ButtonPressed(PSB_GREEN)) {
      LEDHdlts = !LEDHdlts;
      Serial.println(F("\n Triangulo presionado"));
    }

    if (ps2x.ButtonPressed(PSB_RED)) {
      LEDHdlts = !LEDHdlts;
      Serial.println(F("\n Circulo presionado"));
    }

    if (ps2x.ButtonPressed(PSB_PINK)) {
      LEDHdlts = !LEDHdlts;
      Serial.println(F("\n Cuadrado presinado"));
    }

    if (ps2x.ButtonPressed(PSB_BLUE)) {
      LEDHdlts = !LEDHdlts;
      Serial.println(F("\n X presionado"));
    }

    if (ps2x.ButtonPressed(PSB_L1)) {
      LEDHdlts = !LEDHdlts;
      Serial.println(F("\n L1 presionado"));
    }

    if (ps2x.ButtonPressed(PSB_L2)) {
      LEDHdlts = !LEDHdlts;
      Serial.println(F("\n L2 presionado"));
    }

    if (ps2x.ButtonPressed(PSB_L3)) {
      LEDHdlts = !LEDHdlts;
      Serial.println(F("\n L3 presionado"));
    }

    if (ps2x.Button(PSB_R1)) {  // Será verdad mientras se mantenga pulsado el boton
      CamPitch = CamPitch + 1;
      LEDHdlts = !LEDHdlts;
      Serial.println(F("\n R1 presionado"));
    }

    if (ps2x.Button(PSB_R2)) {
      CamPitch = CamPitch - 1;
      LEDHdlts = !LEDHdlts;
      Serial.println(F("\n R2 presionado"));
    }

    if (ps2x.ButtonPressed(PSB_R3)) {
      LEDHdlts = !LEDHdlts;
      Serial.println(F("\n R3 presionado"));
    }

    ForwardVal = ps2x.Analog(PSS_RY);
    YawLeftVal = ps2x.Analog(PSS_RX);
    UpVal = ps2x.Analog(PSS_LY);
    RollLeftVal = ps2x.Analog(PSS_LX);

    upLraw = (128 - UpVal) + (128 - RollLeftVal) / 2; // esto será hasta un valor de 192
    upRraw = (128 - UpVal) - (128 - RollLeftVal) / 2; // esto será hasta un valor de 192
    HLraw = (128 - ForwardVal) + (128 - YawLeftVal); // esto será hasta un valor de 256
    HRraw = (128 - ForwardVal) - (128 - YawLeftVal); // esto será hasta un valor de 256

    // Scala los valores para que sean adecuados para los ESC y los servos
    upLraw = map(upLraw, -193, 193, 0, 179);
    upRraw = map(upRraw, -193, 198, 0, 179);
    HLraw = map(HLraw, -256, 256, 0, 179);
    HRraw = map(HRraw, -256, 256, 0, 179);

    // escribe el valor 0 en los servos

    UpLServo.write(upLraw);
    UpRServo.write(upRraw);
    HorizLServo.write(HLraw);
    HorizRServo.write(HRraw);

    CamPitch = constrain(CamPitch, 30, 149); // mantiene el servo de la camara dentro del limite de 30 - 149
    CamServo.write(CamPitch);  //  Mueve el servo de la camara

    digitalWrite(led1, LEDHdlts); // Enciende el Led Verde

  }
}

asesorplaza1
Colaborador
Colaborador
Mensajes: 209
Registrado: Jue Ene 24, 2019 6:51 am
Ubicación: Cuenca

Re: Un ROV de agua dulce, con mando de PS2

Mensaje por asesorplaza1 »

Buenas tardes.

Tras pelearme mucho con el dichoso código, he conseguido hacerlo funcionar, ahora lo he separado en "pestañas" y es mas fácil de leer, no lo puedo adjuntar como código, así es que os adjunto el enlace a la pagina de Github.

https://github.com/asesorplaza1/Program ... -evolucion

Tengo que arreglar el archivo "léeme" para actualizarlo, pero los programas ya funcionan.

Ahora me queda ajustar los sensores para que me hagan una lectura real, tanto de la batería como de las distancias, peor ya funciona casi como debe, y conectar y soldar todo en una placa de electrónica, pero por lo menos ya me he desatascado, y eso me da ánimos para seguir con el proyecto.

Un saludo.
carlos a.herranz
Participativo
Participativo
Mensajes: 289
Registrado: Dom Ago 23, 2015 12:32 pm
Ubicación: madrid

Re: Un ROV de agua dulce, con mando de PS2

Mensaje por carlos a.herranz »

Increíble. Un trabajo de alta tecnología.
Me quito el sombrero.
Felicidades
Responder