title: Getting joystick input with Allegro 5.0.2
body: <p>I'm new in Allegro 5, I've written some code with the few tutorials there are so far, but I cannot get the joystick sticks input.</p>
  
  <p>Here the code, it is just two bars moving perpendicularly(and a very lazy approach, just swapped the x an y coordinates on the second bar).</p>
  
  <pre><code>#pragma comment (lib,"allegro-5.0.2-monolith-md-debug.lib")
  #include &lt;stdio.h&gt;
  #include &lt;string&gt;
  #include &lt;iostream&gt;
  #include &lt;allegro5/allegro.h&gt;
  #include &lt;allegro5/allegro_font.h&gt;
  #include &lt;allegro5/allegro_ttf.h&gt;
  
  #define FPS 0xFF
  #define SCREEN_W 1000
  #define SCREEN_H 750
  #define BAR_W 75
  #define BAR_H 10
  
  enum KEYS
  {
      KEY_LEFT, KEY_RIGHT
  };
  
  int main(int argc, char **argv)
  {
      ALLEGRO_DISPLAY *display = NULL;
      ALLEGRO_EVENT_QUEUE *event_queue = NULL;
      ALLEGRO_JOYSTICK *joystick = NULL;
      ALLEGRO_TIMER *timer = NULL;
      ALLEGRO_BITMAP *bouncer = NULL;
      float bouncer_x = SCREEN_W / 2.0 - BAR_W / 2.0;
      float bouncer_y = SCREEN_H - BAR_H;
      bool key[2] = {false, false};
      bool redraw = true;
      bool doexit = false;
  
      if(!al_init())
      {
          fprintf(stderr, "failed to initialize allegro!\n");
          return -1;
      }
  
      if(!al_install_keyboard())
      {
          fprintf(stderr, "failed to initialize the keyboard!\n");
          return -1;
      }
  
      if(!al_install_joystick())
      {
          fprintf(stderr, "failed to initialize the joystick!\n");
      }
      al_reconfigure_joysticks();
      joystick=al_get_joystick(al_get_num_joysticks()-1);
  
      timer = al_create_timer(1.0 / FPS);
      if(!timer)
      {
          fprintf(stderr, "failed to create timer!\n");
          return -1;
      }
  
      display = al_create_display(SCREEN_W, SCREEN_H);
      if(!display)
      {
          fprintf(stderr, "failed to create display!\n");
          al_destroy_timer(timer);
          return -1;
      }
  
      bouncer = al_create_bitmap(BAR_W, BAR_H);
      if(!bouncer)
      {
          fprintf(stderr, "failed to create bouncer bitmap!\n");
          al_destroy_display(display);
          al_destroy_timer(timer);
          return -1;
      }
  
      al_set_target_bitmap(bouncer);
      al_clear_to_color(al_map_rgb(0, 0, 255));
      al_set_target_bitmap(al_get_backbuffer(display));
  
      event_queue = al_create_event_queue();
      if(!event_queue)
      {
          fprintf(stderr, "failed to create event_queue!\n");
          al_destroy_bitmap(bouncer);
          al_destroy_display(display);
          al_destroy_timer(timer);
          return -1;
      }
  
      al_register_event_source(event_queue, al_get_display_event_source(display));
      al_register_event_source(event_queue, al_get_timer_event_source(timer));
      al_register_event_source(event_queue, al_get_keyboard_event_source());
      al_register_event_source(event_queue, al_get_joystick_event_source());
      al_clear_to_color(al_map_rgb(0,0,0));
  
      al_flip_display();
      al_start_timer(timer);
  
      while(!doexit)
      {
          ALLEGRO_EVENT ev;
          al_wait_for_event(event_queue, &amp;ev);
  
  
          if(ev.type == ALLEGRO_EVENT_TIMER)
          {
  
              if(key[KEY_LEFT] &amp;&amp; bouncer_x &gt;= 2.0)
                  bouncer_x -= 2.0;
  
              if(key[KEY_RIGHT] &amp;&amp; bouncer_x &lt;= SCREEN_W - BAR_W - 2.0)
                  bouncer_x += 2.0;
  
              redraw = true;
          }
  
          else if(ev.type == ALLEGRO_EVENT_JOYSTICK_AXIS
                  &amp;&amp; ev.joystick.stick == 0
                  &amp;&amp; ev.joystick.axis == 0)
          {        
              float joypos=ev.joystick.pos;
  
              if(joypos&lt;0 &amp;&amp; bouncer_x &gt;= 2.0)
                  bouncer_x-=joypos;
  
              if(joypos&gt;0 &amp;&amp; bouncer_x &lt;= SCREEN_W - BAR_W - 2.0)
                  bouncer_x+=joypos;
  
              if(joypos=0)
                  bouncer_x=SCREEN_W/2;
          }
  
          else if(ev.type == ALLEGRO_EVENT_DISPLAY_CLOSE)
              break;
  
          else if(ev.type == ALLEGRO_EVENT_KEY_DOWN)
          {
              switch(ev.keyboard.keycode)
              {
              case ALLEGRO_KEY_LEFT:
                  key[KEY_LEFT] = true;
                  break;
  
              case ALLEGRO_KEY_RIGHT:
                  key[KEY_RIGHT] = true;
                  break;
              }
          }
          else if(ev.type == ALLEGRO_EVENT_KEY_UP)
          {
              switch(ev.keyboard.keycode)
              {
              case ALLEGRO_KEY_LEFT: 
                  key[KEY_LEFT] = false;
                  break;
  
              case ALLEGRO_KEY_RIGHT:
                  key[KEY_RIGHT] = false;
                  break;
  
              case ALLEGRO_KEY_ESCAPE:
                  doexit = true;
                  break;
              }
          }
  
          if(redraw &amp;&amp; al_is_event_queue_empty(event_queue))
          {
              std::string str=al_get_joystick_name(joystick);
              redraw = false;
  
              al_clear_to_color(al_map_rgb(0,0,0));
  
              al_draw_bitmap(bouncer, bouncer_x, bouncer_y, 0);
              al_draw_bitmap(bouncer, bouncer_y, bouncer_x, 0);
  
              std::cout &lt;&lt; ev.joystick.pos &lt;&lt; " ";
              std::cout &lt;&lt; str &lt;&lt; " ";
              std::cout &lt;&lt; al_get_joystick_active(joystick) &lt;&lt; std::endl;
  
              al_flip_display();
          }
      }
  
      al_destroy_bitmap(bouncer);
      al_destroy_timer(timer);
      al_destroy_display(display);
      al_destroy_event_queue(event_queue);
  
      return 0;
  }
  </code></pre>
  
  <p>Now, the trouble: <code>ev.joystick.pos</code> has a relatively static value (viewed trough MSVC2010 debugger), no matter if I have all the axis of my joystick at the max position.</p>
  
  <p>Also, I don't know how to get the value of an specific axis of an specific stick. I managed to get the bar move only when an specific axis and stick changes, but not "how much" it changes.</p>
  
  <p>Thanks in advance.</p>