Arduino com labview

Boas pessoal, tenho aqui embaixo a minha programação. Aviso que ainda sou iniciante nisto.
o que quero é substituir esses delays por outra função, já tentei a milis mas não percebo nada.
Quero substituir os delays porque o programa para sempre por causa deles. E não quero que o programa pare porque estou constantemente a enviar dados para o labview, e com isto, fica uma barraca grande quando o programa para.
quem me pode ajudar?

#include <boarddefs.h>
#include <IRremote.h>
#include <IRremoteInt.h>
#include <ir_Lego_PF_BitStreamEncoder.h>

int RECV_PIN = 11;
int BUZZER = 12;
int flame = A0;
int LDR = A5;
int Subir = 9;
int Descer = 10;
int var = 1;
int val = 0;

IRrecv irrecv(RECV_PIN);
decode_results results;

void setup()
{
Serial.begin(9600);
irrecv.enableIRIn();
pinMode(Subir, OUTPUT);
pinMode(Descer, OUTPUT);
pinMode(flame, INPUT);
pinMode(BUZZER, OUTPUT);
}
void loop() {

val = analogRead(flame);
if (val >= 50)
{
digitalWrite(BUZZER, HIGH);
digitalWrite(Subir, HIGH);
delay(3000);
digitalWrite(Subir, LOW);
}
if (val <= 10)
{
digitalWrite(BUZZER, LOW);
}
int estado = analogRead(LDR);
if (( estado < 100) && var == 0)
{
digitalWrite(Descer, HIGH);
delay(3000);
digitalWrite(Descer, LOW);
var = 1;
}
if ((estado > 800) && var == 1)
{
digitalWrite(Subir, HIGH);
delay(3000);
digitalWrite(Subir, LOW);
var = 0;
}

if (irrecv.decode(&results)){
if ((results.value == 0xFFA857) && var == 0)
{
var = 1;
digitalWrite(Descer, HIGH);
delay(3000);
digitalWrite(Descer, LOW);
}

if ((results.value == 0xFF629D) && var == 1)
{
var = 0;
digitalWrite(Subir, HIGH);
delay(3000);
digitalWrite(Subir, LOW);
}
irrecv.resume();
}

}

Pesquisa pelos exemplos BlinkWithoutDelay para veres como podes implementar isso sem parar o processador.

Estas a mandar os dados para o LabView como?? Por radio?