# Buenas problemas con el arduino micro

**URL:** <https://forum.arduino.cc/t/buenas-problemas-con-el-arduino-micro/645454>\
**Category:** Software\
**Created:** [March 30, 2020, 5:11pm UTC](https://forum.arduino.cc/t/buenas-problemas-con-el-arduino-micro/645454 "2020-03-30T17:11:04Z")\
**Posts on this page:** 10\
**Page:** 1

<div class="post-metadata">

**Author:** ![mrvily](https://avatars.discourse-cdn.com/v4/letter/m/a87d85/32.png) [@mrvily](https://forum.arduino.cc/u/mrvily)\
**Post date:** [March 30, 2020, 5:11pm UTC](https://forum.arduino.cc/t/buenas-problemas-con-el-arduino-micro/645454/1 "2020-03-30T17:11:04Z")

</div>

Hola buenas estoy intentando hacer una botonera para sim racing con este codigo:

```cpp
//BUTTON BOX 
//USE w ProMicro
//Tested in WIN10 + Assetto Corsa
//AMSTUDIO
//20.8.17

#include <Keypad.h>
#include <Joystick.h>

#define ENABLE_PULLUPS
#define NUMROTARIES 4
#define NUMBUTTONS 24
#define NUMROWS 5
#define NUMCOLS 5

byte buttons[NUMROWS][NUMCOLS] = {
  {0,1,2,3,4},
  {5,6,7,8,9},
  {10,11,12,13,14},
  {15,16,17,18,19},
  {20,21,22,23},
};

struct rotariesdef {
  byte pin1;
  byte pin2;
  int ccwchar;
  int cwchar;
  volatile unsigned char state;
};

rotariesdef rotaries[NUMROTARIES] {
  {0,1,24,25,0},
  {2,3,26,27,0},
  {4,5,28,29,0},
  {6,7,30,31,0},
};

#define DIR_CCW 0x10
#define DIR_CW 0x20
#define R_START 0x0

#ifdef HALF_STEP
#define R_CCW_BEGIN 0x1
#define R_CW_BEGIN 0x2
#define R_START_M 0x3
#define R_CW_BEGIN_M 0x4
#define R_CCW_BEGIN_M 0x5
const unsigned char ttable[6][4] = {
  // R_START (00)
  {R_START_M,            R_CW_BEGIN,    R_CCW_BEGIN,  R_START},
  // R_CCW_BEGIN
  {R_START_M | DIR_CCW, R_START,        R_CCW_BEGIN,  R_START},
  // R_CW_BEGIN
  {R_START_M | DIR_CW,  R_CW_BEGIN,    R_START,      R_START},
  // R_START_M (11)
  {R_START_M,            R_CCW_BEGIN_M,  R_CW_BEGIN_M, R_START},
  // R_CW_BEGIN_M
  {R_START_M,            R_START_M,      R_CW_BEGIN_M, R_START | DIR_CW},
  // R_CCW_BEGIN_M
  {R_START_M,            R_CCW_BEGIN_M,  R_START_M,    R_START | DIR_CCW},
};
#else
#define R_CW_FINAL 0x1
#define R_CW_BEGIN 0x2
#define R_CW_NEXT 0x3
#define R_CCW_BEGIN 0x4
#define R_CCW_FINAL 0x5
#define R_CCW_NEXT 0x6

const unsigned char ttable[7][4] = {
  // R_START
  {R_START,    R_CW_BEGIN,  R_CCW_BEGIN, R_START},
  // R_CW_FINAL
  {R_CW_NEXT,  R_START,    R_CW_FINAL,  R_START | DIR_CW},
  // R_CW_BEGIN
  {R_CW_NEXT,  R_CW_BEGIN,  R_START,    R_START},
  // R_CW_NEXT
  {R_CW_NEXT,  R_CW_BEGIN,  R_CW_FINAL,  R_START},
  // R_CCW_BEGIN
  {R_CCW_NEXT, R_START,    R_CCW_BEGIN, R_START},
  // R_CCW_FINAL
  {R_CCW_NEXT, R_CCW_FINAL, R_START,    R_START | DIR_CCW},
  // R_CCW_NEXT
  {R_CCW_NEXT, R_CCW_FINAL, R_CCW_BEGIN, R_START},
};
#endif

byte rowPins[NUMROWS] = {21,20,19,18,15}; 
byte colPins[NUMCOLS] = {14,16,10,9,8}; 

Keypad buttbx = Keypad( makeKeymap(buttons), rowPins, colPins, NUMROWS, NUMCOLS); 

Joystick_ Joystick(JOYSTICK_DEFAULT_REPORT_ID, 
  JOYSTICK_TYPE_JOYSTICK, 32, 0,
  false, false, false, false, false, false,
  false, false, false, false, false);

void setup() {
  Joystick.begin();
  rotary_init();}

void loop() { 

  CheckAllEncoders();

  CheckAllButtons();

}

void CheckAllButtons(void) {
      if (buttbx.getKeys())
    {
      for (int i=0; i<LIST_MAX; i++)   
        {
          if ( buttbx.key[i].stateChanged )   
            {
            switch (buttbx.key[i].kstate) {  
                    case PRESSED:
                    case HOLD:
                              Joystick.setButton(buttbx.key[i].kchar, 1);
                              break;
                    case RELEASED:
                    case IDLE:
                              Joystick.setButton(buttbx.key[i].kchar, 0);
                              break;
            }
          }   
        }
    }
}

void rotary_init() {
  for (int i=0;i<NUMROTARIES;i++) {
    pinMode(rotaries[i].pin1, INPUT);
    pinMode(rotaries[i].pin2, INPUT);
    #ifdef ENABLE_PULLUPS
      digitalWrite(rotaries[i].pin1, HIGH);
      digitalWrite(rotaries[i].pin2, HIGH);
    #endif
  }
}

unsigned char rotary_process(int _i) {
  unsigned char pinstate = (digitalRead(rotaries[_i].pin2) << 1) | digitalRead(rotaries[_i].pin1);
  rotaries[_i].state = ttable[rotaries[_i].state & 0xf][pinstate];
  return (rotaries[_i].state & 0x30);
}

void CheckAllEncoders(void) {
  for (int i=0;i<NUMROTARIES;i++) {
    unsigned char result = rotary_process(i);
    if (result == DIR_CCW) {
      Joystick.setButton(rotaries[i].ccwchar, 1); delay(50); Joystick.setButton(rotaries[i].ccwchar, 0);
    };
    if (result == DIR_CW) {
      Joystick.setButton(rotaries[i].cwchar, 1); delay(50); Joystick.setButton(rotaries[i].cwchar, 0);
    };
  }
}

```

Conecto la tarjeta voy a herramientas escojo arduino micro, y cuando intento elegir el puerto usb me pone COM 9(arduino leonardo).

le doy a verificar y me sale el siguiente mensaje.

```cpp
Arduino:1.8.12 (Windows Store 1.8.33.0) (Windows 10), Tarjeta:"Arduino Micro"

ARDUINO_BUTTON_BOXV2:95:1: error: 'Joystick_' does not name a type; did you mean 'Joystick'?

 Joystick_ Joystick(JOYSTICK_DEFAULT_REPORT_ID,

 ^ ~~~~~~~~

 Joystick

C:\Users\Usuario\Documents\Arduino\libraries\ARDUINO_BUTTON_BOXV2\ARDUINO_BUTTON_BOXV2.ino: In function 'void setup()':

ARDUINO_BUTTON_BOXV2:101:11: error: expected unqualified-id before '.' token

  Joystick.begin();

          ^

C:\Users\Usuario\Documents\Arduino\libraries\ARDUINO_BUTTON_BOXV2\ARDUINO_BUTTON_BOXV2.ino: In function 'void CheckAllButtons()':

ARDUINO_BUTTON_BOXV2:122:39: error: expected unqualified-id before '.' token

                              Joystick.setButton(buttbx.key[i].kchar, 1);

                                      ^

ARDUINO_BUTTON_BOXV2:126:39: error: expected unqualified-id before '.' token

                              Joystick.setButton(buttbx.key[i].kchar, 0);

                                      ^

C:\Users\Usuario\Documents\Arduino\libraries\ARDUINO_BUTTON_BOXV2\ARDUINO_BUTTON_BOXV2.ino: In function 'void CheckAllEncoders()':

ARDUINO_BUTTON_BOXV2:157:15: error: expected unqualified-id before '.' token

      Joystick.setButton(rotaries[i].ccwchar, 1); delay(50); Joystick.setButton(rotaries[i].ccwchar, 0);

              ^

ARDUINO_BUTTON_BOXV2:157:70: error: expected unqualified-id before '.' token

      Joystick.setButton(rotaries[i].ccwchar, 1); delay(50); Joystick.setButton(rotaries[i].ccwchar, 0);

                                                                      ^

ARDUINO_BUTTON_BOXV2:160:15: error: expected unqualified-id before '.' token

      Joystick.setButton(rotaries[i].cwchar, 1); delay(50); Joystick.setButton(rotaries[i].cwchar, 0);

              ^

ARDUINO_BUTTON_BOXV2:160:69: error: expected unqualified-id before '.' token

      Joystick.setButton(rotaries[i].cwchar, 1); delay(50); Joystick.setButton(rotaries[i].cwchar, 0);

                                                                    ^

exit status 1
'Joystick_' does not name a type; did you mean 'Joystick'?

Este informe podría contener más información con
"Mostrar salida detallada durante la compilación"
opción habilitada en Archivo -> Preferencias.

```

.

Alguna idea de que es lo que hago mal.  
Deciros que no tengo ni idea de arduino y no se por donde tirar.

Gracias

---

<div class="post-metadata">

**Author:** ![Adrian\_E](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/adrian_e/32/222385_2.png) [@Adrian\_E](https://forum.arduino.cc/u/Adrian_E)\
**Post date:** [March 30, 2020, 6:04pm UTC](https://forum.arduino.cc/t/buenas-problemas-con-el-arduino-micro/645454/2 "2020-03-30T18:04:16Z")

</div>

por lo poco y mal posteado, deduzco que fata la libreria del Keypad.h, pero puede ser otras varias cosas, porque si ese es todo el codigo?? seguro no va a funcionar

---

<div class="post-metadata">

**Author:** ![Surbyte](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/surbyte/32/217404_2.png) [@Surbyte](https://forum.arduino.cc/u/Surbyte)\
**Post date:** [March 30, 2020, 9:03pm UTC](https://forum.arduino.cc/t/buenas-problemas-con-el-arduino-micro/645454/3 "2020-03-30T21:03:39Z")

</div>

**Por favor!! Lee las normas del foro y edita tu post.**  
**Errores y código deben postearse usando etiquetas así que EDITA.**

Lee las [Normas del foro](http://forum.arduino.cc/index.php?topic=310951.0).

---

<div class="post-metadata">

**Author:** ![mrvily](https://avatars.discourse-cdn.com/v4/letter/m/a87d85/32.png) [@mrvily](https://forum.arduino.cc/u/mrvily)\
**Post date:** [April 1, 2020, 6:16pm UTC](https://forum.arduino.cc/t/buenas-problemas-con-el-arduino-micro/645454/4 "2020-04-01T18:16:21Z")

</div>

Hola hay alguien?¿?

---

<div class="post-metadata">

**Author:** ![victorjam](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/victorjam/32/218315_2.png) [@victorjam](https://forum.arduino.cc/u/victorjam)\
**Post date:** [April 1, 2020, 7:12pm UTC](https://forum.arduino.cc/t/buenas-problemas-con-el-arduino-micro/645454/5 "2020-04-01T19:12:43Z")

</div>

Dudo mucho que una libreria que se llama "Joystick" tenga por nombre de clase "Joystick\_". Por lo tanto el problema está en que tienes un objeto que se llama "Joystick" de la clase "Joystick\_" que no existe, y por lo tanto de hay te viene todos los errores.

Cambia el nombre del objeto a "joystick", cambiando solo la "J" por "j" donde lo uses:

```cpp
Joystick joystick(JOYSTICK_DEFAULT_REPORT_ID,
                  JOYSTICK_TYPE_JOYSTICK, 32, 0,
                  false, false, false, false, false, false,
                  false, false, false, false, false);

```

Y por lo tanto, cada vez que hagas una llamada a una función del objeto usa el objeto "joystick".

---

<div class="post-metadata">

**Author:** ![mrvily](https://avatars.discourse-cdn.com/v4/letter/m/a87d85/32.png) [@mrvily](https://forum.arduino.cc/u/mrvily)\
**Post date:** [April 1, 2020, 7:56pm UTC](https://forum.arduino.cc/t/buenas-problemas-con-el-arduino-micro/645454/6 "2020-04-01T19:56:59Z")

</div>

muchisimas gracias, voy a intentarlo.

---

<div class="post-metadata">

**Author:** ![mrvily](https://avatars.discourse-cdn.com/v4/letter/m/a87d85/32.png) [@mrvily](https://forum.arduino.cc/u/mrvily)\
**Post date:** [April 1, 2020, 8:16pm UTC](https://forum.arduino.cc/t/buenas-problemas-con-el-arduino-micro/645454/7 "2020-04-01T20:16:54Z")

</div>

Hola he hecho lo que me has dicho:

```cpp
Joystick joystick(JOYSTICK_DEFAULT_REPORT_ID,
                  JOYSTICK_TYPE_JOYSTICK, 32, 0,
                  false, false, false, false, false, false,
                  false, false, false, false, false);

```

y me da este error

```cpp
Arduino:1.8.12 (Windows Store 1.8.33.0) (Windows 10), Tarjeta:"Arduino Micro"

ARDUINO_BUTTON_BOXV2:95:19: error: 'JOYSTICK_DEFAULT_REPORT_ID' was not declared in this scope

 Joystick joystick(JOYSTICK_DEFAULT_REPORT_ID,

                  ^ ~~~~~~~~~~~~~~~~~~~~~~~~~

ARDUINO_BUTTON_BOXV2:96:20: error: 'JOYSTICK_TYPE_JOYSTICK' was not declared in this scope

                    JOYSTICK_TYPE_JOYSTICK, 32, 0,

                    ^ ~~~~~~~~~~~~~~~~~~~~~

ARDUINO_BUTTON_BOXV2:95:10: error: cannot declare variable 'joystick' to be of abstract type 'Joystick'

 Joystick joystick(JOYSTICK_DEFAULT_REPORT_ID,

          ^ ~~~~~~~

In file included from C:\Users\Usuario\Documents\Arduino\libraries\ARDUINO_BUTTON_BOXV2\ARDUINO_BUTTON_BOXV2.ino:8:0:

C:\Users\Usuario\Documents\Arduino\libraries\AxisJoystick\src/Joystick.h:28:7: note:  because the following virtual functions are pure within 'Joystick':

 class Joystick {

      ^ ~~~~~~~

C:\Users\Usuario\Documents\Arduino\libraries\AxisJoystick\src/Joystick.h:58:16: note: virtual Joystick::Move Joystick::singleRead()

  virtual Move singleRead() = 0;

                ^ ~~~~~~~~~

C:\Users\Usuario\Documents\Arduino\libraries\AxisJoystick\src/Joystick.h:73:16: note: virtual Joystick::Move Joystick::multipleRead()

  virtual Move multipleRead() = 0;

                ^ ~~~~~~~~~~~

C:\Users\Usuario\Documents\Arduino\libraries\AxisJoystick\src/Joystick.h:81:19: note: virtual boolean Joystick::isPress()

  virtual boolean isPress() = 0;

                  ^ ~~~~~~

C:\Users\Usuario\Documents\Arduino\libraries\AxisJoystick\src/Joystick.h:89:19: note: virtual boolean Joystick::isUp()

  virtual boolean isUp() = 0;

                  ^~~~

C:\Users\Usuario\Documents\Arduino\libraries\AxisJoystick\src/Joystick.h:97:19: note: virtual boolean Joystick::isDown()

  virtual boolean isDown() = 0;

                  ^ ~~~~~

C:\Users\Usuario\Documents\Arduino\libraries\AxisJoystick\src/Joystick.h:105:19: note: virtual boolean Joystick::isRight()

  virtual boolean isRight() = 0;

                  ^ ~~~~~~

C:\Users\Usuario\Documents\Arduino\libraries\AxisJoystick\src/Joystick.h:113:19: note: virtual boolean Joystick::isLeft()

  virtual boolean isLeft() = 0;

                  ^ ~~~~~

C:\Users\Usuario\Documents\Arduino\libraries\AxisJoystick\src/Joystick.h:120:15: note: virtual int Joystick::xAxis()

  virtual int xAxis() = 0;

              ^ ~~~~

C:\Users\Usuario\Documents\Arduino\libraries\AxisJoystick\src/Joystick.h:127:15: note: virtual int Joystick::yAxis()

  virtual int yAxis() = 0;

              ^ ~~~~

C:\Users\Usuario\Documents\Arduino\libraries\AxisJoystick\src/Joystick.h:134:15: note: virtual int Joystick::readVRx()

  virtual int readVRx() = 0;

              ^ ~~~~~~

C:\Users\Usuario\Documents\Arduino\libraries\AxisJoystick\src/Joystick.h:141:15: note: virtual int Joystick::readVRy()

  virtual int readVRy() = 0;

              ^ ~~~~~~

C:\Users\Usuario\Documents\Arduino\libraries\AxisJoystick\src/Joystick.h:148:15: note: virtual int Joystick::readSW()

  virtual int readSW() = 0;

              ^ ~~~~~

C:\Users\Usuario\Documents\Arduino\libraries\AxisJoystick\src/Joystick.h:156:16: note: virtual void Joystick::calibrate(int, int)

  virtual void calibrate(int low, int high) = 0;

                ^ ~~~~~~~~

C:\Users\Usuario\Documents\Arduino\libraries\AxisJoystick\src/Joystick.h:169:16: note: virtual void Joystick::calibrate(int, int, int)

  virtual void calibrate(int adcMin, int adcMax, int deviation) = 0;

                ^ ~~~~~~~~

C:\Users\Usuario\Documents\Arduino\libraries\ARDUINO_BUTTON_BOXV2\ARDUINO_BUTTON_BOXV2.ino: In function 'void setup()':

ARDUINO_BUTTON_BOXV2:102:11: error: expected unqualified-id before '.' token

  Joystick.begin();

          ^

C:\Users\Usuario\Documents\Arduino\libraries\ARDUINO_BUTTON_BOXV2\ARDUINO_BUTTON_BOXV2.ino: In function 'void CheckAllButtons()':

ARDUINO_BUTTON_BOXV2:123:39: error: expected unqualified-id before '.' token

                              Joystick.setButton(buttbx.key[i].kchar, 1);

                                      ^

ARDUINO_BUTTON_BOXV2:127:39: error: expected unqualified-id before '.' token

                              Joystick.setButton(buttbx.key[i].kchar, 0);

                                      ^

C:\Users\Usuario\Documents\Arduino\libraries\ARDUINO_BUTTON_BOXV2\ARDUINO_BUTTON_BOXV2.ino: In function 'void CheckAllEncoders()':

ARDUINO_BUTTON_BOXV2:158:15: error: expected unqualified-id before '.' token

      Joystick.setButton(rotaries[i].ccwchar, 1); delay(50); Joystick.setButton(rotaries[i].ccwchar, 0);

              ^

ARDUINO_BUTTON_BOXV2:158:70: error: expected unqualified-id before '.' token

      Joystick.setButton(rotaries[i].ccwchar, 1); delay(50); Joystick.setButton(rotaries[i].ccwchar, 0);

                                                                      ^

ARDUINO_BUTTON_BOXV2:161:15: error: expected unqualified-id before '.' token

      Joystick.setButton(rotaries[i].cwchar, 1); delay(50); Joystick.setButton(rotaries[i].cwchar, 0);

              ^

ARDUINO_BUTTON_BOXV2:161:69: error: expected unqualified-id before '.' token

      Joystick.setButton(rotaries[i].cwchar, 1); delay(50); Joystick.setButton(rotaries[i].cwchar, 0);

                                                                    ^

exit status 1
'JOYSTICK_DEFAULT_REPORT_ID' was not declared in this scope

Este informe podría contener más información con
"Mostrar salida detallada durante la compilación"
opción habilitada en Archivo -> Preferencias.

```

alguna idea.

Gracias

---

<div class="post-metadata">

**Author:** ![gerardrev](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/gerardrev/32/526419_2.png) [@gerardrev](https://forum.arduino.cc/u/gerardrev)\
**Post date:** [May 1, 2020, 8:34am UTC](https://forum.arduino.cc/t/buenas-problemas-con-el-arduino-micro/645454/8 "2020-05-01T08:34:18Z")

</div>

@mrvily  
Esto es porque no tienes bien seleccionado el arduino y el puerto.  
Si has seguido algunos de los tutos de internet suelen usar la arduino micro, selecciona esa.  
Después ve al puerto y selecciona el que te aparece como com9.  
Ya nos dices!

---

<div class="post-metadata">

**Author:** ![chester\_87](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/chester_87/32/528910_2.png) [@chester\_87](https://forum.arduino.cc/u/chester_87)\
**Post date:** [May 27, 2020, 12:45pm UTC](https://forum.arduino.cc/t/buenas-problemas-con-el-arduino-micro/645454/9 "2020-05-27T12:45:07Z")

</div>

Buenas, si aún no lo solucionaste te comento, me paso lo mismo ayer, estoy recien ingresando en este mundo y es vasto por lo que encontre mucha info pero en ninguna daba con la tecla hasta que un poco por accidente y un poco por logica llegue a una solucion.

1. Asegurate de descargar las librerias Keypad y Joystick con el mismo software de arduino

2. descargas esta libreria: [GitHub - MHeironimus/ArduinoJoystickLibrary: An Arduino library that adds one or more joysticks to the list of HID devices an Arduino Leonardo or Arduino Micro can support.](https://github.com/MHeironimus/ArduinoJoystickLibrary)

3. descomprimes en cualquier lado y le das click a deploy.bat

Ahora debería compilar. solo pones verificar y ves si compila.

Yo modifique el codigo ya que necesitaba 32 botones y no encoders por si te interesa.

Saludos

---

<div class="post-metadata">

**Author:** ![system](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/system/32/1140315_2.png) [@system](https://forum.arduino.cc/u/system)\
**Post date:** [May 7, 2021, 12:39am UTC](https://forum.arduino.cc/t/buenas-problemas-con-el-arduino-micro/645454/10 "2021-05-07T00:39:14Z")

</div>

Closed on May 7, 2021, 12:39am UTC


