Skip to content

Commit 5f30b6c

Browse files
author
Marcus Sonestedt
committed
TestServoPID: Add missing mock implementation
1 parent 2824c55 commit 5f30b6c

File tree

2 files changed

+80
-0
lines changed

2 files changed

+80
-0
lines changed
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
#include "pch.h"
2+
3+
#include "AdafruitPwmServoDriverMock.h"
4+
5+
Adafruit_PWMServoDriver::~Adafruit_PWMServoDriver() = default;
6+
7+
void Adafruit_PWMServoDriver::setPin(uint8_t num, uint16_t val, bool invert) {
8+
// Clamp value between 0 and 4095 inclusive.
9+
val = std::min(val, (uint16_t)4095);
10+
if (invert) {
11+
if (val == 0) {
12+
// Special value for signal fully on.
13+
setPWM(num, 4096, 0);
14+
} else if (val == 4095) {
15+
// Special value for signal fully off.
16+
setPWM(num, 0, 4096);
17+
} else {
18+
setPWM(num, 0, 4095 - val);
19+
}
20+
} else {
21+
if (val == 4095) {
22+
// Special value for signal fully on.
23+
setPWM(num, 4096, 0);
24+
} else if (val == 0) {
25+
// Special value for signal fully off.
26+
setPWM(num, 0, 4096);
27+
} else {
28+
setPWM(num, 0, val);
29+
}
30+
}
31+
}
32+
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
#pragma once
2+
3+
#define PCA9685_SUBADR1 0x2 /**< i2c bus address 1 */
4+
#define PCA9685_SUBADR2 0x3 /**< i2c bus address 2 */
5+
#define PCA9685_SUBADR3 0x4 /**< i2c bus address 3 */
6+
7+
#define PCA9685_MODE1 0x0 /**< Mode Register 1 */
8+
#define PCA9685_MODE2 0x1 /**< Mode Register 2 */
9+
#define PCA9685_PRESCALE 0xFE /**< Prescaler for PWM output frequency */
10+
11+
#define LED0_ON_L 0x6 /**< LED0 output and brightness control byte 0 */
12+
#define LED0_ON_H 0x7 /**< LED0 output and brightness control byte 1 */
13+
#define LED0_OFF_L 0x8 /**< LED0 output and brightness control byte 2 */
14+
#define LED0_OFF_H 0x9 /**< LED0 output and brightness control byte 3 */
15+
16+
#define ALLLED_ON_L 0xFA /**< load all the LEDn_ON registers, byte 0 */
17+
#define ALLLED_ON_H 0xFB /**< load all the LEDn_ON registers, byte 1 */
18+
#define ALLLED_OFF_L 0xFC /**< load all the LEDn_OFF registers, byte 0 */
19+
#define ALLLED_OFF_H 0xFD /**< load all the LEDn_OFF registers, byte 1 */
20+
21+
class Adafruit_PWMServoDriver {
22+
public:
23+
Adafruit_PWMServoDriver(uint8_t addr = 0x40, void *I2C = nullptr) : _i2caddr(addr), _i2c(I2C) {}
24+
~Adafruit_PWMServoDriver();
25+
26+
27+
28+
void begin(uint8_t prescale = 0) {}
29+
void reset() {}
30+
void sleep() {}
31+
void wakeup() {}
32+
void setExtClk(uint8_t prescale) {}
33+
void setPWMFreq(float freq) { _freq = freq; }
34+
void setOutputMode(bool totempole) { _outputMode = totempole; }
35+
uint8_t getPWM(uint8_t num) { return (_pwmOff[num] - _pwmOn[num]) / (4096/256); }
36+
void setPWM(uint8_t num, uint16_t on, uint16_t off) { _pwmOn[num] = on; _pwmOff[num] = off; }
37+
void setPin(uint8_t num, uint16_t val, bool invert=false);
38+
39+
public:
40+
std::array<uint16_t, 16> _pwmOn;
41+
std::array<uint16_t, 16> _pwmOff;
42+
float _freq;
43+
bool _outputMode;
44+
45+
private:
46+
void *_i2c;
47+
uint8_t _i2caddr;
48+
};

0 commit comments

Comments
 (0)