#include <Probe.h>
#include <InputPin.h>
Probe::~Probe() {
if ( pin )
delete pin; };
Probe::Probe(
char* data,
String* msgPtr ) {
analogAverage = 0;
transition = (*data) == '+';
pin = new InputPin(
data + 1,
msgPtr );
if ( pin->valid() ) {
state = debounce();
*msgPtr += " Probe input pin ";
pin->fmtPin( msgPtr );
if ( transition )
*msgPtr += " On transition"; }
else {
delete pin;
pin = NULL; }; };
bool
Probe::isValid() {
return
pin != NULL; };
bool
Probe::probeStop() {
bool priorState = state;
state = debounce();
return
( state
&& ( ! transition || ! priorState ) ); };
void
Probe::reportDigital( String* msgPtr ) {
pin->reportPinChange( msgPtr ); };
bool
Probe::debounce() {
analogAverage -= analogAverage >> 8;
if ( pin->readPin() )
analogAverage += 0x100;
return
analogAverage >= 0x8000; };