RC-Switch and self learning power outlets

Hello All, who can help me to simplify the Arduino code for a non 'accepted RC- outlet switch by "ReceiveDemo_Advanced"
I analyzed the Transmitter ouput signal by an oscilloscope and found the results below: (for ...u read ..usec)
StartPeriod at message-start: High340u, Low2470u
OnePeriod: High320u,Low200u,High320u,Low1180u
ZeroPeriod: High320u,Low1180u,High320u,Low200usec
(So total duration of a One or a Zero bit = 2020 usec)
MessageEndPeriod:High320u,Low10000 (time between retransmissions)
A Total message is 32 bits long so 64 H/L transitions => 32X 2020= 64,64 mSec
My solution to send the code is very straightforward as you can see below.
Who can assist me to simplify this methode?

/*1*/
digitalWrite(output2,HIGH);delayMicroseconds(H);digitalWrite(output2,LOW);delayMicroseconds(L);digitalWrite(output2,HIGH);delayMicroseconds(H);digitalWrite(output2,LOW);delayMicroseconds(LL);
  /*0*/ digitalWrite(output2,HIGH);delayMicroseconds(H);digitalWrite(output2,LOW);delayMicroseconds(LL);digitalWrite(output2,HIGH);delayMicroseconds(H);digitalWrite(output2,LOW);delayMicroseconds(L);
.......
.......
etc.
32 times+ StartPeriod

It works great but it makes my sketch difficult to read and complicated to adjust future mutations in code.
It's my intention to output like "output (32 X 101010101010101......etc)"
who can help me to make a simple routine?
Here you find my code for switching on and off repeatedly in combination with 433 MHz transmitter and an ESP32/ Uno/Nano- board:

int L= 200;
int LL= 1180;
int H =320;

const int output2 = 2; 


