Browse Source

value mode handling and display

master
Flo Smilari 3 years ago
parent
commit
69729b3833
9 changed files with 188 additions and 28 deletions
  1. 58
    5
      Display.cpp
  2. 12
    2
      Display.h
  3. 6
    1
      Fraestisch_SFTools.ino
  4. 34
    3
      RouterElevator.cpp
  5. 13
    1
      RouterElevator.h
  6. 33
    0
      ValueMode.cpp
  7. 31
    0
      ValueMode.h
  8. 0
    15
      images/RotateBitmap.h
  9. 1
    1
      sloeber.ino.cpp

+ 58
- 5
Display.cpp View File

@@ -9,16 +9,30 @@
#include "Display.h"
// Array of all bitmaps for convenience. (Total bytes used to store images in PROGMEM = 48)
const int epd_rotate_bitmap_allArray_LEN = 8;
const static unsigned char *epd_rotate_bitmap_allArray[epd_rotate_bitmap_allArray_LEN] = {
epd_bitmap_Rotate_0,
epd_bitmap_Rotate_45,
epd_bitmap_Rotate_90,
epd_bitmap_Rotate_135,
epd_bitmap_Rotate_180,
epd_bitmap_Rotate_225,
epd_bitmap_Rotate_270,
epd_bitmap_Rotate_315
};
/*****************
** Constructors.
****************/
Display::Display() {
Display::Display() : mode(SLOW) {
ssd1306 = Adafruit_SSD1306(SCREEN_WIDTH, SCREEN_HEIGHT);
u8g2_gfx.begin(ssd1306);
wlsConnected = false;
angle = 0;
starttime = millis();
refreshScreen = true;
distanceValue = 0;
}
/******************
@@ -32,6 +46,10 @@ void Display::init() {
}
}
void Display::setRefreshScreen() {
refreshScreen = true;
}
void Display::display() {
if (refreshScreen) {
refreshScreen = false;
@@ -111,6 +129,7 @@ void Display::showFrame(Status status) {
redrawFrame();
ssd1306.drawLine(37, 43, SCREEN_WIDTH - 1, 43, SSD1306_WHITE);
drawStatusText(STATUS_TXT_IDLE);
drawMode(this->mode);
break;
case NULLING:
case NULLING_TLS:
@@ -176,6 +195,28 @@ void Display::setWlsConnected(bool wlsConnected) {
}
}
void Display::setDistanceUnit(const String &distanceUnit) {
if (this->distanceUnit != distanceUnit) {
this->distanceUnit = distanceUnit;
setRefreshScreen();
}
}
void Display::setDistanceValue(const float &distanceValue) {
if (this->distanceValue != distanceValue) {
this->distanceValue = distanceValue;
setRefreshScreen();
}
}
void Display::setMode(const ValueMode &mode) {
if (!this->mode.equals(mode)) {
Serial.println("Equal: " + this->mode.toString());
this->mode = mode;
setRefreshScreen();
}
}
void Display::drawWLSStatus() {
String txt = wlsConnected ? "WLS" : "";
char *s = &txt[0];
@@ -187,6 +228,22 @@ void Display::drawWLSStatus() {
u8g2_gfx.println(F(s));
}
void Display::drawMode(ValueMode mode) {
String txt = mode.toString();
char *s = &txt[0];
int16_t w = 0;
u8g2_gfx.setFont(u8g2_font_helvB10_tf);
w = u8g2_gfx.getUTF8Width(s);
u8g2_gfx.setCursor((SCREEN_WIDTH - w - 6), 63 - 4);
u8g2_gfx.println(F(s));
}
void Display::drawDistanceValue(float distance) {
}
void Display::drawDistanceUnit(String unit) {
}
/********************************
** Private methods
*******************************/
@@ -262,7 +319,3 @@ void Display::rotateAndDrawRotationBitmap() {
display();
}
}
void Display::setRefreshScreen() {
refreshScreen = true;
}

+ 12
- 2
Display.h View File

