Projector ballast bypass

The signal looks like it could be 1 start bit , 9 data bits, 2 stop bits but as you need to send so few values repeatedly then maybe just put them into a timings table and send then that way.

As an example here is some code I wrote to send a captured wireless doorbell code so I could trigger the doorbell receiver without pressing the doorbell button.
You could turn the loop code into a function that you pass the timing array as a parameter and then call it with the three one off startup codes from setup() and then write a loop procedure to call it with the repeat the same coded every second, forever.

// High/Low microsecond timings, first value is low timing, the rest alternate high/low
const uint16_t hlUsTimings[] = {
  32,999,999,32,32,999,999,32,32,999,999,32,32,999,32,999,
  32,999,32,999,32,999,32,999,32,999,999,32,32,999,32,999,
  32,999,999,32,32,999,999,32,32,999,999,32,32,999,32,999,
  32,32};
const uint8_t hlUsSize = sizeof(hlUsTimings) / sizeof(hlUsTimings[0]);

const uint8_t outPin = 3;                         // Transmitter output pin
const uint8_t ledPin = 13;                        // LED output pin

void setup() {
  pinMode(ledPin,OUTPUT);
  pinMode(outPin,OUTPUT);
  digitalWrite(outPin,LOW);
}

void loop() {
  digitalWrite(ledPin,!digitalRead(ledPin));
  noInterrupts();
  delay(10);
  for (uint8_t y = 0; y < hlUsSize; y++){
    digitalWrite(outPin,!digitalRead(pinState));  // Flip the pin
    uint32_t z = hlUsTimings[y];
    delayMicroseconds(z);
  }
  interrupts();
}

Can you zip up the Salea logic capture and attach it here or somewhere else people can get to it. That way I can hopefully load it in and check the results.