void setup(){
    pinMode(output2, OUTPUT);
    digitalWrite(output2, LOW);
}
void loop(){
  
for (int x=0; x<8; x++){      //  number of Retransmissions

   //On1   
    
  /*VLL*/ digitalWrite(output2,HIGH); delayMicroseconds(340);digitalWrite(output2,LOW);delayMicroseconds(2470);
  
  /*1*/ digitalWrite(output2,HIGH);delayMicroseconds(H);digitalWrite(output2,LOW);delayMicroseconds(L);digitalWrite(output2,HIGH);delayMicroseconds(H);digitalWrite(output2,LOW);delayMicroseconds(LL);  
  /*1*/ digitalWrite(output2,HIGH);delayMicroseconds(H);digitalWrite(output2,LOW);delayMicroseconds(L);digitalWrite(output2,HIGH);delayMicroseconds(H);digitalWrite(output2,LOW);delayMicroseconds(LL);
  /*0*/ digitalWrite(output2,HIGH);delayMicroseconds(H);digitalWrite(output2,LOW);delayMicroseconds(LL);digitalWrite(output2,HIGH);delayMicroseconds(H);digitalWrite(output2,LOW);delayMicroseconds(L);
  /*1*/ digitalWrite(output2,HIGH);delayMicroseconds(H);digitalWrite(output2,LOW);delayMicroseconds(L);digitalWrite(output2,HIGH);delayMicroseconds(H);digitalWrite(output2,LOW);delayMicroseconds(LL);
  /*1*/ digitalWrite(output2,HIGH);delayMicroseconds(H);digitalWrite(output2,LOW);delayMicroseconds(L);digitalWrite(output2,HIGH);delayMicroseconds(H);digitalWrite(output2,LOW);delayMicroseconds(LL); 
  /*1*/ digitalWrite(output2,HIGH);delayMicroseconds(H);digitalWrite(output2,LOW);delayMicroseconds(L);digitalWrite(output2,HIGH);delayMicroseconds(H);digitalWrite(output2,LOW);delayMicroseconds(LL);
  /*1*/ digitalWrite(output2,HIGH);delayMicroseconds(H);digitalWrite(output2,LOW);delayMicroseconds(L);digitalWrite(output2,HIGH);delayMicroseconds(H);digitalWrite(output2,LOW);delayMicroseconds(LL); 
  /*0*/ digitalWrite(output2,HIGH);delayMicroseconds(H);digitalWrite(output2,LOW);delayMicroseconds(LL);digitalWrite(output2,HIGH);delayMicroseconds(H);digitalWrite(output2,LOW);delayMicroseconds(L);
  /*0*/ digitalWrite(output2,HIGH);delayMicroseconds(H);digitalWrite(output2,LOW);delayMicroseconds(LL);digitalWrite(output2,HIGH);delayMicroseconds(H);digitalWrite(output2,LOW);delayMicroseconds(L);
  /*1*/ digitalWrite(output2,HIGH);delayMicroseconds(H);digitalWrite(output2,LOW);delayMicroseconds(L);digitalWrite(output2,HIGH);delayMicroseconds(H);digitalWrite(output2,LOW);delayMicroseconds(LL);
  /*1*/ digitalWrite(output2,HIGH);delayMicroseconds(H);digitalWrite(output2,LOW);delayMicroseconds(L);digitalWrite(output2,HIGH);delayMicroseconds(H);digitalWrite(output2,LOW);delayMicroseconds(LL);
  /*0*/ digitalWrite(output2,HIGH);delayMicroseconds(H);digitalWrite(output2,LOW);delayMicroseconds(LL);digitalWrite(output2,HIGH);delayMicroseconds(H);digitalWrite(output2,LOW);delayMicroseconds(L);
  /*0*/ digitalWrite(output2,HIGH);delayMicroseconds(H);digitalWrite(output2,LOW);delayMicroseconds(LL);digitalWrite(output2,HIGH);delayMicroseconds(H);digitalWrite(output2,LOW);delayMicroseconds(L);
  /*1*/ digitalWrite(output2,HIGH);delayMicroseconds(H);digitalWrite(output2,LOW);delayMicroseconds(L);digitalWrite(output2,HIGH);delayMicroseconds(H);digitalWrite(output2,LOW);delayMicroseconds(LL);
  /*0*/ digitalWrite(output2,HIGH);delayMicroseconds(H);digitalWrite(output2,LOW);delayMicroseconds(LL);digitalWrite(output2,HIGH);delayMicroseconds(H);digitalWrite(output2,LOW);delayMicroseconds(L);
  /*0*/ digitalWrite(output2,HIGH);delayMicroseconds(H);digitalWrite(output2,LOW);delayMicroseconds(LL);digitalWrite(output2,HIGH);delayMicroseconds(H);digitalWrite(output2,LOW);delayMicroseconds(L);
  /*1*/ digitalWrite(output2,HIGH);delayMicroseconds(H);digitalWrite(output2,LOW);delayMicroseconds(L);digitalWrite(output2,HIGH);delayMicroseconds(H);digitalWrite(output2,LOW);delayMicroseconds(LL);
  /*1*/ digitalWrite(output2,HIGH);delayMicroseconds(H);digitalWrite(output2,LOW);delayMicroseconds(L);digitalWrite(output2,HIGH);delayMicroseconds(H);digitalWrite(output2,LOW);delayMicroseconds(LL); 
  /*1*/ digitalWrite(output2,HIGH);delayMicroseconds(H);digitalWrite(output2,LOW);delayMicroseconds(L);digitalWrite(output2,HIGH);delayMicroseconds(H);digitalWrite(output2,LOW);delayMicroseconds(LL);
  /*1*/ digitalWrite(output2,HIGH);delayMicroseconds(H);digitalWrite(output2,LOW);delayMicroseconds(L);digitalWrite(output2,HIGH);delayMicroseconds(H);digitalWrite(output2,LOW);delayMicroseconds(LL); 
  /*1*/ digitalWrite(output2,HIGH);delayMicroseconds(H);digitalWrite(output2,LOW);delayMicroseconds(L);digitalWrite(output2,HIGH);delayMicroseconds(H);digitalWrite(output2,LOW);delayMicroseconds(LL);
  /*1*/ digitalWrite(output2,HIGH);delayMicroseconds(H);digitalWrite(output2,LOW);delayMicroseconds(L);digitalWrite(output2,HIGH);delayMicroseconds(H);digitalWrite(output2,LOW);delayMicroseconds(LL); 
  /*1*/ digitalWrite(output2,HIGH);delayMicroseconds(H);digitalWrite(output2,LOW);delayMicroseconds(L);digitalWrite(output2,HIGH);delayMicroseconds(H);digitalWrite(output2,LOW);delayMicroseconds(LL);
  /*1*/ digitalWrite(output2,HIGH);delayMicroseconds(H);digitalWrite(output2,LOW);delayMicroseconds(L);digitalWrite(output2,HIGH);delayMicroseconds(H);digitalWrite(output2,LOW);delayMicroseconds(LL); 
  /*1*/ digitalWrite(output2,HIGH);delayMicroseconds(H);digitalWrite(output2,LOW);delayMicroseconds(L);digitalWrite(output2,HIGH);delayMicroseconds(H);digitalWrite(output2,LOW);delayMicroseconds(LL);
  /*1*/ digitalWrite(output2,HIGH);delayMicroseconds(H);digitalWrite(output2,LOW);delayMicroseconds(L);digitalWrite(output2,HIGH);delayMicroseconds(H);digitalWrite(output2,LOW);delayMicroseconds(LL);
  /*1*/ digitalWrite(output2,HIGH);delayMicroseconds(H);digitalWrite(output2,LOW);delayMicroseconds(L);digitalWrite(output2,HIGH);delayMicroseconds(H);digitalWrite(output2,LOW);delayMicroseconds(LL); 
  /*0*/ digitalWrite(output2,HIGH);delayMicroseconds(H);digitalWrite(output2,LOW);delayMicroseconds(LL);digitalWrite(output2,HIGH);delayMicroseconds(H);digitalWrite(output2,LOW);delayMicroseconds(L);
  /*1*/ digitalWrite(output2,HIGH);delayMicroseconds(H);digitalWrite(output2,LOW);delayMicroseconds(L);digitalWrite(output2,HIGH);delayMicroseconds(H);digitalWrite(output2,LOW);delayMicroseconds(LL); 
  /*1*/ digitalWrite(output2,HIGH);delayMicroseconds(H);digitalWrite(output2,LOW);delayMicroseconds(L);digitalWrite(output2,HIGH);delayMicroseconds(H);digitalWrite(output2,LOW);delayMicroseconds(LL);
  /*1*/ digitalWrite(output2,HIGH);delayMicroseconds(H);digitalWrite(output2,LOW);delayMicroseconds(L);digitalWrite(output2,HIGH);delayMicroseconds(H);digitalWrite(output2,LOW);delayMicroseconds(LL); 
  /*0*/ digitalWrite(output2,HIGH);delayMicroseconds(H);digitalWrite(output2,LOW);delayMicroseconds(LL);digitalWrite(output2,HIGH);delayMicroseconds(H);digitalWrite(output2,LOW);delayMicroseconds(L);

  /*Stop*/ digitalWrite(output2,HIGH);delayMicroseconds(H);digitalWrite(output2,LOW);delayMicroseconds(10000);    
} 

delay(5000);

 for (int x=0; x<8; x++){       //  number of Retransmissions
  
  // Off1

  /*VLL*/ digitalWrite(output2,HIGH); delayMicroseconds(340);digitalWrite(output2,LOW);delayMicroseconds(2470);
  
  /*1*/ digitalWrite(output2,HIGH);delayMicroseconds(H);digitalWrite(output2,LOW);delayMicroseconds(L);digitalWrite(output2,HIGH);delayMicroseconds(H);digitalWrite(output2,LOW);delayMicroseconds(LL);  
  /*1*/ digitalWrite(output2,HIGH);delayMicroseconds(H);digitalWrite(output2,LOW);delayMicroseconds(L);digitalWrite(output2,HIGH);delayMicroseconds(H);digitalWrite(output2,LOW);delayMicroseconds(LL);
  /*0*/ digitalWrite(output2,HIGH);delayMicroseconds(H);digitalWrite(output2,LOW);delayMicroseconds(LL);digitalWrite(output2,HIGH);delayMicroseconds(H);digitalWrite(output2,LOW);delayMicroseconds(L);
  /*1*/ digitalWrite(output2,HIGH);delayMicroseconds(H);digitalWrite(output2,LOW);delayMicroseconds(L);digitalWrite(output2,HIGH);delayMicroseconds(H);digitalWrite(output2,LOW);delayMicroseconds(LL);
  /*1*/ digitalWrite(output2,HIGH);delayMicroseconds(H);digitalWrite(output2,LOW);delayMicroseconds(L);digitalWrite(output2,HIGH);delayMicroseconds(H);digitalWrite(output2,LOW);delayMicroseconds(LL); 
  /*1*/ digitalWrite(output2,HIGH);delayMicroseconds(H);digitalWrite(output2,LOW);delayMicroseconds(L);digitalWrite(output2,HIGH);delayMicroseconds(H);digitalWrite(output2,LOW);delayMicroseconds(LL);
  /*1*/ digitalWrite(output2,HIGH);delayMicroseconds(H);digitalWrite(output2,LOW);delayMicroseconds(L);digitalWrite(output2,HIGH);delayMicroseconds(H);digitalWrite(output2,LOW);delayMicroseconds(LL); 
  /*0*/ digitalWrite(output2,HIGH);delayMicroseconds(H);digitalWrite(output2,LOW);delayMicroseconds(LL);digitalWrite(output2,HIGH);delayMicroseconds(H);digitalWrite(output2,LOW);delayMicroseconds(L);
  /*0*/ digitalWrite(output2,HIGH);delayMicroseconds(H);digitalWrite(output2,LOW);delayMicroseconds(LL);digitalWrite(output2,HIGH);delayMicroseconds(H);digitalWrite(output2,LOW);delayMicroseconds(L);
  /*1*/ digitalWrite(output2,HIGH);delayMicroseconds(H);digitalWrite(output2,LOW);delayMicroseconds(L);digitalWrite(output2,HIGH);delayMicroseconds(H);digitalWrite(output2,LOW);delayMicroseconds(LL);
  /*1*/ digitalWrite(output2,HIGH);delayMicroseconds(H);digitalWrite(output2,LOW);delayMicroseconds(L);digitalWrite(output2,HIGH);delayMicroseconds(H);digitalWrite(output2,LOW);delayMicroseconds(LL);
  /*0*/ digitalWrite(output2,HIGH);delayMicroseconds(H);digitalWrite(output2,LOW);delayMicroseconds(LL);digitalWrite(output2,HIGH);delayMicroseconds(H);digitalWrite(output2,LOW);delayMicroseconds(L);
  /*0*/ digitalWrite(output2,HIGH);delayMicroseconds(H);digitalWrite(output2,LOW);delayMicroseconds(LL);digitalWrite(output2,HIGH);delayMicroseconds(H);digitalWrite(output2,LOW);delayMicroseconds(L);
  /*1*/ digitalWrite(output2,HIGH);delayMicroseconds(H);digitalWrite(output2,LOW);delayMicroseconds(L);digitalWrite(output2,HIGH);delayMicroseconds(H);digitalWrite(output2,LOW);delayMicroseconds(LL);
  /*0*/ digitalWrite(output2,HIGH);delayMicroseconds(H);digitalWrite(output2,LOW);delayMicroseconds(LL);digitalWrite(output2,HIGH);delayMicroseconds(H);digitalWrite(output2,LOW);delayMicroseconds(L);
  /*0*/ digitalWrite(output2,HIGH);delayMicroseconds(H);digitalWrite(output2,LOW);delayMicroseconds(LL);digitalWrite(output2,HIGH);delayMicroseconds(H);digitalWrite(output2,LOW);delayMicroseconds(L);
  /*1*/ digitalWrite(output2,HIGH);delayMicroseconds(H);digitalWrite(output2,LOW);delayMicroseconds(L);digitalWrite(output2,HIGH);delayMicroseconds(H);digitalWrite(output2,LOW);delayMicroseconds(LL);
  /*1*/ digitalWrite(output2,HIGH);delayMicroseconds(H);digitalWrite(output2,LOW);delayMicroseconds(L);digitalWrite(output2,HIGH);delayMicroseconds(H);digitalWrite(output2,LOW);delayMicroseconds(LL); 
  /*1*/ digitalWrite(output2,HIGH);delayMicroseconds(H);digitalWrite(output2,LOW);delayMicroseconds(L);digitalWrite(output2,HIGH);delayMicroseconds(H);digitalWrite(output2,LOW);delayMicroseconds(LL);
  /*1*/ digitalWrite(output2,HIGH);delayMicroseconds(H);digitalWrite(output2,LOW);delayMicroseconds(L);digitalWrite(output2,HIGH);delayMicroseconds(H);digitalWrite(output2,LOW);delayMicroseconds(LL); 
  /*1*/ digitalWrite(output2,HIGH);delayMicroseconds(H);digitalWrite(output2,LOW);delayMicroseconds(L);digitalWrite(output2,HIGH);delayMicroseconds(H);digitalWrite(output2,LOW);delayMicroseconds(LL);
  /*1*/ digitalWrite(output2,HIGH);delayMicroseconds(H);digitalWrite(output2,LOW);delayMicroseconds(L);digitalWrite(output2,HIGH);delayMicroseconds(H);digitalWrite(output2,LOW);delayMicroseconds(LL); 
  /*1*/ digitalWrite(output2,HIGH);delayMicroseconds(H);digitalWrite(output2,LOW);delayMicroseconds(L);digitalWrite(output2,HIGH);delayMicroseconds(H);digitalWrite(output2,LOW);delayMicroseconds(LL);
  /*1*/ digitalWrite(output2,HIGH);delayMicroseconds(H);digitalWrite(output2,LOW);delayMicroseconds(L);digitalWrite(output2,HIGH);delayMicroseconds(H);digitalWrite(output2,LOW);delayMicroseconds(LL); 
  /*1*/ digitalWrite(output2,HIGH);delayMicroseconds(H);digitalWrite(output2,LOW);delayMicroseconds(L);digitalWrite(output2,HIGH);delayMicroseconds(H);digitalWrite(output2,LOW);delayMicroseconds(LL);
  /*1*/ digitalWrite(output2,HIGH);delayMicroseconds(H);digitalWrite(output2,LOW);delayMicroseconds(L);digitalWrite(output2,HIGH);delayMicroseconds(H);digitalWrite(output2,LOW);delayMicroseconds(LL);
  /*1*/ digitalWrite(output2,HIGH);delayMicroseconds(H);digitalWrite(output2,LOW);delayMicroseconds(L);digitalWrite(output2,HIGH);delayMicroseconds(H);digitalWrite(output2,LOW);delayMicroseconds(LL); 
  /*1*/ digitalWrite(output2,HIGH);delayMicroseconds(H);digitalWrite(output2,LOW);delayMicroseconds(L);digitalWrite(output2,HIGH);delayMicroseconds(H);digitalWrite(output2,LOW);delayMicroseconds(LL);
  /*1*/ digitalWrite(output2,HIGH);delayMicroseconds(H);digitalWrite(output2,LOW);delayMicroseconds(L);digitalWrite(output2,HIGH);delayMicroseconds(H);digitalWrite(output2,LOW);delayMicroseconds(LL); 
  /*1*/ digitalWrite(output2,HIGH);delayMicroseconds(H);digitalWrite(output2,LOW);delayMicroseconds(L);digitalWrite(output2,HIGH);delayMicroseconds(H);digitalWrite(output2,LOW);delayMicroseconds(LL);
  /*1*/ digitalWrite(output2,HIGH);delayMicroseconds(H);digitalWrite(output2,LOW);delayMicroseconds(L);digitalWrite(output2,HIGH);delayMicroseconds(H);digitalWrite(output2,LOW);delayMicroseconds(LL); 
  /*0*/ digitalWrite(output2,HIGH);delayMicroseconds(H);digitalWrite(output2,LOW);delayMicroseconds(LL);digitalWrite(output2,HIGH);delayMicroseconds(H);digitalWrite(output2,LOW);delayMicroseconds(L);

  /*Stop*/ digitalWrite(output2,HIGH);delayMicroseconds(H);digitalWrite(output2,LOW);delayMicroseconds(10000);  
}                       
delay (5000);
}

