- outsource global variables and objects - move from config.hpp to global.cpp / hpp - rename config.hpp, thus change all includes - re-arrange includes -> in source files instead of header - optimize / make function comment titles more consistent - optimize comments overall - add several temporary files to gitignore - fix unused variable compiler warnings
117 lines
3.1 KiB
C++
117 lines
3.1 KiB
C++
#include "vfd.hpp"
|
|
#include "config.h"
|
|
#include "global.hpp"
|
|
|
|
#define CHECK_BIT(var,pos) (((var)>>(pos)) & 1)
|
|
|
|
const char* vfd_directionStr[2] = {"FWD", "REV"};
|
|
static const char *TAG = "vfd";
|
|
static uint8_t level = 0; //current speed level
|
|
static bool state = false; //current state
|
|
static vfd_direction_t direction = FWD; //current direction
|
|
|
|
|
|
//=============================
|
|
//========= setState ==========
|
|
//=============================
|
|
void vfd_setState(bool stateNew, vfd_direction_t directionNew){
|
|
//only proceed and send log output when state or direction actually changed
|
|
if ( state == stateNew && direction == directionNew ) {
|
|
//already at target state and target direction -> do nothing
|
|
return;
|
|
}
|
|
|
|
//log old and new state
|
|
ESP_LOGI(TAG, "CHANGING vfd state from: %i %s", (int)state, vfd_directionStr[(int)direction]);
|
|
ESP_LOGI(TAG, "CHANGING vfd state to: %i %s", (int)stateNew, vfd_directionStr[(int)directionNew]);
|
|
//update stored state
|
|
state = stateNew;
|
|
direction = directionNew;
|
|
|
|
//turn motor on/off with target direction
|
|
if (state == true) {
|
|
switch (direction) {
|
|
case FWD:
|
|
gpio_set_level(GPIO_VFD_REV, 0);
|
|
gpio_set_level(GPIO_VFD_FWD, 1);
|
|
break;
|
|
case REV:
|
|
gpio_set_level(GPIO_VFD_FWD, 0);
|
|
gpio_set_level(GPIO_VFD_REV, 1);
|
|
break;
|
|
}
|
|
} else {
|
|
gpio_set_level(GPIO_VFD_FWD, 0);
|
|
gpio_set_level(GPIO_VFD_REV, 0);
|
|
}
|
|
}
|
|
|
|
|
|
|
|
//=============================
|
|
//======= setSpeedLevel =======
|
|
//=============================
|
|
void vfd_setSpeedLevel(uint8_t levelNew){
|
|
//set speed level of VFD
|
|
|
|
//only proceed and send log output when level is actually changed
|
|
if (level == levelNew) {
|
|
//already at target level -> nothing todo
|
|
return;
|
|
}
|
|
|
|
//log change
|
|
ESP_LOGI(TAG, "CHANGING speed level from %i to %i", level, levelNew);
|
|
//update stored level
|
|
level = levelNew;
|
|
|
|
//bit:2 1 0
|
|
//lvl D2 D1 D0 Hz
|
|
//0 0 0 0 default
|
|
//1 0 0 1 1
|
|
//2 0 1 0 3
|
|
//3 0 1 1 9
|
|
//4 1 0 0 16
|
|
//5 1 0 1 25
|
|
//6 1 1 0 50
|
|
//7 1 1 1 70
|
|
|
|
//limit to 7
|
|
if (level > 3) {
|
|
level = 3;
|
|
}
|
|
|
|
//variables for logging the pin state
|
|
//bool D0, D1, D2;
|
|
bool D0, D1;
|
|
|
|
//set output state according to corresponding bit state
|
|
if CHECK_BIT(level, 0) {
|
|
D0 = true;
|
|
gpio_set_level(GPIO_VFD_D0, 1);
|
|
} else {
|
|
D0 = false;
|
|
gpio_set_level(GPIO_VFD_D0, 0);
|
|
}
|
|
|
|
if CHECK_BIT(level, 1) {
|
|
D1 = true;
|
|
gpio_set_level(GPIO_VFD_D1, 1);
|
|
} else {
|
|
D1 = false;
|
|
gpio_set_level(GPIO_VFD_D1, 0);
|
|
}
|
|
|
|
// if CHECK_BIT(level, 2) {
|
|
// D2 = true;
|
|
// gpio_set_level(GPIO_VFD_D2, 1);
|
|
// } else {
|
|
// D2 = false;
|
|
// gpio_set_level(GPIO_VFD_D2, 0);
|
|
// }
|
|
|
|
//log pin state
|
|
//ESP_LOGI(TAG, " - pin state: D2=%i, D1=%i, D0=%i", (int)D2, (int)D1, (int)D0);
|
|
ESP_LOGI(TAG, " - pin state: D1=%i, D0=%i", (int)D1, (int)D0);
|
|
}
|