|
|
|
|
|
|
|
/*!
|
|
|
|
* @file DFRobot_AS3935_I2C.h
|
|
|
|
* @brief This is a library for AS3935_I2C from DFRobot
|
|
|
|
* @copyright Copyright (c) 2010 DFRobot Co.Ltd (http://www.dfrobot.com)
|
|
|
|
* @license The MIT License (MIT)
|
|
|
|
* @author [TangJie](jie.tang@dfrobot.com)
|
|
|
|
* @version V1.0.2
|
|
|
|
* @date 2019-09-28
|
|
|
|
* @url https://github.com/DFRobor/DFRobot_AS3935
|
|
|
|
*/
|
|
|
|
|
|
|
|
#ifndef DFRobot_AS3935_I2C_h
|
|
|
|
#define DFRobot_AS3935_I2C_h
|
|
|
|
|
|
|
|
#include "Arduino.h"
|
|
|
|
#include "stdlib.h"
|
|
|
|
|
|
|
|
#include "Wire.h"
|
|
|
|
|
|
|
|
// I2C address
|
|
|
|
#define AS3935_ADD1 0x01 ///< A0=high, A1=low
|
|
|
|
#define AS3935_ADD3 0x03 ///< A0=high, A1=high
|
|
|
|
#define AS3935_ADD2 0x02 ///< A0=low, A1=high
|
|
|
|
|
|
|
|
//#define ENABLE_DBG
|
|
|
|
#ifdef ENABLE_DBG
|
|
|
|
#define DBG(...){Serial.print("[");Serial.print(__FUNCTION__);\
|
|
|
|
Serial.print("():");Serial.print(__LINE__);\
|
|
|
|
Serial.print("]");Serial.print(__VA_ARGS__); Serial.println("");}
|
|
|
|
#else
|
|
|
|
#define DBG(...)
|
|
|
|
#endif
|
|
|
|
|
|
|
|
class DFRobot_AS3935_I2C{
|
|
|
|
public:
|
|
|
|
/**
|
|
|
|
* @fn DFRobot_AS3935_I2C
|
|
|
|
* @brief AS3935 object
|
|
|
|
* @param irqx irq pin
|
|
|
|
* @param devAddx i2c address
|
|
|
|
* @return None
|
|
|
|
*/
|
|
|
|
DFRobot_AS3935_I2C(uint8_t irqx, uint8_t devAddx);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @fn DFRobot_AS3935_I2C
|
|
|
|
* @brief AS3935 object
|
|
|
|
* @param irqx irq pin
|
|
|
|
* @return None
|
|
|
|
*/
|
|
|
|
DFRobot_AS3935_I2C(uint8_t irqx);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @fn begin
|
|
|
|
* @brief I2C init
|
|
|
|
* @return uint8_t type, indicates the initialization status
|
|
|
|
* @retval 0 succeed
|
|
|
|
* @retval 1 failure
|
|
|
|
*/
|
|
|
|
uint8_t begin(void);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @fn setI2CAddress
|
|
|
|
* @brief set i2c address
|
|
|
|
* @param devAddx i2c address
|
|
|
|
* @return None
|
|
|
|
*/
|
|
|
|
void setI2CAddress(uint8_t devAddx);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @fn manualCal
|
|
|
|
* @brief manual calibration
|
|
|
|
* @param capacitance capacitance
|
|
|
|
* @param location location
|
|
|
|
* @param disturber disturber
|
|
|
|
* @return None
|
|
|
|
*/
|
|
|
|
void manualCal(uint8_t capacitance, uint8_t location, uint8_t disturber);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @fn defInit
|
|
|
|
* @brief reset registers to default
|
|
|
|
* @return int type,represents rest state
|
|
|
|
* @retval 0 success
|
|
|
|
*/
|
|
|
|
int defInit(void);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @fn disturberEn
|
|
|
|
* @brief Disturber detection enabled
|
|
|
|
* @return None
|
|
|
|
*/
|
|
|
|
void disturberEn(void);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @fn disturberDis
|
|
|
|
* @brief Disturber detection disenabled
|
|
|
|
* @return None
|
|
|
|
*/
|
|
|
|
void disturberDis(void);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @fn setIRQOutputSource
|
|
|
|
* @brief Set interrupt source
|
|
|
|
* @param irqSelect 0 = NONE, 1 = TRCO, 2 = SRCO, 3 = LCO
|
|
|
|
* @return None
|
|
|
|
*/
|
|
|
|
void setIRQOutputSource(uint8_t irqSelect);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @fn setTuningCaps
|
|
|
|
* @brief set capacitance
|
|
|
|
* @param capVal size
|
|
|
|
* @return None
|
|
|
|
*/
|
|
|
|
void setTuningCaps(uint8_t capVal);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @fn getInterruptSrc
|
|
|
|
* @brief get interrupt source
|
|
|
|
* @return uint8_t type,returns the interrupt source type
|
|
|
|
* @retval 0 interrupt result not expected
|
|
|
|
* @retval 1 lightning caused interrupt
|
|
|
|
* @retval 2 disturber detected
|
|
|
|
* @retval 3 Noise level too high
|
|
|
|
*/
|
|
|
|
uint8_t getInterruptSrc(void);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @fn getLightningDistKm
|
|
|
|
* @brief get lightning distance
|
|
|
|
* @return unit kilometer
|
|
|
|
*/
|
|
|
|
uint8_t getLightningDistKm(void);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @fn getStrikeEnergyRaw
|
|
|
|
* @brief get lightning energy intensity
|
|
|
|
* @return lightning energy intensity(0-1000)
|
|
|
|
*/
|
|
|
|
uint32_t getStrikeEnergyRaw(void);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @fn setIndoors
|
|
|
|
* @brief Set to the indoor model
|
|
|
|
* @return None
|
|
|
|
*/
|
|
|
|
void setIndoors(void);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @fn setOutdoors
|
|
|
|
* @brief Set to the outdoor model
|
|
|
|
* @return None
|
|
|
|
*/
|
|
|
|
void setOutdoors(void);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @fn setOutdoors
|
|
|
|
* @brief Get the noise level
|
|
|
|
* @return Return noise level
|
|
|
|
*/
|
|
|
|
uint8_t getNoiseFloorLvl(void);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @fn setNoiseFloorLvl
|
|
|
|
* @brief Set the noise level
|
|
|
|
* @param 0~7,More than 7 will use the default value:2
|
|
|
|
* @return None
|
|
|
|
*/
|
|
|
|
void setNoiseFloorLvl(uint8_t nfSel);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @fn getWatchdogThreshold
|
|
|
|
* @brief read WDTH
|
|
|
|
* @return Return interference level
|
|
|
|
*/
|
|
|
|
uint8_t getWatchdogThreshold(void);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @fn setWatchdogThreshold
|
|
|
|
* @brief Set an anti-interference rating
|
|
|
|
* @param 0~7,More than 7 will use the default value:2
|
|
|
|
* @return None
|
|
|
|
*/
|
|
|
|
void setWatchdogThreshold(uint8_t wdth);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @fn getSpikeRejection
|
|
|
|
* @brief read SREJ (spike rejection)
|
|
|
|
* @return Return SREJ value
|
|
|
|
*/
|
|
|
|
uint8_t getSpikeRejection(void);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @fn setSpikeRejection
|
|
|
|
* @brief Modify SREJ (spike rejection)
|
|
|
|
* @param 0~7,More than 7 will use the default value:2
|
|
|
|
* @return None
|
|
|
|
*/
|
|
|
|
void setSpikeRejection(uint8_t srej);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @fn setLcoFdiv
|
|
|
|
* @brief Sets LCO_FDIV register
|
|
|
|
* @param fdiv Set 0, 1, 2 or 3 for ratios of 16, 32, 64 and 128, respectively
|
|
|
|
* @return None
|
|
|
|
*/
|
|
|
|
void setLcoFdiv(uint8_t fdiv);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @fn printAllRegs
|
|
|
|
* @brief view register data
|
|
|
|
* @return None
|
|
|
|
*/
|
|
|
|
void printAllRegs(void);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @fn powerUp
|
|
|
|
* @brief Configure sensor
|
|
|
|
* @return None
|
|
|
|
*/
|
|
|
|
void powerUp(void);
|
|
|
|
|
|
|
|
private:
|
|
|
|
uint8_t irq, devAdd;
|
|
|
|
uint8_t singRegRead(uint8_t regAdd);
|
|
|
|
void singRegWrite(uint8_t regAdd, uint8_t dataMask, uint8_t regData);
|
|
|
|
int reset(void);
|
|
|
|
void powerDown(void);
|
|
|
|
void calRCO(void);
|
|
|
|
void clearStatistics(void);
|
|
|
|
uint8_t setMinStrikes(uint8_t minStrk);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @fn writeReg
|
|
|
|
* @brief Write register value through IIC bus
|
|
|
|
* @param reg Register address 8bits
|
|
|
|
* @param pBuf Storage cache to write data in
|
|
|
|
* @param size The length of data to be written
|
|
|
|
*/
|
|
|
|
void writeReg(uint8_t reg, void *pBuf, size_t size);
|
|
|
|
//void writeRegNoStop(uint8_t reg, void *pBuf, size_t size)
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @fn readReg
|
|
|
|
* @brief Read register value through IIC bus
|
|
|
|
* @param reg Register address 8bits
|
|
|
|
* @param pBuf Read data storage cache
|
|
|
|
* @param size Read the length of data
|
|
|
|
* @return Return the read length
|
|
|
|
*/
|
|
|
|
size_t readReg(uint8_t reg, void *pBuf, size_t size);
|
|
|
|
};
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|