Revivo, transmitir señal IR mediante protocolo NEC sin librerías

Hola, como dice el titulo. Revivo el tema en un nuevo hilo ya que no he tenido respuesta (supongo porque ya es viejo y no se le presta atención a post viejos).

El usuario @jorge-869 en diciembre del 2015 consulto sobre este mismo tema, el desarrollo un código en base a otro que encontró pero no le era posible recibir el mismo dato que enviaba.
Solucione ese problema y ahora los códigos funcionan correctamente. Ahora sucede que quiero aplicar todo el protocolo NEC a estos códigos, pero no hay manera que funcione.

Explico lo que sucede, resulta que luego de enviar la señal y verificar que el botón se mantiene presionado. Debería de enviarse una señal de repetición. En otros términos, si se mantiene el botón presionado no se envía continuamente la señal que equivaldría dicho botón, si no que lo envía una vez y luego envía un comando de repetición tantas veces sea necesario hasta que se deje de oprimir el botón.
Resulta que entre comando y comando de repetición hay una pausa (no se transmite nada) de 108mil microsegundos. Si envió dicha pausa el resultado de la lectura es negativa (recibe un valor negativo no nulo), si bajo ese valor llego hasta los 9000 microsegundos y ahí si lo envía, pero, si envió ejemplo 5 de esas pausas (cinco de 9000) sucede lo mismo que si enviara una, un valor nulo o un valor muy chico.

Debería poder estar enviando algo así:

Solo estoy pudiendo enviar bien los primeros 67.5ms.

Este es el código

Envía datos:

#define PIN 3

#define inicio 9000
#define cero    560
#define Hz    38000

void setup() {
  pinMode(PIN, OUTPUT);
}

void loop() {
          delayMicroseconds(96187);
          escribeEMISOR(inicio);
          delayMicroseconds(2250);
          escribeEMISOR(cero);
}

void escribeEMISOR(int microseg){
  tone(PIN, Hz);
  delayMicroseconds(microseg);
  noTone(PIN);
}

Recibe datos:

#define PIN 9

int datorecibido;

void setup() {
  Serial.begin(9600);
  pinMode(PIN, INPUT);
}

void loop() {
  datorecibido = pulseIn(PIN, HIGH);
  Serial.println(datorecibido);
}

Estos códigos son solo para probar si envía y recibe correctamente la señal.

Los códigos que envían y reciben los comando esta en este link:
https://forum.arduino.cc/index.php?topic=365823.0