digitalWrite(dataB, grp == 0 ? 0 : 1);

digitalWrite(dataB, !!grp);

Sogar das ist unnötig:

void digitalWrite(uint8_t pin, uint8_t val)
{
    ...

	if (val == LOW) {
		*out &= ~bit;
	} else {
		*out |= bit;
	}


  ...
}

Also alles ungleich 0 wird als wahr interpretiert. Damit kann man übergeben was man will