mirror of
https://github.com/BotChain-Robots/control.git
synced 2026-03-10 00:32:26 +01:00
Oled implementation (#1)
This commit is contained in:
@@ -9,20 +9,21 @@
|
||||
#include "flatbuffers_generated/TopologyMessage_generated.h"
|
||||
|
||||
class Actuator : public Module {
|
||||
public:
|
||||
explicit Actuator(uint8_t device_id) : Module(device_id) {};
|
||||
public:
|
||||
explicit Actuator(uint8_t device_id) : Module(device_id) {};
|
||||
|
||||
Actuator(uint8_t device_id, ModuleType module_type) : Module(device_id, module_type) {};
|
||||
Actuator(uint8_t device_id, ModuleType module_type)
|
||||
: Module(device_id, module_type) {};
|
||||
|
||||
Actuator(uint8_t device_id, ModuleType module_type, Messaging::ConnectionType connection_type,
|
||||
uint8_t leader)
|
||||
: Module(device_id, module_type, connection_type, leader) {};
|
||||
Actuator(uint8_t device_id, ModuleType module_type,
|
||||
Messaging::ConnectionType connection_type, uint8_t leader)
|
||||
: Module(device_id, module_type, connection_type, leader) {};
|
||||
|
||||
protected:
|
||||
virtual std::vector<uint8_t> get_actuation_message() = 0;
|
||||
protected:
|
||||
virtual std::vector<uint8_t> get_actuation_message() = 0;
|
||||
|
||||
private:
|
||||
[[noreturn]] void actuator_tx_loop();
|
||||
private:
|
||||
[[noreturn]] void actuator_tx_loop();
|
||||
};
|
||||
|
||||
#endif // CONTROL_MODULE_H
|
||||
|
||||
@@ -5,33 +5,38 @@
|
||||
#ifndef CONTROL_BOUNDED1DPOSITIONALACTUATOR_H
|
||||
#define CONTROL_BOUNDED1DPOSITIONALACTUATOR_H
|
||||
|
||||
#include <string>
|
||||
|
||||
#include "actuators/Actuator.h"
|
||||
#include "flatbuffers/AngleControlMessageBuilder.h"
|
||||
#include "flatbuffers/SensorMessageBuilder.h"
|
||||
|
||||
class BoundedPositionalActuator1D : public Actuator {
|
||||
|
||||
public:
|
||||
BoundedPositionalActuator1D(uint8_t device_id, ModuleType type, double max_value,
|
||||
double min_value, double initial_position)
|
||||
: Actuator(device_id, type), m_target_position(initial_position), m_max_value(max_value),
|
||||
m_min_value(min_value),
|
||||
acm_builder(std::make_unique<Flatbuffers::AngleControlMessageBuilder>()) {
|
||||
}
|
||||
public:
|
||||
BoundedPositionalActuator1D(uint8_t device_id, ModuleType type,
|
||||
double max_value, double min_value,
|
||||
double initial_position)
|
||||
: Actuator(device_id, type), m_target_position(initial_position),
|
||||
m_max_value(max_value), m_min_value(min_value),
|
||||
acm_builder(
|
||||
std::make_unique<Flatbuffers::AngleControlMessageBuilder>()) {}
|
||||
|
||||
double get_position() override;
|
||||
void actuate(double position) override;
|
||||
void actuate(double x, double y) override; // no-op
|
||||
double get_position() override;
|
||||
std::string get_text() override; // no-op
|
||||
void actuate(double position) override;
|
||||
void actuate(const std::string &text) override; // no-op
|
||||
void actuate(double x, double y) override; // no-op
|
||||
|
||||
std::vector<uint8_t> get_actuation_message() override;
|
||||
void update_sensor_data(const Flatbuffers::sensor_value &value) override;
|
||||
std::vector<uint8_t> get_actuation_message() override;
|
||||
void update_sensor_data(const Flatbuffers::sensor_value &value) override;
|
||||
|
||||
private:
|
||||
double m_current_position = 0;
|
||||
double m_target_position;
|
||||
double m_max_value;
|
||||
double m_min_value;
|
||||
std::unique_ptr<Flatbuffers::AngleControlMessageBuilder> acm_builder;
|
||||
private:
|
||||
double m_current_position = 0;
|
||||
double m_target_position;
|
||||
double m_max_value;
|
||||
double m_min_value;
|
||||
std::unique_ptr<Flatbuffers::AngleControlMessageBuilder> acm_builder;
|
||||
};
|
||||
|
||||
#endif // CONTROL_1DPOSITIONALACTUATOR_H
|
||||
|
||||
38
include/actuators/OledActuator.h
Normal file
38
include/actuators/OledActuator.h
Normal file
@@ -0,0 +1,38 @@
|
||||
//
|
||||
// Created by Johnathon Slightham on 2025-11-13.
|
||||
//
|
||||
|
||||
#ifndef CONTROL_OLEDACTUATOR_H
|
||||
#define CONTROL_OLEDACTUATOR_H
|
||||
|
||||
#include <string>
|
||||
|
||||
#include "actuators/Actuator.h"
|
||||
#include "flatbuffers/SensorMessageBuilder.h"
|
||||
#include "flatbuffers/TextControlMessageBuilder.h"
|
||||
|
||||
class OledActuator : public Actuator {
|
||||
|
||||
public:
|
||||
OledActuator(uint8_t device_id, ModuleType type)
|
||||
: Actuator(device_id, type),
|
||||
m_text_message_builder(
|
||||
std::make_unique<Flatbuffers::TextControlMessageBuilder>()) {}
|
||||
|
||||
double get_position() override;
|
||||
std::string get_text() override;
|
||||
void actuate(double position) override;
|
||||
void actuate(double x, double y) override; // no-op
|
||||
void actuate(const std::string &text) override;
|
||||
|
||||
std::vector<uint8_t> get_actuation_message() override;
|
||||
void update_sensor_data(const Flatbuffers::sensor_value &value) override;
|
||||
|
||||
private:
|
||||
std::string m_current_text = "";
|
||||
std::string m_target_text = "";
|
||||
std::unique_ptr<Flatbuffers::TextControlMessageBuilder>
|
||||
m_text_message_builder;
|
||||
};
|
||||
|
||||
#endif // CONTROL_OLEDACTUATOR_H
|
||||
@@ -5,30 +5,35 @@
|
||||
#ifndef CONTROL_1DPOSITIONALACTUATOR_H
|
||||
#define CONTROL_1DPOSITIONALACTUATOR_H
|
||||
|
||||
#include <string>
|
||||
|
||||
#include "actuators/Actuator.h"
|
||||
#include "flatbuffers/AngleControlMessageBuilder.h"
|
||||
#include "flatbuffers/SensorMessageBuilder.h"
|
||||
|
||||
class PositionalActuator1D final : public Actuator {
|
||||
|
||||
public:
|
||||
PositionalActuator1D(uint8_t device_id, ModuleType type)
|
||||
: Actuator(device_id, type),
|
||||
m_acm_builder(std::make_unique<Flatbuffers::AngleControlMessageBuilder>()) {};
|
||||
public:
|
||||
PositionalActuator1D(uint8_t device_id, ModuleType type)
|
||||
: Actuator(device_id, type),
|
||||
m_acm_builder(
|
||||
std::make_unique<Flatbuffers::AngleControlMessageBuilder>()) {};
|
||||
|
||||
double get_position() override;
|
||||
void actuate(double position) override;
|
||||
void actuate(double x, double y) override; // no-op
|
||||
double get_position() override;
|
||||
std::string get_text() override; // no-op
|
||||
void actuate(double position) override;
|
||||
void actuate(const std::string &text) override; // no-op
|
||||
void actuate(double x, double y) override; // no-op
|
||||
|
||||
std::vector<uint8_t> get_actuation_message() override;
|
||||
void update_sensor_data(const Flatbuffers::sensor_value &value) override;
|
||||
std::vector<uint8_t> get_actuation_message() override;
|
||||
void update_sensor_data(const Flatbuffers::sensor_value &value) override;
|
||||
|
||||
private:
|
||||
void update_loop();
|
||||
double m_target_position = 0;
|
||||
double m_current_position = 0;
|
||||
double m_board_target_position = 0;
|
||||
std::unique_ptr<Flatbuffers::AngleControlMessageBuilder> m_acm_builder;
|
||||
private:
|
||||
void update_loop();
|
||||
double m_target_position = 0;
|
||||
double m_current_position = 0;
|
||||
double m_board_target_position = 0;
|
||||
std::unique_ptr<Flatbuffers::AngleControlMessageBuilder> m_acm_builder;
|
||||
};
|
||||
|
||||
#endif // CONTROL_1DPOSITIONALACTUATOR_H
|
||||
|
||||
Reference in New Issue
Block a user