arduino freezing( i think from serial connection)

i have an Arduino Leonardo, the IDE is 1.5.2. I am trying to make my ps2 controller work on my arduino, using the library from here GitHub - madsci1016/Arduino-PS2X: Read a Playstation 2 Gamepad or Guitar Hero Controller using an Arduino .
I used the code from the example(i will post it below). After i uploaded the code, in the serial monitor nothing appears( but there should apper some things). If i try to upload another code on the arduino, i get the error “serial port com 16 already in used blah blah”, and the only way to fix it is by uninstalling arduino driver from the device manager, and then install it again, and while it is installing, uploading the code, and many many times i need to uninstall ->install it again and retrying to upload the code in order to make arduino work again…

the same thing hapens with the accelerometer MMA8452 (using again an example from it’s library)

and i think that the problem is from the serial connection, since it says that “com 16 is already in used”

here is the code

#include <PS2X_lib.h>  //for v1.6

PS2X ps2x; // create PS2 Controller Class

//right now, the library does NOT support hot pluggable controllers, meaning 
//you must always either restart your Arduino after you conect the controller, 
//or call config_gamepad(pins) again after connecting the controller.
int error = 0; 
byte type = 0;
byte vibrate = 0;

void setup(){

 //CHANGES for v1.6 HERE!!! **************PAY ATTENTION*************
 error = ps2x.config_gamepad(13,11,10,12, true, true);   //setup pins and settings:  GamePad(clock, command, attention, data, Pressures?, Rumble?) check for error
 if(error == 0){
   Serial.println("Found Controller, configured successful");
   Serial.println("Try out all the buttons, X will vibrate the controller, faster as you press harder;");
  Serial.println("holding L1 or R1 will print out the analog stick values.");
  Serial.println("Go to for updates and to report bugs.");
  else if(error == 1)
   Serial.println("No controller found, check wiring, see readme.txt to enable debug. visit for troubleshooting tips");
  else if(error == 2)
   Serial.println("Controller found but not accepting commands. see readme.txt to enable debug. Visit for troubleshooting tips");
  else if(error == 3)
   Serial.println("Controller refusing to enter Pressures mode, may not support it. ");
   //Serial.print(ps2x.Analog(1), HEX);
   type = ps2x.readType(); 
     switch(type) {
       case 0:
        Serial.println("Unknown Controller type");
       case 1:
        Serial.println("DualShock Controller Found");
       case 2:
         Serial.println("GuitarHero Controller Found");

void loop(){
   /* You must Read Gamepad to get new values
   Read GamePad and set vibration values
   ps2x.read_gamepad(small motor on/off, larger motor strenght from 0-255)
   if you don't enable the rumble, use ps2x.read_gamepad(); with no values
   you should call this at least once a second
 if(error == 1) //skip loop if no controller found
 if(type == 2){ //Guitar Hero Controller
   ps2x.read_gamepad();          //read controller 
     Serial.println("Green Fret Pressed");
     Serial.println("Red Fret Pressed");
     Serial.println("Yellow Fret Pressed");
     Serial.println("Blue Fret Pressed");
     Serial.println("Orange Fret Pressed");

     Serial.println("Star Power Command");
    if(ps2x.Button(UP_STRUM))          //will be TRUE as long as button is pressed
     Serial.println("Up Strum");
     Serial.println("DOWN Strum");
    if(ps2x.Button(PSB_START))                   //will be TRUE as long as button is pressed
         Serial.println("Start is being held");
         Serial.println("Select is being held");

    if(ps2x.Button(ORANGE_FRET)) // print stick value IF TRUE
        Serial.print("Wammy Bar Position:");
        Serial.println(ps2x.Analog(WHAMMY_BAR), DEC); 

 else { //DualShock Controller
    ps2x.read_gamepad(false, vibrate);          //read controller and set large motor to spin at 'vibrate' speed
    if(ps2x.Button(PSB_START))                   //will be TRUE as long as button is pressed
         Serial.println("Start is being held");
         Serial.println("Select is being held");
     if(ps2x.Button(PSB_PAD_UP)) {         //will be TRUE as long as button is pressed
       Serial.print("Up held this hard: ");
       Serial.println(ps2x.Analog(PSAB_PAD_UP), DEC);
       Serial.print("Right held this hard: ");
        Serial.println(ps2x.Analog(PSAB_PAD_RIGHT), DEC);
       Serial.print("LEFT held this hard: ");
        Serial.println(ps2x.Analog(PSAB_PAD_LEFT), DEC);
       Serial.print("DOWN held this hard: ");
     Serial.println(ps2x.Analog(PSAB_PAD_DOWN), DEC);
      vibrate = ps2x.Analog(PSAB_BLUE);        //this will set the large motor vibrate speed based on 
                                              //how hard you press the blue (X) button    
    if (ps2x.NewButtonState())               //will be TRUE if any button changes state (on to off, or off to on)
         Serial.println("L3 pressed");
         Serial.println("R3 pressed");
         Serial.println("L2 pressed");
         Serial.println("R2 pressed");
         Serial.println("Triangle pressed");
    if(ps2x.ButtonPressed(PSB_RED))             //will be TRUE if button was JUST pressed
         Serial.println("Circle just pressed");
    if(ps2x.ButtonReleased(PSB_PINK))             //will be TRUE if button was JUST released
         Serial.println("Square just released");     
    if(ps2x.NewButtonState(PSB_BLUE))            //will be TRUE if button was JUST pressed OR released
         Serial.println("X just changed");    
    if(ps2x.Button(PSB_L1) || ps2x.Button(PSB_R1)) // print stick values if either is TRUE
        Serial.print("Stick Values:");
        Serial.print(ps2x.Analog(PSS_LY), DEC); //Left stick, Y axis. Other options: LX, RY, RX  
        Serial.print(ps2x.Analog(PSS_LX), DEC); 
        Serial.print(ps2x.Analog(PSS_RY), DEC); 
        Serial.println(ps2x.Analog(PSS_RX), DEC); 

After i uploaded the code, in the serial monitor nothing appears( but there should apper some things).

But, not until after some stuff happens. Add Serial.print() statements before and after those things, to determine what is causing the problem. It is not the serial connection, unless you have connected the keyboard all wrong.

nothing appears even if i put Serial.print("serial begin!!!!")...also it is a ps2 controller(play station 2 joystick) and it is all wired up good, but even if it wouldn't be wired up, there should be outputting something( and it does output nothing, even if i let it 10 minutes to run)

nothing appears even if i put Serial.print("serial begin!!!!")..

Whether anything should appear, or not, depends on where you put it. (That's a hint!)

There!!!! is!!!! nothing!!!! to!!!! get!!!! excited!!!! about!!!!

void setup(){
Serial.println("Serial begin!!!!!");

Is the baud rate for your serial monitor set for 57600 and not something else like 9600? I have that exact same library and I know it works great on an UNO and MEGA, but for a Leonardo, i'm not sure.

I don't see why it wouldn't work on a Leonardo, but check your baud rate anyways.

The next step, then, since your sketch doesn't seem to be starting, is to test the program with nothing connected to the Arduino, except the USB cable, of course.

even if something is connected to arduino, even if it's not, that still doesen't work...
and as i said in the first post, this sketch does not allow me to upload eny other sketch on the arduino, while it is running (the only way to upload a new sketch is by resetting the arduino and then uploading,and if i got lucky, it uploads, else i need to reset it again or reinstall the drivers to make it work again)

Perhaps you have some other application on your PC which is accessing the COM port? It's something that is sometimes done by mobile device management applications trying to detect phones etc being plugged in.

Not sure if this is the problem, but from: if(Serial) - Arduino Reference

if (Serial)

Indicates if the specified Serial port is ready.

On the Leonardo, if (Serial) indicates wether or not the USB CDC serial connection is open. For all other instances, including if (Serial1) on the Leonardo, this will always returns true.

This was introduced in Arduino 1.0.1.



void setup() {
//Initialize serial and wait for port to open:
while (!Serial) {
; // wait for serial port to connect. Needed for Leonardo only

void loop() {
//proceed normally