Add DisplayLib for OLED display management and enhance motor control with rotation methods
This commit is contained in:
parent
4841dc4317
commit
5d0a067fba
6 changed files with 207 additions and 21 deletions
67
lib/display/DisplayLib.cpp
Normal file
67
lib/display/DisplayLib.cpp
Normal file
|
@ -0,0 +1,67 @@
|
|||
#include "DisplayLib.hpp"
|
||||
|
||||
U8G2_SSD1306_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE);
|
||||
|
||||
void DisplayLib::updateDisplay(const char* title, const char* detail) {
|
||||
u8g2.clearBuffer();
|
||||
u8g2.setFont(u8g2_font_ncenB08_tr);
|
||||
u8g2.drawStr(0, 10, title);
|
||||
u8g2.setFont(u8g2_font_ncenB08_tr);
|
||||
u8g2.drawStr(0, 30, detail);
|
||||
u8g2.sendBuffer();
|
||||
}
|
||||
|
||||
void DisplayLib::welcomeScreen() {
|
||||
u8g2.clearBuffer();
|
||||
u8g2.setFont(u8g2_font_ncenB08_tr);
|
||||
u8g2.drawStr(0, 10, "Welcome to");
|
||||
u8g2.setFont(u8g2_font_ncenB08_tr);
|
||||
u8g2.drawStr(0, 30, "Elbestia");
|
||||
u8g2.sendBuffer();
|
||||
}
|
||||
|
||||
void DisplayLib::clearDisplay() {
|
||||
u8g2.clearBuffer();
|
||||
u8g2.sendBuffer();
|
||||
}
|
||||
|
||||
void DisplayLib::initDisplay() {
|
||||
u8g2.begin();
|
||||
u8g2.enableUTF8Print();
|
||||
u8g2.setFont(u8g2_font_ncenB08_tr);
|
||||
u8g2.clearBuffer();
|
||||
u8g2.sendBuffer();
|
||||
}
|
||||
|
||||
void DisplayLib::displayError(const char* error) {
|
||||
u8g2.clearBuffer();
|
||||
u8g2.setFont(u8g2_font_ncenB08_tr);
|
||||
u8g2.drawStr(0, 10, "Error:");
|
||||
u8g2.setFont(u8g2_font_ncenB08_tr);
|
||||
u8g2.drawStr(0, 30, error);
|
||||
u8g2.sendBuffer();
|
||||
}
|
||||
|
||||
void DisplayLib::displayMessage(const char* message) {
|
||||
u8g2.clearBuffer();
|
||||
u8g2.setFont(u8g2_font_ncenB08_tr);
|
||||
u8g2.drawStr(0, 10, message);
|
||||
u8g2.sendBuffer();
|
||||
}
|
||||
|
||||
void DisplayLib::printMessage(const char* message, int x, int y) {
|
||||
u8g2.clearBuffer();
|
||||
u8g2.setFont(u8g2_font_ncenB08_tr);
|
||||
u8g2.drawStr(x, y, message);
|
||||
u8g2.sendBuffer();
|
||||
}
|
||||
|
||||
void DisplayLib::printMessage(const String message, int x, int y) {
|
||||
u8g2.clearBuffer();
|
||||
u8g2.setFont(u8g2_font_ncenB08_tr);
|
||||
u8g2.drawStr(x, y, message.c_str());
|
||||
}
|
||||
|
||||
void DisplayLib::sendBuffer() {
|
||||
u8g2.sendBuffer();
|
||||
}
|
21
lib/display/DisplayLib.hpp
Normal file
21
lib/display/DisplayLib.hpp
Normal file
|
@ -0,0 +1,21 @@
|
|||
#ifndef DISPLAYLIB_HPP
|
||||
#define DISPLAYLIB_HPP
|
||||
|
||||
#include <U8g2lib.h>
|
||||
|
||||
class DisplayLib {
|
||||
public:
|
||||
void updateDisplay(const char* title, const char* detail);
|
||||
void welcomeScreen();
|
||||
void clearDisplay();
|
||||
void initDisplay();
|
||||
void displayError(const char* error);
|
||||
void displayMessage(const char* message);
|
||||
void printMessage(const char* message, int x, int y);
|
||||
void printMessage(const char* message, int x, int y, int size);
|
||||
void printMessage(const String message, int x, int y);
|
||||
void printMessage(const String message, int x, int y, int size);
|
||||
void sendBuffer();
|
||||
};
|
||||
|
||||
#endif
|
|
@ -8,7 +8,7 @@ OmniWheelMotors::OmniWheelMotors(int m1_r_pwm, int m1_l_pwm,
|
|||
motor_3 = {m3_r_pwm, m3_l_pwm};
|
||||
|
||||
MAX_SPEED = 70; // Max PWM value
|
||||
MIN_SPEED = 50; // Default minimum speed
|
||||
MIN_SPEED = 255; // Default minimum speed
|
||||
FULL_ROTATION_TIME = 2000; // Default time for 360 degrees in milliseconds
|
||||
}
|
||||
|
||||
|
@ -85,8 +85,8 @@ void OmniWheelMotors::moveRight(int speed) {
|
|||
void OmniWheelMotors::rotate360() {
|
||||
// Set motor directions for full rotation
|
||||
setMotorSpeed(motor_1, 0, MIN_SPEED); // Motor 1 forward
|
||||
setMotorSpeed(motor_2, 0, MIN_SPEED); // Motor 2 forward
|
||||
setMotorSpeed(motor_3, 0, 0); // Motor 3 neutral
|
||||
setMotorSpeed(motor_2, MIN_SPEED, 0); // Motor 2 forward
|
||||
setMotorSpeed(motor_3, 0, MIN_SPEED); // Motor 3 neutral
|
||||
|
||||
// Wait for approximately one full rotation
|
||||
delay(FULL_ROTATION_TIME);
|
||||
|
@ -95,6 +95,26 @@ void OmniWheelMotors::rotate360() {
|
|||
stop();
|
||||
}
|
||||
|
||||
void OmniWheelMotors::rotateClockwise(int speed) {
|
||||
// Ensure speed is at least minimum speed for stable movement
|
||||
speed = max(speed, MIN_SPEED);
|
||||
|
||||
// Set motor directions for clockwise rotation
|
||||
setMotorSpeed(motor_1, 0, speed); // Motor 1 forward
|
||||
setMotorSpeed(motor_2, speed, 0); // Motor 2 backward
|
||||
setMotorSpeed(motor_3, speed, 0); // Motor 3 neutral
|
||||
}
|
||||
|
||||
void OmniWheelMotors::rotateCounterClockwise(int speed) {
|
||||
// Ensure speed is at least minimum speed for stable movement
|
||||
speed = max(speed, MIN_SPEED);
|
||||
|
||||
// Set motor directions for counter-clockwise rotation
|
||||
setMotorSpeed(motor_1, speed, 0); // Motor 1 backward
|
||||
setMotorSpeed(motor_2, 0, speed); // Motor 2 forward
|
||||
setMotorSpeed(motor_3, 0, speed); // Motor 3 neutral
|
||||
}
|
||||
|
||||
void OmniWheelMotors::rotateToAngle(int targetAngle) {
|
||||
// Ensure angle is between 0 and 360
|
||||
targetAngle = targetAngle % 360;
|
||||
|
|
|
@ -23,7 +23,8 @@ public:
|
|||
void moveBackward(int speed);
|
||||
void moveLeft(int speed);
|
||||
void moveRight(int speed);
|
||||
|
||||
void rotateClockwise(int speed);
|
||||
void rotateCounterClockwise(int speed);
|
||||
// Rotation functions
|
||||
void rotate360();
|
||||
void rotateToAngle(int targetAngle);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue