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.