98 int16_t
begin(uint8_t
pin, uint16_t debounce_mS = 30,
bool invert =
true,
bool usePullUp =
true)
115 return (
_sw.readPublicData(
_pin) > 0);
128 uint8_t tx[8] = { 201,
_pin,
_pinMode,1,0x55,0x55,0x55,0x55 };
130 _sw.sendPacket(tx,rx);
139 return(256 * rx[7] + rx[6]);
153 uint8_t tx[8] = { 201,
_pin,
_pinMode,1,0x55,0x55,0x55,0x55 };
155 _sw.sendPacket(tx, rx);
165 return(256 * rx[7] + rx[6]);
180 uint8_t tx[8] = { 201,
_pin,
_pinMode,(uint8_t)resetTransitionCounts,0x55,0x55,0x55,0x55 };
182 _sw.sendPacket(tx, rx);
224 int16_t
setOutputPin(uint8_t outputPin, uint16_t transitionOutputValue, uint16_t doubleClickOutputValue)
227 return(
_sw.sendPacket(tx));
241 uint8_t tx[8] = { 204,
_pin,
_pinMode,(uint8_t)resetDoubleClickCount,0x55,0x55,0x55,0x55 };
243 _sw.sendPacket(tx, rx);
244 return(256 * rx[4] + rx[3]);
264 return(
initPacketNoResponse(5, (uint8_t)enabled, (uint8_t)(transitionCount & 0xFF), (uint8_t)(transitionCount >> 8)));
300 _debouncedInput = serialWombatDebouncedInput;
316 void begin(int32_t* variableToIncrement,
317 int32_t slowIncrement = 1, uint32_t slow_mS_betweenIncrements = 250,
318 uint16_t slowToMediumTransition_mS = 1000,
319 int32_t mediumIncrement = 1, uint32_t medium_mS_betweenIncrements = 100,
320 uint16_t mediumToFastTransition_mS = 1000 ,
321 int32_t fastIncrement = 1, uint32_t fast_mS_betweenIncrements = 50)
323 _variableToIncrement = variableToIncrement;
325 _slowIncrement = slowIncrement;
326 _slow_mS_betweenIncrements = slow_mS_betweenIncrements;
328 _slowToMediumTransition_mS = slowToMediumTransition_mS;
330 _mediumIncrement = mediumIncrement;
331 _medium_mS_betweenIncrements = medium_mS_betweenIncrements;
333 _mediumToFastTransistion_mS = mediumToFastTransition_mS;
335 _fastIncrement = fastIncrement;
336 _fast_mS_betweenIncrements = fast_mS_betweenIncrements;
338 _lastPressDuration = 0;
347 uint16_t pressDuration = _debouncedInput.readDurationInTrueState_mS();
349 bool incremented =
false;
350 bool pressed =
false;
351 if (pressDuration > 0)
353 if (_lastPressDuration >= pressDuration)
355 _lastPressDuration = 0;
358 if (pressDuration > _mediumToFastTransistion_mS)
361 increments = (pressDuration - _lastPressDuration) / _fast_mS_betweenIncrements;
362 *_variableToIncrement += _fastIncrement * increments;
363 _lastPressDuration += _fast_mS_betweenIncrements * increments;
365 else if (pressDuration > _slowToMediumTransition_mS)
368 increments = (pressDuration - _lastPressDuration) / _medium_mS_betweenIncrements;
369 *_variableToIncrement += _mediumIncrement * increments;
370 _lastPressDuration += _medium_mS_betweenIncrements * increments;
375 increments = (pressDuration - _lastPressDuration) / _slow_mS_betweenIncrements;
376 *_variableToIncrement += _slowIncrement * increments;
377 _lastPressDuration += _slow_mS_betweenIncrements * increments;
378 incremented = increments > 0;
382 _debouncedInput.transitions = 0;
389 _lastPressDuration = 0;
390 int presses = _debouncedInput.transitions / 2;
391 *_variableToIncrement += _slowIncrement * presses;
392 _debouncedInput.transitions -= presses * 2;
399 if (*_variableToIncrement <
lowLimit)
414 int32_t* _variableToIncrement;
416 int32_t _slowIncrement;
417 uint32_t _slow_mS_betweenIncrements;
419 uint16_t _slowToMediumTransition_mS;
421 int32_t _mediumIncrement;
422 uint32_t _medium_mS_betweenIncrements;
424 uint16_t _mediumToFastTransistion_mS;
426 int32_t _fastIncrement;
427 uint32_t _fast_mS_betweenIncrements;
429 uint32_t _lastPressDuration;
#define SW_LE16(_a)
Convert a uint16_t to two bytes in little endian format for array initialization.
Class for a Serial Wombat chip. Each Serial Wombat chip on a project should have its own instance.
SerialWombatPin(SerialWombatChip &serialWombatChip)
Instantiates a Serial Wombat Pin.
int16_t initPacketNoResponse(uint8_t packetNumber, uint8_t param0=0x55, uint8_t param1=0x55, uint8_t param2=0x55, uint8_t param3=0x55, uint8_t param4=0x55)
uint8_t pin()
Returns the current SW pin number. Used primarily for virtual calls by derived classes.