programmazione infrarossi

Ciao.
Ho provato a creare questo sketch:
[#include <IRremote.h>
const int RECV_PIN = 10;
IRrecv irrecv(RECV_PIN);
decode_results results;// simile al discorso che facevamo per la variabile "motore" nel progetto 8
int avantib = 13;    
int frenob = 8;  
int velocitab = 11;
int avantia = 12;    
int frenoa = 9;  
int velocitaa = 3;

void setup() 
{       
Serial.begin(9600);  //Initialize serial communication with Bluetooth module at 115200 btu.
irrecv.enableIRIn(); //Avvia ricezione
pinMode(avantib, OUTPUT);
pinMode(frenob, OUTPUT);
pinMode(velocitab, OUTPUT);
pinMode(avantia, OUTPUT);
pinMode(frenoa, OUTPUT);
pinMode(velocitaa, OUTPUT);

}

void loop()
{
if (irrecv.decode(&results)) // se il sensore infrarosso riceve un'informazione ARDUINO  fa quello che c'è in queste parentesi graffe
  {
Serial.println(results.value); // scrive sul monitor seriale il valore in un codice numerico numerico del tasto del telecomando che è stato premuto: ogni tasto di ogni telecomando ha un codice

        
if(results.value==3268063311){   // AVANTI 
digitalWrite(avantib, LOW);
digitalWrite(frenob, LOW);
analogWrite(velocitab,255);
delay (200);
analogWrite(velocitab,0);}

if(results.value==3268061271){  // INDIETRO 
digitalWrite(avantib, HIGH); 
digitalWrite(frenob, LOW);
analogWrite(velocitab,255);
delay (200);
analogWrite(velocitab,0);}

if(results.value==3268060251){  //  sinistra
digitalWrite(avantia, HIGH); 
digitalWrite(frenoa, LOW);
analogWrite(velocitaa,255);
delay (200);
analogWrite(velocitaa,0);}

if(results.value==3268065351){  // DESTRA
digitalWrite(avantia, LOW); 
digitalWrite(frenoa, LOW);
analogWrite(velocitaa,255);
delay (200);
analogWrite(velocitaa,0);}

 irrecv.resume(); //Attesa ricezione prossimo valore
}
}

















]

solo che in questo modo la macchina và a scatti perchè ho inserito il delay (200).
se integro la funzione while al posto di if il motore gira e poi non risponde più ai comandi.
come potrei fare?