Thank you very much for your help!

Alex

Have a read of the forum guidelines and post your code with code tags please .

Thank you for your advise,
I changed it!
Alex

are you sure this isn't ASCII?

ok, probably not ASCII with pulse separted by gaps

but it looks like a sequence of one or more pulses with a fix gap

looks like 2 2 1 3 2 2 2 1 2 3 2 1 2 3 1 2 3 2 2 2 2 2 2 2 2 2 2 1 3 2 2 1 2

if correct, a sub-function to generate one or more pulse with a fixed timing and gap either before or after.

No the code is not ASCII. A total One (1) and a Zero(0) periode are the same and have a duration of 2020usec. Only the position of the second pulse in the period is different for a One or a Zero.
like:

   sec     first- pulse:
......|-|'..|-|   => Zero
..|-|.......|-|   => One
<------------->   => 2020usec

just compare it as a Pulse Position Modulation for Ones and Zero's in a same Period of 2020 usec.
I hope I could make it clear for you in the above figure.
Alex

based on your code, i generated the following

yes.....that's correct

seems like a sequence of one or more pulses with a fixed pulse width, gap between pulses and gap between sets of pulses (aside from the first pulse).

consider

const int L  =  200;
const int LL = 1180;
const int H  =  320;
const int output2 = 2;

