L293D with ir help

I believe there is a conflict with the timers used to generate the motor pwm and the timer used for the IR receive.
My thinking is that they are both using Timer2.

I think if you use motor3 and motor4 you will use Timer0 at some higher frequency and loose the millis() timing.

The read me for the IRremote library
https://github.com/Arduino-IRremote/Arduino-IRremote
has a section about changing the timer used by the library.

I think you want to modify the library file on your computer. You will need to find the library file called
private/IRTimer.hpp and change this section to use Timer1 instead of Timer2.

* Plain AVR CPU's, no boards
 ***************************************/
// Arduino Duemilanove, Diecimila, LilyPad, Mini, Fio, Nano, etc
// ATmega328
#if defined(__AVR_ATmega328P__) || defined(__AVR_ATmega328PB__) || defined(__AVR_ATmega168__)
#  if !defined(IR_USE_AVR_TIMER1) && !defined(IR_USE_AVR_TIMER2)
//#define IR_USE_AVR_TIMER1   // send pin = pin 9
#define IR_USE_AVR_TIMER2     // send pin = pin 3
#  endif

Change these two lines.

#define IR_USE_AVR_TIMER1   // send pin = pin 9
//#define IR_USE_AVR_TIMER2     // send pin = pin 3