void writeByte(char data) { int parityBit = 1; high(_dataPin);//set pin high high(_clockPin);//set pin high delayMicroseconds(300); low(_clockPin);//set pin low delayMicroseconds(300); low(_dataPin);//set pin low delayMicroseconds(10); // start bit high(_clockPin); waitForClockState(LOW); // data for (int i = 0; i < 8; i++) { int dataBit = bitRead(data, i); writeBit(dataBit); parityBit = parityBit ^ dataBit; } // parity bit writeBit(parityBit); // stop bit high(_dataPin); delayMicroseconds(50); waitForClockState(LOW); // wait for mouse to switch modes while ((digitalRead(_clockPin) == LOW) || (digitalRead(_dataPin) == LOW)) ; // put a hold on the incoming data low(_clockPin); }