25 #ifndef ACE_WIRE_SIMPLE_WIRE_FAST_INTERFACE_H
26 #define ACE_WIRE_SIMPLE_WIRE_FAST_INTERFACE_H
50 uint8_t T_DELAY_MICROS
67 digitalWriteFast(T_CLOCK_PIN, LOW);
68 digitalWriteFast(T_DATA_PIN, LOW);
95 uint8_t effectiveAddr = (addr << 1) | 0x00;
96 uint8_t res =
write(effectiveAddr);
111 for (uint8_t i = 0; i < 8; ++i) {
127 uint8_t ack = readAck();
154 uint8_t
requestFrom(uint8_t addr, uint8_t quantity,
bool sendStop =
true) {
155 mQuantity = quantity;
156 mSendStop = sendStop;
165 uint8_t effectiveAddr = (addr << 1) | 0x01;
166 uint8_t ack =
write(effectiveAddr);
168 return (ack == 1) ? quantity : 0;
186 if (! mQuantity)
return 0xff;
191 for (uint8_t i = 0; i < 8; ++i) {
194 uint8_t bit = digitalReadFast(T_DATA_PIN);
225 static uint8_t readAck() {
233 uint8_t ack = digitalReadFast(T_DATA_PIN);
241 static void sendAck() {
248 static void sendNack() {
254 static void bitDelay() { delayMicroseconds(T_DELAY_MICROS); }
256 static void clockHigh() { pinModeFast(T_CLOCK_PIN, INPUT); bitDelay(); }
258 static void clockLow() { pinModeFast(T_CLOCK_PIN, OUTPUT); bitDelay(); }
260 static void dataHigh() { pinModeFast(T_DATA_PIN, INPUT); bitDelay(); }
262 static void dataLow() { pinModeFast(T_DATA_PIN, OUTPUT); bitDelay(); }