70 lines
1.4 KiB
C
Raw Normal View History

2022-08-29 15:17:44 +02:00
#pragma once
//
// FILE: I2C_SCANNER.h
// AUTHOR: Rob Tillaart
2023-08-24 21:35:58 +02:00
// VERSION: 0.2.0
2022-08-29 15:17:44 +02:00
// DATE: 2022-08-29
// PURPOSE: I2C scanner class
2023-01-30 14:32:38 +01:00
2022-08-29 15:17:44 +02:00
#include "Arduino.h"
#include "Wire.h"
2023-08-24 21:35:58 +02:00
#define I2C_SCANNER_LIB_VERSION (F("0.2.0"))
2022-08-29 15:17:44 +02:00
class I2C_SCANNER
{
2022-08-30 12:39:55 +02:00
public:
2023-08-24 21:35:58 +02:00
2022-08-29 15:17:44 +02:00
I2C_SCANNER(TwoWire *wire = &Wire);
2022-08-30 12:39:55 +02:00
// CONFIGURATION
bool begin();
2022-08-29 15:17:44 +02:00
#if defined (ESP8266) || defined(ESP32)
2022-08-30 12:39:55 +02:00
bool begin(int sda, int scl);
2022-08-29 15:17:44 +02:00
#endif
2022-08-30 12:39:55 +02:00
// I2C PORT
uint8_t getWirePortCount();
2023-08-24 21:35:58 +02:00
// 0 == Wire, 1 = Wire1 ... 5 = Wire5 (if supported)
// to be used for iteration over the I2C interfaces.
2022-08-30 12:39:55 +02:00
bool setWire(uint8_t n = 0);
2023-08-24 21:35:58 +02:00
bool setWire(TwoWire *wire = &Wire);
2022-08-30 12:39:55 +02:00
TwoWire* getWire();
2022-08-29 15:17:44 +02:00
2022-08-31 11:08:07 +02:00
// valid methods 0 and 1.
int softwareReset(uint8_t method = 0);
2022-08-29 15:17:44 +02:00
2022-08-30 12:39:55 +02:00
// TIMING
bool setClock(uint32_t clockFrequency = 100000UL);
#if defined(ESP32)
uint32_t getClock();
#endif
2022-08-29 15:17:44 +02:00
2022-08-30 12:39:55 +02:00
// SCANNING FUNCTIONS
2023-08-24 21:35:58 +02:00
uint16_t ping(uint8_t address, uint16_t count = 1);
2022-08-30 12:39:55 +02:00
int diag(uint8_t address);
int32_t pingTime(uint8_t address);
uint8_t count(uint8_t start = 0, uint8_t end = 127);
2022-08-29 15:17:44 +02:00
2023-08-24 21:35:58 +02:00
// EXPERIMENTAL.
2023-01-30 14:32:38 +01:00
// not all platforms support this function.
// patch .cpp file to get this working for your platform.
bool setWireTimeout(uint32_t timeOut);
uint32_t getWireTimeout();
2023-08-24 21:35:58 +02:00
2022-08-30 12:39:55 +02:00
private:
int _init();
int _wirePortCount;
TwoWire* _wire;
2023-08-24 21:35:58 +02:00
2023-01-30 14:32:38 +01:00
uint32_t _timeout = 0;
2022-08-29 15:17:44 +02:00
};
2023-08-24 21:35:58 +02:00
// -- END OF FILE --
2022-08-29 15:17:44 +02:00