value_t Device::getValue(){ if(sensor){ return currentValue; // return last filtered value... (see: hasChanged) }else{ if(type == Device::DIGITAL){ uint8_t value = _digitalRead(pin); if(inverted) value = ! value; return value; }else if(type == Device::BOARD){ return 0; }else{ return _analogRead(pin); } } }
// FOR SENSOR device... bool Device::hasChanged(){ value_t v = 0; if(type == Device::DIGITAL){ v = _digitalRead(pin); // READ and Invert state because (sensor) is a INPUT_PULLUP if(inverted) v = !v; }else{ v = _analogRead(pin); //if(currentValue != v){ // call analog filter... //} } // check if has changed if(currentValue != v){ currentValue = v; return true; } return false; }
/********************************************************************** * @brief read logic level on input pin * * @param PIN selected pin (see pin mapping above) * @return uint8_t logic level **********************************************************************/ uint8_t digitalRead(uint8_t PIN) { return (uint8_t) _digitalRead(getGPIOPortPointer(PIN),digitalPinToGPIOPin(PIN)); }
int Digital::digitalRead(){ if(_digitalMode==DIGITAL_MODE_NULL) return 0; if(_digitalMode==DIGITAL_MODE_IN||_digitalMode==DIGITAL_MODE_PULLUP||_digitalMode==DIGITAL_MODE_PULLDOWN)return _digitalRead(); else return _digitalWrite(); }