separation of concerns
This commit is contained in:
@ -14,7 +14,6 @@
|
|||||||
volatile uint32_t tickCnt = 0;
|
volatile uint32_t tickCnt = 0;
|
||||||
const uint16_t DIVIDER = 2;
|
const uint16_t DIVIDER = 2;
|
||||||
const uint16_t TICK = 1024;
|
const uint16_t TICK = 1024;
|
||||||
uint16_t pwmVal = 512;
|
|
||||||
|
|
||||||
// unit: 100us
|
// unit: 100us
|
||||||
const uint32_t STEP_100ms = 1000;
|
const uint32_t STEP_100ms = 1000;
|
||||||
@ -72,43 +71,67 @@ void engineInit() {
|
|||||||
P1DIR |= BIT6;
|
P1DIR |= BIT6;
|
||||||
P1OUT &= ~BIT6;
|
P1OUT &= ~BIT6;
|
||||||
P1SEL |= BIT6;
|
P1SEL |= BIT6;
|
||||||
//
|
|
||||||
TACCR0 = TICK;
|
TACCR0 = TICK;
|
||||||
TACCR1 = 0;
|
TACCR1 = 0;
|
||||||
//
|
|
||||||
TACCTL0 = CCIE;
|
TACCTL0 = CCIE;
|
||||||
TACCTL1 = OUTMOD_7;
|
TACCTL1 = OUTMOD_7;
|
||||||
//TACTL = MC_1 | ID_0 | TASSEL_2 | TACLR | TAIE;
|
|
||||||
TACTL = MC_1 | ID_0 | TASSEL_2 | TACLR;
|
TACTL = MC_1 | ID_0 | TASSEL_2 | TACLR;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
uint16_t engineMaxPwmValue() {
|
uint16_t pwmVal = 0;
|
||||||
return TICK;
|
uint16_t pwmValStep = TICK / 8;
|
||||||
|
|
||||||
|
bool engineIncPwnValue() {
|
||||||
|
bool res = false;
|
||||||
|
pwmVal += pwmValStep;
|
||||||
|
if (pwmVal > TICK) {
|
||||||
|
pwmVal = TICK;
|
||||||
|
res = true;
|
||||||
|
}
|
||||||
|
TACCR1 = pwmVal;
|
||||||
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
void engineSetPwmValue(uint16_t val) {
|
bool engineDecPwmValue() {
|
||||||
TACCR1 = val;
|
bool res = false;
|
||||||
|
if (pwmVal < pwmValStep) {
|
||||||
|
pwmVal = 0;
|
||||||
|
res = true;
|
||||||
|
} else {
|
||||||
|
pwmVal -= pwmValStep;
|
||||||
|
}
|
||||||
|
TACCR1 = pwmVal;
|
||||||
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
void engineIncOffTime() {
|
bool engineIncOffTime() {
|
||||||
offTime += STEP_100ms;
|
offTime += STEP_100ms;
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
void engineIncOnTime() {
|
bool engineIncOnTime() {
|
||||||
|
return false;
|
||||||
onTime += STEP_100ms;
|
onTime += STEP_100ms;
|
||||||
}
|
}
|
||||||
|
|
||||||
void engineDecOffTime() {
|
void engineDecOffTime() {
|
||||||
|
bool res = false;
|
||||||
if (offTime != 0) {
|
if (offTime != 0) {
|
||||||
offTime -= STEP_100ms;
|
offTime -= STEP_100ms;
|
||||||
|
res = true;
|
||||||
}
|
}
|
||||||
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
void engineDecOnTime() {
|
void engineDecOnTime() {
|
||||||
|
bool res = false;
|
||||||
if (onTime != 0) {
|
if (onTime != 0) {
|
||||||
onTime -= STEP_100ms;
|
onTime -= STEP_100ms;
|
||||||
|
res = true;
|
||||||
}
|
}
|
||||||
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint32_t getMillis() {
|
uint32_t getMillis() {
|
||||||
|
12
src/engine.h
12
src/engine.h
@ -11,12 +11,12 @@
|
|||||||
|
|
||||||
|
|
||||||
void engineInit();
|
void engineInit();
|
||||||
uint16_t engineMaxPwmValue();
|
bool engineIncOffTime();
|
||||||
void engineSetPwmValue(uint16_t val);
|
bool engineIncOnTime();
|
||||||
void engineIncOffTime();
|
bool engineDecOffTime();
|
||||||
void engineIncOnTime();
|
bool engineDecOnTime();
|
||||||
void engineDecOffTime();
|
bool engineDecPwmValue();
|
||||||
void engineDecOnTime();
|
bool engineIncPwmValue();
|
||||||
uint32_t getMillis();
|
uint32_t getMillis();
|
||||||
|
|
||||||
|
|
||||||
|
53
src/hmi.cpp
53
src/hmi.cpp
@ -6,9 +6,6 @@
|
|||||||
#include "debug.h"
|
#include "debug.h"
|
||||||
|
|
||||||
|
|
||||||
const uint32_t LOWER_SHORT_TIME = 100;
|
|
||||||
const uint32_t UPPER_SHORT_TIME = 300;
|
|
||||||
const uint32_t LED_WAIT_TIME = 500;
|
|
||||||
|
|
||||||
class SwitchPort {
|
class SwitchPort {
|
||||||
public:
|
public:
|
||||||
@ -69,6 +66,8 @@ public:
|
|||||||
return result;
|
return result;
|
||||||
};
|
};
|
||||||
private:
|
private:
|
||||||
|
static const uint32_t LOWER_SHORT_TIME = 100;
|
||||||
|
static const uint32_t UPPER_SHORT_TIME = 300;
|
||||||
enum e_state { STATE_IDLE, STATE_BUTTON_PRESSED, STATE_BUTTON_RELEASED, STATE_SHORT, STATE_LONG };
|
enum e_state { STATE_IDLE, STATE_BUTTON_PRESSED, STATE_BUTTON_RELEASED, STATE_SHORT, STATE_LONG };
|
||||||
e_state m_state;
|
e_state m_state;
|
||||||
uint32_t m_timestamp;
|
uint32_t m_timestamp;
|
||||||
@ -146,6 +145,8 @@ public:
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
private:
|
private:
|
||||||
|
static const uint32_t LED_WAIT_TIME_SHORT = 500;
|
||||||
|
static const uint32_t LED_WAIT_TIME_LONG = 1000;
|
||||||
enum e_state { STATE_IDLE, STATE_START, STATE_ON, STATE_OFF };
|
enum e_state { STATE_IDLE, STATE_START, STATE_ON, STATE_OFF };
|
||||||
e_state m_state;
|
e_state m_state;
|
||||||
uint32_t m_timeout;
|
uint32_t m_timeout;
|
||||||
@ -194,50 +195,52 @@ SwitchPort2 offTimeSwitch = SwitchPort2(BIT3);
|
|||||||
Led1 ledGreen = Led1(BIT5);
|
Led1 ledGreen = Led1(BIT5);
|
||||||
Led1 ledRed = Led1(BIT4);
|
Led1 ledRed = Led1(BIT4);
|
||||||
|
|
||||||
uint16_t intensity = 0;
|
|
||||||
uint16_t maxIntensity = 0;
|
|
||||||
uint16_t intensityStep = 0;
|
|
||||||
const uint16_t intensityStepCnt = 16;
|
|
||||||
|
|
||||||
|
|
||||||
void hmiInit() {
|
void hmiInit() {
|
||||||
maxIntensity = engineMaxPwmValue();
|
|
||||||
intensityStep = maxIntensity / intensityStepCnt;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void hmiExec() {
|
void hmiExec() {
|
||||||
if (intensitySwitch.get() == SwitchPort::SWITCH_SHORT) {
|
if (intensitySwitch.get() == SwitchPort::SWITCH_SHORT) {
|
||||||
intensity += intensityStep;
|
if (engineIncPwmValue()) {
|
||||||
if (intensity > maxIntensity) {
|
|
||||||
intensity = maxIntensity;
|
|
||||||
}
|
|
||||||
ledGreen.start(Led::FLASH_SHORT);
|
ledGreen.start(Led::FLASH_SHORT);
|
||||||
debugWrite(intensity);
|
} else {
|
||||||
engineSetPwmValue(intensity);
|
ledGreen.start(Led::FLASH_LONG);
|
||||||
} else if (intensitySwitch.get() == SwitchPort::SWITCH_LONG) {
|
|
||||||
if (intensity != 0) {
|
|
||||||
intensity -= intensityStep;
|
|
||||||
}
|
}
|
||||||
|
} else if (intensitySwitch.get() == SwitchPort::SWITCH_LONG) {
|
||||||
|
if (engineDecPwmValue()) {
|
||||||
ledRed.start(Led::FLASH_SHORT);
|
ledRed.start(Led::FLASH_SHORT);
|
||||||
debugWrite(intensity);
|
} else {
|
||||||
engineSetPwmValue(intensity);
|
ledRed.start(Led::FLASH_LONG);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
if (onTimeSwitch.get() == SwitchPort::SWITCH_SHORT) {
|
if (onTimeSwitch.get() == SwitchPort::SWITCH_SHORT) {
|
||||||
engineIncOnTime();
|
if (engineIncOnTime()) {
|
||||||
ledGreen.start(Led::FLASH_SHORT);
|
ledGreen.start(Led::FLASH_SHORT);
|
||||||
|
} else {
|
||||||
|
ledGreen.start(Led::FLASH_LONG);
|
||||||
|
}
|
||||||
} else if (onTimeSwitch.get() == SwitchPort::SWITCH_LONG) {
|
} else if (onTimeSwitch.get() == SwitchPort::SWITCH_LONG) {
|
||||||
engineDecOnTime();
|
if (engineDecOnTime()) {
|
||||||
ledRed.start(Led::FLASH_SHORT);
|
ledRed.start(Led::FLASH_SHORT);
|
||||||
|
} else {
|
||||||
|
ledRed.start(Led::FLASH_LONG);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (offTimeSwitch.get() == SwitchPort::SWITCH_SHORT) {
|
if (offTimeSwitch.get() == SwitchPort::SWITCH_SHORT) {
|
||||||
engineIncOffTime();
|
if (engineIncOffTime()) {
|
||||||
ledGreen.start(Led::FLASH_SHORT);
|
ledGreen.start(Led::FLASH_SHORT);
|
||||||
|
} else {
|
||||||
|
ledGreen.start(Led::FLASH_LONG);
|
||||||
|
}
|
||||||
} else if (onTimeSwitch.get() == SwitchPort::SWITCH_LONG) {
|
} else if (onTimeSwitch.get() == SwitchPort::SWITCH_LONG) {
|
||||||
engineDecOffTime();
|
if (engineDecOffTime()) {
|
||||||
ledRed.start(Led::FLASH_SHORT);
|
ledRed.start(Led::FLASH_SHORT);
|
||||||
|
} else {
|
||||||
|
ledRed.start(Led::FLASH_LONG);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
ledRed.exec();
|
ledRed.exec();
|
||||||
|
Reference in New Issue
Block a user