Changed rf.add() and rf.phase() to allow for uint32_t durations

Instead of limiting number of ticks to 15-bits (32767), RFControl allows for tick size to be any 32-bit number.  If ticks > 32767, RFControl adds repeated LOW or HIGH phases as needed to match full duration.  This provides for much more flexibility in creating pulse trains that include very long-duration "spaces" between repeats.
This commit is contained in:
Gregg 2021-10-15 17:42:17 -05:00
parent 96ac572136
commit 5bced71345
3 changed files with 37 additions and 23 deletions

View File

@ -69,11 +69,12 @@ void RFControl::start(uint32_t *data, int nData, uint8_t nCycles, uint8_t tickTi
void RFControl::clear(){
data.clear();
lowWord=true;
}
///////////////////
void RFControl::add(uint16_t onTime, uint16_t offTime){
void RFControl::add(uint32_t onTime, uint32_t offTime){
phase(onTime,HIGH);
phase(offTime,LOW);
@ -81,9 +82,11 @@ void RFControl::add(uint16_t onTime, uint16_t offTime){
///////////////////
void RFControl::phase(uint16_t nTicks, uint8_t phase){
void RFControl::phase(uint32_t nTicks, uint8_t phase){
uint32_t ticks=nTicks&0x7FFF;
while(nTicks>0){ // create as many repeated phases as needed to accomodate duration of nTicks
uint32_t ticks=nTicks>0x7FFF?0x7FFF:nTicks;
nTicks-=ticks;
if(lowWord)
data.push_back(ticks | (phase?(1<<15):0));
@ -92,6 +95,7 @@ void RFControl::phase(uint16_t nTicks, uint8_t phase){
lowWord=!lowWord;
}
}
///////////////////

View File

@ -22,8 +22,8 @@ class RFControl {
void start(uint8_t nCycles=1, uint8_t tickTime=1); // starts transmission of pulses from internal data structure, repeated for numCycles, where each tick in pulse is tickTime microseconds long
void clear(); // clears transmitter memory
void add(uint16_t onTime, uint16_t offTime); // adds pulse of onTime ticks HIGH followed by offTime ticks LOW
void phase(uint16_t nTicks, uint8_t phase); // adds either a HIGH phase or LOW phase lasting numTicks ticks
void add(uint32_t onTime, uint32_t offTime); // adds pulse of onTime ticks HIGH followed by offTime ticks LOW
void phase(uint32_t nTicks, uint8_t phase); // adds either a HIGH phase or LOW phase lasting numTicks ticks
};
// Helper macro for creating your own storage of uint32_t data array elements - used with first variation of start() above

View File

@ -10,22 +10,32 @@ void setup() {
Serial.println("\n\nHomeSpan RF Transmitter Example");
RFControl rf(18); // create an instance of RFControl with signal output to pin 6
RFControl rf(17); // create an instance of RFControl with signal output to pin 17
#define NPOINTS 3
rf.clear();
uint32_t data[NPOINTS];
rf.add(10000,10000);
rf.add(10000,10000);
rf.add(10000,40000);
for(int i=0;i<NPOINTS;i++){
if(i<NPOINTS-1)
data[i]=RF_PULSE(1000,9000);
else
data[i]=RF_PULSE(1000,30000);
}
rf.start(data,NPOINTS,2,100);
uint32_t t0=micros();
rf.start(4,100);
uint32_t t1=micros();
Serial.println("End Example");
Serial.println((t1-t0)/1000);
rf.clear();
rf.add(10000,10000);
rf.add(10000,10000);
t0=micros();
rf.start(4,100);
t1=micros();
Serial.println("End Example");
Serial.println((t1-t0)/1000);
} // end of setup()