Need help to decode async serial signal - pic inside

Progress Update:
I have recently been able to toggle the relay via the Arduino. :slight_smile:

After some additional digging, I discovered the following:

Turns out I didn't know how to use the capture software properly (probably still dont), and it ended up that I was missing an earlier start bit that I didn't see initially. I slowed my capture down to 1Khz, and learned that I needed a 470us start bit, followed by a 12ms delay, then the data (data only repeated 3x) .

I also learned that after the start bit, for whatever reason, I need to send my data 3 times. Not 100% sure why... might be a timing issue, or something else I am unaware of at this time. I don't have access to a fancy logic analyzer, so I'm out of luck here as best I can tell.

But in the end, I got it to work.

In case this helps anyone else out in the future, here are some specifics about the item I was working with:

Living Solutions
Outdoor 2-outlet remote control
Distributed by Walgreen's
model number YLT-11
UPC: 049022614611

PS: I bought 2 of them, and they each use the same remote control signal.

Here is my test code:

//Timings
int longDelay = 1250;
int shortDelay = 480;

//output pin that sends signal
int pin = 8;

void setup() {
  pinMode(pin, OUTPUT);
  digitalWrite(pin,LOW);
  Serial.begin(115200);
}

void loop() {
  //Turn it On
  burst(pin);
  for(int i = 0; i < 3; i++){
    common(pin);
    common(pin);
    common(pin);
    common(pin);
    shortOn(pin);
    common(pin);
    shortOn(pin);
    shortOn(pin);
    common(pin);
    common(pin);
    delayMicroseconds(12000);    
  }
  //Admire
  delay(2000);

  //now turn it off
  burst(pin);
  for(int i = 0; i< 3; i++){
    common(pin);
    common(pin);
    common(pin);
    common(pin);
    common(pin);
    longOn(pin);
    longOn(pin);
    longOn(pin);
    shortOn(pin);      
    common(pin);
    shortOn(pin);  
    delayMicroseconds(12000);    
  }
  //Admire
  delay(2000);
}

void burst(int pinNum){
  digitalWrite(pinNum,HIGH);
  delayMicroseconds(470);
  digitalWrite(pinNum,LOW);
  //short off
  delayMicroseconds(12000);
}

void common(int pinNum){
  //long on
  digitalWrite(pinNum,HIGH);
  delayMicroseconds(longDelay);
  digitalWrite(pinNum,LOW);
  //short off
  delayMicroseconds(shortDelay);
  //short on
  digitalWrite(pinNum,HIGH);
  delayMicroseconds(shortDelay);
  digitalWrite(pinNum,LOW);    
  //long off
  delayMicroseconds(longDelay);

}

void shortOn(int pinNum){
      //short on
  digitalWrite(pinNum,HIGH);
  delayMicroseconds(shortDelay);
  digitalWrite(pinNum,LOW);    
  delayMicroseconds(longDelay);
}

void longOn(int pinNum){
    //long on
  digitalWrite(pinNum,HIGH);
  delayMicroseconds(longDelay);
  digitalWrite(pinNum,LOW);
  //short off
  delayMicroseconds(shortDelay);
}