This line of code scares my kitty cat
 if (digitalRead(DQ == LOW))
This compares DQ to LOW (7 == 0), which evaluates to false, or 0, then does a digitalRead of pin 0 and asks whether it returned HIGH or not.
I think you meant:
 if (digitalRead(DQ) == LOW)
But hey, maybe it works anyway... ????