@@ -19,6 +19,7 @@
#include "images/RotateBitmap.h"
#include "images/DiveBitmap.h"
#include "Status.h"
#include "ValueMode.h"
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
@@ -35,6 +36,9 @@ class Display {
U8G2_FOR_ADAFRUIT_GFX u8g2_gfx;
String configText;
String configOption;
ValueMode mode;
float distanceValue;
String distanceUnit;
bool wlsConnected;
bool refreshScreen;
int angle;
@@ -56,12 +60,18 @@ class Display {
void showFrame(Status status);
void drawConfigText(String txt);
void drawConfigOption(String txt);
const String& getConfigOption() const;
void drawMode(ValueMode mode);
void drawDistanceValue(float distance);
void drawDistanceUnit(String unit);
void setConfigOption(const String &configOption);
const String& getConfigText() const;
const String& getConfigOption() const;
void setConfigText(const String &configText);
const String& getConfigText() const;
void setWlsConnected(bool wlsConnected);
void setRefreshScreen();
void setMode(const ValueMode &mode);
void setDistanceValue(const float &distanceValue);
void setDistanceUnit(const String &distanceUnit);
};
#endif /* DISPLAY_H_ */

+ 6
- 1
Fraestisch_SFTools.ino View File

@@ -65,7 +65,7 @@ RotaryControler RotaryControler(RotEnc_Dta_Pin, RotEnc_Clk_Pin, RotEnc_Switch_Pi
Display Display;
ESP_FlexyStepper Stepper;
RouterSetup Router_Setup(Display);
RouterElevator Router_Elevator(Stepper, Display, WlsDetect, Wls, LIMIT_SWITCH, MOVE_DOWNWARD); // @suppress("Ambiguous problem")
RouterElevator Router_Elevator(Stepper, Display, Router_Setup, WlsDetect, Wls, LIMIT_SWITCH, MOVE_DOWNWARD);

Status actualStatus;
Status originStatus;
@@ -259,6 +259,11 @@ void loop() {

case IDLE:
printStatus("IDLE");
if (RotaryControler.isSwitchPressed()) {
Serial.println("RotaryControler.isSwitchPressed");
Router_Elevator.toggleMode();
}
Router_Elevator.onRotaryControlerTurn(RotaryControler.getEncoderMove());
if (RedButton.isLongPressed()) {
if (WlsDetect.isConnected()) {
SetActualStatus(NULLING_TLS);

+ 34
- 3
RouterElevator.cpp View File

@@ -7,20 +7,23 @@
#include "RouterElevator.h"
RouterElevator::RouterElevator(ESP_FlexyStepper &_Stepper, Display &_display, WLS &_WlsDetect, WLS &_Wls, int _LimitSwitch, int _DOWNWARD_DIR) :
Stepper(_Stepper), display(_display), WlsDetect(_WlsDetect), Wls(_Wls) {
RouterElevator::RouterElevator(ESP_FlexyStepper &_Stepper, Display &_display, RouterSetup &_Router_Setup,
WLS &_WlsDetect, WLS &_Wls, int _LimitSwitch, int _DOWNWARD_DIR)
: Stepper(_Stepper), display(_display), Router_Setup(_Router_Setup), WlsDetect(_WlsDetect), Wls(_Wls), mode(SLOW) {
LimitSwitch = _LimitSwitch;
DOWNWARD_DIR = _DOWNWARD_DIR;
UPWARD_DIR = -DOWNWARD_DIR;
targetDistance = 0;
}
void RouterElevator::setZeroPosition() {
Stepper.setCurrentPositionAsHomeAndStop();
Stepper.setCurrentPositionInMillimeters(0);
Stepper.setTargetPositionRelativeInMillimeters(0);
}
void RouterElevator::moveRelativeInMillimeters(float distanceInMillimeters) {
Stepper.setTargetPositionInMillimeters(distanceInMillimeters);
Stepper.setTargetPositionRelativeInMillimeters(distanceInMillimeters);
}
void RouterElevator::moveToLowerLimitSwitch(void) {
@@ -47,6 +50,15 @@ bool RouterElevator::isTargetPositionReached() {
return Stepper.getDistanceToTargetSigned() == 0;
}
void RouterElevator::moveToTarget(void) {
Stepper.moveToPositionInMillimeters(targetDistance);
}
void RouterElevator::moveToParkPosition(void) {
float parkOffset = -5; //Router_Setup.getParkPostionOffset() * -1;
Stepper.moveToPositionInMillimeters(parkOffset);
}
bool RouterElevator::isWLSTriggerd() {
if (WlsDetect.isConnected()) {
if (Wls.isPlugged()) {
@@ -77,4 +89,23 @@ void RouterElevator::checkDirection() {
previousDirection = Stepper.getDirectionOfMotion();
}
ValueMode RouterElevator::getMode() const {
return mode;
}
void RouterElevator::setMode(ValueMode mode) {
this->mode = mode;
Serial.println("RouterElevator::setMode: " + this->mode.toString());
display.setMode(this->mode);
}
void RouterElevator::toggleMode() {
setMode((mode.getValueMode() == SLOW) ? ValueMode(FAST) : ValueMode(SLOW));
}
void RouterElevator::onRotaryControlerTurn(RotaryEncoder::Direction turn) {
// if (turn != RotaryEncoder::Direction::NOROTATION) {
// int sign = (turn == RotaryEncoder::Direction::CLOCKWISE) ? 1 : -1;
// //TODO: Update the targetDistance and show it on display
// }
}

+ 13
- 1
RouterElevator.h View File

@@ -13,25 +13,33 @@
#include "Display.h"
#include "WLS.h"
#include "RouterSetup.h"
#include "ValueMode.h"
class RouterElevator {
private:
ESP_FlexyStepper &Stepper;
Display &display;
RouterSetup &Router_Setup;
int previousDirection = 0;
byte limitSwitchState = 1;
int LimitSwitch;
WLS &WlsDetect, &Wls;
int DOWNWARD_DIR;
int UPWARD_DIR;
float targetDistance;
ValueMode mode;
public:
RouterElevator(ESP_FlexyStepper &_Stepper, Display &_display, WLS &_WlsDetect, WLS &_Wls, int _LimitSwitch, int _DOWNWARD_DIR);
RouterElevator(ESP_FlexyStepper &_Stepper, Display &_display, RouterSetup &_Router_Setup,
WLS &_WlsDetect, WLS &_Wls, int _LimitSwitch, int _DOWNWARD_DIR);
void setZeroPosition(void);
void moveRelativeInMillimeters(float distanceInMillimeters);
void moveToLowerLimitSwitch(void);
void moveToUpperLimitSwitch(void);
void moveToTarget(void);
void moveToParkPosition(void);
void clearLimitSwitch(void);
void tryReleaseLimitSwitch(void);
bool isLimitSwitchTriggerd(void);
@@ -39,6 +47,10 @@ class RouterElevator {
bool isTargetPositionReached(void);
void limitSwitchHandler(void);
void checkDirection(void);
ValueMode getMode() const;
void setMode(ValueMode mode);
void toggleMode();
void onRotaryControlerTurn(RotaryEncoder::Direction turn);
};

+ 33
- 0
ValueMode.cpp View File

@@ -0,0 +1,33 @@
/*
* ValueMode.cpp
*
* Created on: 23.02.2022
* Author: FSmilari
*/
#include "ValueMode.h"
static const char *mode_str[] = { "SLOW", "FAST" };
ValueMode::ValueMode(Mode mode) {
this->valueMode = mode;
}
Mode ValueMode::getValueMode() const {
return valueMode;
}
void ValueMode::setValueMode(Mode valueMode)
{
this->valueMode = valueMode;
}
String ValueMode::toString() {
String tmp(mode_str[this->valueMode]);
return tmp;
}
bool ValueMode::equals(ValueMode valueMode) {
return this->valueMode == valueMode.getValueMode();
}

+ 31
- 0
ValueMode.h View File

@@ -0,0 +1,31 @@
/*
* ValueMode.h
*
* Created on: 23.02.2022
* Author: FSmilari
*/
#ifndef VALUEMODE_H_
#define VALUEMODE_H_
#include <stdint.h>
#include <WString.h>
enum Mode {
SLOW, FAST
};
class ValueMode {
private:
Mode valueMode;
public:
ValueMode(Mode mode);
String toString();
Mode getValueMode() const;
void setValueMode(Mode valueMode);
bool equals(ValueMode valueMode);
};
#endif /* VALUEMODE_H_ */

+ 0
- 15
images/RotateBitmap.h View File

@@ -50,20 +50,5 @@ const unsigned char epd_bitmap_Rotate_315 [] PROGMEM = {
0xff, 0xfe, 0xff, 0xfe, 0x7f, 0xfc, 0x7f, 0xfc, 0x3f, 0xf8, 0x1f, 0xf0, 0x07, 0xc0
};
// Array of all bitmaps for convenience. (Total bytes used to store images in PROGMEM = 48)
const int epd_rotate_bitmap_allArray_LEN = 8;
const static unsigned char *epd_rotate_bitmap_allArray[epd_rotate_bitmap_allArray_LEN] = {
epd_bitmap_Rotate_0,
epd_bitmap_Rotate_45,
epd_bitmap_Rotate_90,
epd_bitmap_Rotate_135,
epd_bitmap_Rotate_180,
epd_bitmap_Rotate_225,
epd_bitmap_Rotate_270,
epd_bitmap_Rotate_315
};
#endif /* IMAGES_ROTATEBITMAP_H_ */

+ 1
- 1
sloeber.ino.cpp View File

@@ -2,7 +2,7 @@
//This is a automatic generated file
//Please do not modify this file
//If you touch this file your change will be overwritten during the next build
//This file has been generated on 2022-02-21 23:07:49
//This file has been generated on 2022-02-23 22:58:18

#include "Arduino.h"
#include <Arduino.h>

Loading…
Cancel
Save