-
Notifications
You must be signed in to change notification settings - Fork 1
/
Motor.cpp
66 lines (53 loc) · 1.29 KB
/
Motor.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
#include "Motor.h"
#include <unistd.h>
Motor::Motor(PWM* pwm, PWM::Polarity polarity, uint32 periodNs,
uint32 stopDutyNs, uint32 minDutyNs, uint32 maxDutyNs)
{
this->pwm = pwm;
pwm->setPolarity(polarity);
pwm->setPeriodNs(periodNs);
pwm->setDutyNs(stopDutyNs);
setStopDuty(stopDutyNs);
setMinMaxDuty(minDutyNs, maxDutyNs);
}
Motor::~Motor() {
pwm->setDutyNs(stopDutyNs);
//usleep(10000);
//pwm->disable();
}
// Device
void Motor::setEnabled(bool value) {
pwm->setEnabled(value);
}
bool Motor::isEnabled() {
return pwm->isEnabled();
}
void Motor::setMinMaxDuty(uint32 minDutyNs, uint32 maxDutyNs) {
this->minDutyNs = minDutyNs;
this->maxDutyNs = maxDutyNs;
}
void Motor::setStopDuty(uint32 stopDutyNs) {
this->stopDutyNs = stopDutyNs;
}
void Motor::setPercent(double value) {
uint32 dutyNs = minDutyNs + value * (maxDutyNs - minDutyNs) / 100.0;
if (dutyNs < minDutyNs)
dutyNs = minDutyNs;
if (dutyNs > maxDutyNs)
dutyNs = maxDutyNs;
pwm->setDutyNs(dutyNs);
}
double Motor::getPercent() {
return (pwm->getDutyNs() - minDutyNs) * 100.0 / (maxDutyNs - minDutyNs);
}
void Motor::start() {
if (pwm->getDutyNs() < minDutyNs) {
pwm->setDutyNs(minDutyNs);
}
}
void Motor::stop() {
pwm->setDutyNs(stopDutyNs);
}
bool Motor::isRunning() {
return pwm->getDutyNs() > stopDutyNs;
}