// -----------------------------------------------------------------------------
void
pulses (
    int             nPulse,
    unsigned long   width,
    unsigned long   space,
    unsigned long   gap )
{
    for (int n = 0; n < nPulse; n++)  {
        digitalWrite      (output2,HIGH);
        delayMicroseconds (width);
        digitalWrite      (output2,LOW);
        delayMicroseconds (space);
    }

    delayMicroseconds (gap - space);
}

// -----------------------------------------------------------------------------
byte seq [] = {
    2, 2, 1, 3, 2,  2, 2, 1, 2, 3,
    2, 1, 2, 3, 1,  2, 3, 2, 2, 2,
    2, 2, 2, 2, 2,  2, 2, 1, 3, 2,
    2, 1, 2
};

void sequence (void)
{
    pulses (1, H, 0, 2470);

    for (unsigned n = 0; n < sizeof(seq); n++)
        pulses (seq [n], H, L, LL);
}

// -----------------------------------------------------------------------------
void loop (){
    for (int x=0; x<8; x++)
        sequence ();
}

// -----------------------------------------------------------------------------
void setup (){
    pinMode (output2, OUTPUT);
    digitalWrite (output2, LOW);
}

I uploaded the sketch in my Nano board and checked the result with my Agilent DSO6034A Oscilloscope.
The result Looks really great.........!
just two remarks:

  • I miss a message gap of 10 msec between retransmissions
