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;
}
Beispiel #3
0
/**********************************************************************
 * @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));
}
Beispiel #4
0
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();
}