#ifndef SOFTI2C_H #define SOFTI2C_H #include class SoftI2C { private: uint8_t sda_pin; uint8_t scl_pin; uint32_t delay_us; void sda_low() { digitalWrite(sda_pin, LOW); } void sda_high() { digitalWrite(sda_pin, HIGH); } void scl_low() { digitalWrite(scl_pin, LOW); } void scl_high() { digitalWrite(scl_pin, HIGH); } bool read_sda() { return digitalRead(sda_pin); } void i2c_delay() { delayMicroseconds(delay_us); } void start_condition(); void stop_condition(); bool write_byte(uint8_t data); uint8_t read_byte(bool ack); bool send_ack(); void send_nack(); public: SoftI2C(uint8_t sda, uint8_t scl, uint32_t freq = 100000); void begin(); void end(); bool begin_transmission(uint8_t addr); bool write(uint8_t data); bool end_transmission(); uint8_t request_from(uint8_t addr, uint8_t count); uint8_t read(); bool available(); }; #endif