byte seq [] = {
    2, 2, 1, 3, 2,  2, 2, 1, 2, 3,
    2, 1, 2, 3, 1,  2, 3, 2, 2, 2,
    2, 2, 2, 2, 2,  2, 2, 1, 3, 2,
    2, 1, 2 , gap of 10msec
  • and a message needs to be repeated (resend) for about 8 a 16 tiimes as it is
    for now in a pemanently iloop..(just ok for testing the result..!)
    Anyhow, the result looks great for now, thank you very much.....!
    Alex

i'd simply add a delay between transmission, not make it part of a sequence

presumably there are different sequences for different functions

just some extra information to consider .......

When I send the generated signal now to a second Nano interruptPin2, the second Nano output Ledpin13 shows now a correct representation of the Total 32 bits - message.....

const byte ledPin = 13;
const byte interruptPin = 2;
volatile byte state = LOW;

void setup() {
  pinMode(ledPin, OUTPUT);
  pinMode(interruptPin, INPUT_PULLUP);
  attachInterrupt(digitalPinToInterrupt(interruptPin), blink, Falling);
}

void loop() {
  digitalWrite(ledPin, state);
}

void blink() {
  state = !state;
}

may be a hint to see the problem in an other perspective.......

Alex

Dear Greg,
thank you so much, I adjusted your sketch proposal in my RC- outlet applications
It works great....!!
Alex

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.