SimpleFOClibrary
2.4.0
Loading...
Searching...
No Matches
MagneticSensorI2C.h
Go to the documentation of this file.
1
#ifndef MAGNETICSENSORI2C_LIB_H
2
#define MAGNETICSENSORI2C_LIB_H
3
4
#include "Arduino.h"
5
#include <Wire.h>
6
#include "../common/base_classes/Sensor.h"
7
#include "../common/foc_utils.h"
8
#include "../common/time_utils.h"
9
10
struct
MagneticSensorI2CConfig_s
{
11
uint8_t
chip_address
;
12
uint8_t
bit_resolution
;
13
uint8_t
angle_register
;
14
uint8_t
msb_mask
;
15
uint8_t
msb_shift
;
16
uint8_t
lsb_mask
;
17
uint8_t
lsb_shift
;
18
};
19
20
// some predefined structures
21
extern
MagneticSensorI2CConfig_s
AS5600_I2C
,
AS5048_I2C
,
MT6701_I2C
;
22
23
#if defined(TARGET_RP2040)
24
#define SDA I2C_SDA
25
#define SCL I2C_SCL
26
#endif
27
28
29
class
MagneticSensorI2C
:
public
Sensor
{
30
public
:
31
/**
32
* MagneticSensorI2C class constructor
33
* @param chip_address I2C chip address
34
* @param bits number of bits of the sensor resolution
35
* @param angle_register_msb angle read register msb
36
* @param _bits_used_msb number of used bits in msb
37
*/
38
MagneticSensorI2C
(uint8_t _chip_address,
int
_bit_resolution, uint8_t _angle_register_msb,
int
_msb_bits_used,
bool
lsb_right_aligned =
true
);
39
40
/**
41
* MagneticSensorI2C class constructor
42
* @param config I2C config
43
*/
44
MagneticSensorI2C
(
MagneticSensorI2CConfig_s
config);
45
46
static
MagneticSensorI2C
AS5600
();
47
48
/** sensor initialise pins */
49
void
init
(TwoWire* _wire = &Wire);
50
51
// implementation of abstract functions of the Sensor class
52
/** get current angle (rad) */
53
float
getSensorAngle
()
override
;
54
55
/** experimental function to check and fix SDA locked LOW issues */
56
int
checkBus
(
byte
sda_pin ,
byte
scl_pin );
57
58
/** current error code from Wire endTransmission() call **/
59
uint8_t
currWireError
= 0;
60
61
private
:
62
float
cpr;
//!< Maximum range of the magnetic sensor
63
MagneticSensorI2CConfig_s
_conf;
64
65
// I2C functions
66
/** Read one I2C register value */
67
int
read(uint8_t angle_register_msb);
68
69
/**
70
* Function getting current angle register value
71
* it uses angle_register variable
72
*/
73
int
getRawCount();
74
75
/* the two wire instance for this sensor */
76
TwoWire* wire;
77
};
78
79
80
#endif
AS5048_I2C
MagneticSensorI2CConfig_s AS5048_I2C
Definition
MagneticSensorI2C.h:21
MT6701_I2C
MagneticSensorI2CConfig_s MT6701_I2C
Definition
MagneticSensorI2C.h:21
AS5600_I2C
MagneticSensorI2CConfig_s AS5600_I2C
Definition
MagneticSensorI2C.cpp:4
MagneticSensorI2C
Definition
MagneticSensorI2C.h:29
MagneticSensorI2C::getSensorAngle
float getSensorAngle() override
Definition
MagneticSensorI2C.cpp:87
MagneticSensorI2C::AS5600
static MagneticSensorI2C AS5600()
Definition
MagneticSensorI2C.cpp:71
MagneticSensorI2C::currWireError
uint8_t currWireError
Definition
MagneticSensorI2C.h:59
MagneticSensorI2C::checkBus
int checkBus(byte sda_pin, byte scl_pin)
Definition
MagneticSensorI2C.cpp:123
Sensor
Definition
Sensor.h:44
Sensor::init
virtual void init()
Definition
Sensor.cpp:59
MagneticSensorI2CConfig_s
Definition
MagneticSensorI2C.h:10
MagneticSensorI2CConfig_s::angle_register
uint8_t angle_register
Definition
MagneticSensorI2C.h:13
MagneticSensorI2CConfig_s::lsb_mask
uint8_t lsb_mask
Definition
MagneticSensorI2C.h:16
MagneticSensorI2CConfig_s::chip_address
uint8_t chip_address
Definition
MagneticSensorI2C.h:11
MagneticSensorI2CConfig_s::lsb_shift
uint8_t lsb_shift
Definition
MagneticSensorI2C.h:17
MagneticSensorI2CConfig_s::bit_resolution
uint8_t bit_resolution
Definition
MagneticSensorI2C.h:12
MagneticSensorI2CConfig_s::msb_mask
uint8_t msb_mask
Definition
MagneticSensorI2C.h:14
MagneticSensorI2CConfig_s::msb_shift
uint8_t msb_shift
Definition
MagneticSensorI2C.h:15
src
sensors
MagneticSensorI2C.h
Generated by
1.9.8