farlepet:
int AM9111::_read()
{
digitalWrite(_odp,0);
digitalWrite(_wep,1);
int rv = 0;
bitWrite(_rbits,0,digitalRead(_IO[0]));
bitWrite(_rbits,1,digitalRead(_IO[1]));
bitWrite(_rbits,2,digitalRead(_IO[2]));
bitWrite(_rbits,3,digitalRead(_IO[3]));
_read() = _rbits;
return rv;
}
I still don't totally get this. Are you trying to change _rbits? In which case why return anything from the function? In that case you want:
void AM9111::_read()
{
digitalWrite(_odp,0);
digitalWrite(_wep,1);
_rbits = 0;
bitWrite(_rbits,0,digitalRead(_IO[0]));
bitWrite(_rbits,1,digitalRead(_IO[1]));
bitWrite(_rbits,2,digitalRead(_IO[2]));
bitWrite(_rbits,3,digitalRead(_IO[3]));
}
But if you want to return stuff, and not affect things such as _rbits (have side-effects) then you actually want:
int AM9111::_read()
{
digitalWrite(_odp,0);
digitalWrite(_wep,1);
int rv = 0;
bitWrite(rv,0,digitalRead(_IO[0]));
bitWrite(rv,1,digitalRead(_IO[1]));
bitWrite(rv,2,digitalRead(_IO[2]));
bitWrite(rv,3,digitalRead(_IO[3]));
return rv;
}