Infrared4Arduino
IrReceiverPoll.cpp
Go to the documentation of this file.
1 #include <Arduino.h>
2 #include "IrReceiverPoll.h"
3 
4 IrReceiverPoll::IrReceiverPoll(size_t captureLength,
5  pin_t pin_,
6  boolean pullup,
7  microseconds_t markExcess,
8  milliseconds_t beginningTimeout,
9  milliseconds_t endingTimeout) : IrReceiver(captureLength, pin_, pullup, markExcess) {
10  setBeginningTimeout(beginningTimeout);
11  setEndingTimeout(endingTimeout);
12  durationData = new microseconds_t[bufferSize];
13  dataLength = 0;
14 }
15 
17  delete [] durationData;
18  // let the pin stay as input
19 }
20 
23  dataLength = 0;
24 }
25 
27  reset();
28  timeouted = !searchForStart();
29  if (timeouted)
30  return;
31  collectData();
32 }
33 
34 unsigned long timeSince(unsigned long then) {
35  return micros() - then;
36 }
37 
38 boolean IrReceiverPoll::searchForStart() {
39  unsigned long start = micros();
40  unsigned long beginningTimeoutInMicros = 1000UL * beginningTimeout;
41  while (readIr() == IrReceiver::IR_SPACE)
42  if (timeSince(start) > beginningTimeoutInMicros)
43  return false;
44  return true;
45 }
46 
47 void IrReceiverPoll::collectData() {
49  unsigned long endingTimeoutInMicros = 1000UL * endingTimeout;
50  unsigned long lastTime = micros();
51  while (dataLength < bufferSize) {
52  unsigned long now = micros();
53  IrReceiver::irdata_t data = readIr();
54  if (data != lastDataRead) {
55  recordDuration(now - lastTime);
56  lastDataRead = data;
57  lastTime = now;
58  } else if (data == HIGH && (now - lastTime > endingTimeoutInMicros)) {
59  recordDuration(now - lastTime);
60  return; // normal exit
61  }
62  }
63 }
64 
65 void IrReceiverPoll::recordDuration(unsigned long t) {
66  durationData[dataLength++] = (microseconds_t) t;
67 }
void setBeginningTimeout(milliseconds_t timeOut)
off-period, also called gap
Definition: IrReceiver.h:49
uint16_t microseconds_t
Type for durations in micro seconds.
Definition: InfraredTypes.h:16
uint8_t pin_t
Type for GPIO pin, compatible with Arduino libs.
Definition: InfraredTypes.h:40
irdata_t
Enum for the duration types.
Definition: IrReceiver.h:47
size_t bufferSize
Definition: IrReader.h:41
uint16_t milliseconds_t
Type for durations in milli seconds.
Definition: InfraredTypes.h:26
Abstract base class for demodulating IR receivers.
Definition: IrReceiver.h:11
void enable()
In this class, enable does the actual collection of the data.
boolean timeouted
True if last receive ended with a timeout.
Definition: IrReader.h:47
milliseconds_t endingTimeout
Definition: IrReader.h:39
on-period, also called flash
Definition: IrReceiver.h:48
IrReceiverPoll(size_t captureLength=defaultCaptureLength, pin_t pin=defaultPin, boolean pullup=false, microseconds_t markExcess=defaultMarkExcess, milliseconds_t beginningTimeout=defaultBeginningTimeout, milliseconds_t endingTimeout=defaultEndingTimeout)
milliseconds_t beginningTimeout
Definition: IrReader.h:38
unsigned long timeSince(unsigned long then)
virtual void reset()
Definition: IrReader.h:67
void setEndingTimeout(milliseconds_t timeOut)