Error compilando Arduino mega 2560

Tengo un Gamepad gyro ch340 con un cjmcu beetle usb que reconoce Windows como Arduino micro, ambos llevan bluetooth hc05 y funcionaba bien hasta que hace poco volví a meterle el uso código pero cambiando un botón y ahora el mando se vuelve loco cuando lo conecto girando al azar y tocando botones al azar... Me da error compilando el receptor Arduino mega 2560, más abajo pone narrowing conversation of 167 int to char y así con varios números, quizá sea por eso? Todo parece compilar se bien... Gracias!!

Si pongo el código que me paso el creador del mando (mi amigo) empieza a presionar automáticamente los botones que utilizo en el Gamepad ejemplo fffffffffffffrrrrrrrrrrr. Sssaaaasddd y así infinitamente y tengo que desconectar el usb para que pare.. este es el código por si os dice algo

TRANSMISOR:

#include <I2Cdev.h>
#include <MPU6050.h>

#define Pul_bloquear_GYRO A7
#define JoystickMouse_x A2
#define JoystickMouse_y A3

#define Joystick_WS_x A10
#define Joystick_AD_y A11

#define Pul_F1 52
#define Pul_F2 50
#define Pul_F3 48
#define Pul_F4 46
#define Pul_1 30
#define Pul_2 34
#define Pul_3 32
#define Pul_4 36
#define Pul_R 3
#define Pul_E A4
#define Pul_F A12
#define Pul_SPACE 7
#define Pul_TAB 42
#define Pul_ESCAPE 44
#define Pul_MOUSE_LEFT 5
#define Pul_MOUSE_RIGHT 1

int pulArray[16] = {Pul_F1, Pul_F2, Pul_F3, Pul_F4, Pul_1, Pul_2, Pul_3, Pul_4, Pul_R, Pul_E, Pul_F, Pul_SPACE, Pul_TAB, Pul_ESCAPE, Pul_MOUSE_LEFT , Pul_MOUSE_RIGHT};

MPU6050 mpu;
int16_t ax, ay, az, gx, gy, gz;
int vx_gyro, vy_gyro;
unsigned long puldadores_DWORD;

void setup() {
 Serial2.begin(38400);
   //Serial.begin(9600);

 pinMode(Pul_bloquear_GYRO, INPUT_PULLUP);

 for (int i = 0; i < 16; i++)
 {
   pinMode(pulArray[i], INPUT_PULLUP);
 }

 Wire.begin();
 mpu.initialize();
 if (!mpu.testConnection()) {
   while (1);
 }
}
void loop() {

 if (digitalRead(Pul_bloquear_GYRO) == 1)
 {
   mpu.getMotion6(&ax, &ay, &az, &gx, &gy, &gz);

   vx_gyro = -(gz - 100) / 200;
   vy_gyro = -(gy - 160) / 100;
 }
 else
 {
   int Ax = analogRead(JoystickMouse_x);
   int Ay = analogRead(JoystickMouse_y);

   vx_gyro = -(Ay - 526) / 40;
   vy_gyro = (Ax - 515) / 40;
 }

 for (int i = 0; i < 16; i++)
 {
   puldadores_DWORD = (puldadores_DWORD << 1) | (1 - digitalRead(pulArray[i]));
 }
 int Aws = analogRead(Joystick_WS_x);
 int Aad = analogRead(Joystick_AD_y);
 puldadores_DWORD = (puldadores_DWORD << 1) | ((Aws > 900) ? 1 : 0);
 puldadores_DWORD = (puldadores_DWORD << 1) | ((Aws < 300) ? 1 : 0);
 puldadores_DWORD = (puldadores_DWORD << 1) | ((Aad < 300) ? 1 : 0);
 puldadores_DWORD = (puldadores_DWORD << 1) | ((Aad > 900) ? 1 : 0);

 Serial2.print("*");
 Serial2.print(vx_gyro);
 Serial2.print("#");
 Serial2.print("%");
 Serial2.print(vy_gyro);
 Serial2.print("@");
 Serial2.print("$");
 Serial2.print(puldadores_DWORD);
 Serial2.println("&");
}

RECEPTOR:

#include <SoftwareSerial.h>
#include <Mouse.h>
#include <Keyboard.h>

SoftwareSerial HC05_Serial(9, 10); // RX, TX

int vx, vy;
unsigned long puldadores_DWORD = 0;
unsigned long puldadores_DWORD_Last = 0;

char buttons[20] = {'D', 'A', 'S', 'W', MOUSE_RIGHT , MOUSE_LEFT, KEY_ESC, KEY_TAB, ' ', 'F', 'E', 'R', '4', '3', '2', '1', KEY_F4, KEY_F3, KEY_F2, KEY_F1};

void setup() {
 HC05_Serial.begin(38400);
 Serial.begin(38400);
 Mouse.begin();
 Keyboard.begin();

 delay(1000);
 Serial.println("Initialization Done!");
}
void loop() {

 if (HC05_Serial.available() > 0)
 {
   String recTXT = HC05_Serial.readStringUntil('\n');
   if (recTXT.indexOf("*") == 0)
   {
     vx = recTXT.substring(recTXT.indexOf("*") + 1, recTXT.indexOf("#") + 1).toInt();
     vy = recTXT.substring(recTXT.indexOf("%") + 1, recTXT.indexOf("@") + 1).toInt();
     puldadores_DWORD = recTXT.substring(recTXT.indexOf("$") + 1, recTXT.indexOf("&") + 1).toInt();

     Mouse.move(vx, vy);

     for (byte i = 0; i < 20; i++ )
     {
       if (i == 4 || i == 5)
       {
         if (bitRead(puldadores_DWORD, i) == 1 && bitRead(puldadores_DWORD_Last, i) == 0)
           Mouse.press(buttons[i]);
         else if (bitRead(puldadores_DWORD, i) == 0 && bitRead(puldadores_DWORD_Last, i) == 1)
           Mouse.release(buttons[i]);
       }
       else
       {
         if (bitRead(puldadores_DWORD, i) == 1 && bitRead(puldadores_DWORD_Last, i) == 0)
           Keyboard.press(buttons[i]);
         else if (bitRead(puldadores_DWORD, i) == 0 && bitRead(puldadores_DWORD_Last, i) == 1)
           Keyboard.release(buttons[i]);
       }
     }

     Serial.print(vx);
     Serial.print("   ");
     Serial.print(vy);
     Serial.print("   ");
     Serial.println(puldadores_DWORD);
     puldadores_DWORD_Last = puldadores_DWORD;
   }
 }
}

Gracias!!!

Última Actualización:

He comprobado que el problema es que el gyro presiona botones automáticamente en plan AASD WF EE y cosas así siguiendo un patrón según el movimiento, alguien sabe que falla en el código?

Por favor lee las Normas del foro y edita.