implemented display logic
This commit is contained in:
@@ -33,9 +33,9 @@ void DisplayController::cycle_displays()
|
|||||||
{
|
{
|
||||||
while(is_running)
|
while(is_running)
|
||||||
{
|
{
|
||||||
for(auto& display : this->displays)
|
for(auto &display : this->displays)
|
||||||
{
|
{
|
||||||
output_gpio_interface->write_display(display);
|
output_gpio_interface->write_display(*display);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -29,7 +29,7 @@ public:
|
|||||||
virtual void deactivate(items::DriverBoardItem *driver_board_item) = 0;
|
virtual void deactivate(items::DriverBoardItem *driver_board_item) = 0;
|
||||||
virtual void deactivate(items::Item *sound) = 0;
|
virtual void deactivate(items::Item *sound) = 0;
|
||||||
|
|
||||||
virtual void write_display(std::shared_ptr<output::items::IDisplay> display) = 0;
|
virtual void write_display(items::IDisplay &display) = 0;
|
||||||
//Display gpio interface!
|
//Display gpio interface!
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -140,9 +140,46 @@ void OutputGPIOInterface::fire_sound(bool fire)
|
|||||||
GPIOInterface::write_pin(pins_sound.at("fire"), fire);
|
GPIOInterface::write_pin(pins_sound.at("fire"), fire);
|
||||||
}
|
}
|
||||||
|
|
||||||
void OutputGPIOInterface::write_display(std::shared_ptr<output::items::IDisplay> display)
|
void OutputGPIOInterface::write_display(IDisplay &display)
|
||||||
{
|
{
|
||||||
return;
|
std::vector<char> content = display.get_content();
|
||||||
|
|
||||||
|
for(uint8_t i = 0; i < content.size(); i++)
|
||||||
|
{
|
||||||
|
write_display_digit(display.get_address(), content.at(i), i);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void OutputGPIOInterface::write_display_digit(const uint8_t display_address, const char &content, const uint8_t &position)
|
||||||
|
{
|
||||||
|
select_display_segment(position);
|
||||||
|
|
||||||
|
select_display_digit(content);
|
||||||
|
|
||||||
|
run_display(display_address);
|
||||||
|
}
|
||||||
|
|
||||||
|
void OutputGPIOInterface::select_display_segment(const uint8_t &segment)
|
||||||
|
{
|
||||||
|
write_pin(pins_display.at("segment_select_A"), segment & 0b001u);
|
||||||
|
write_pin(pins_display.at("segment_select_B"), segment & 0b010u);
|
||||||
|
write_pin(pins_display.at("segment_select_C"), segment & 0b100u);
|
||||||
|
}
|
||||||
|
|
||||||
|
void OutputGPIOInterface::select_display_digit(const char &content)
|
||||||
|
{
|
||||||
|
write_pin(pins_display.at("digit_select_A"), content & 0b0001u);
|
||||||
|
write_pin(pins_display.at("digit_select_B"), content & 0b0010u);
|
||||||
|
write_pin(pins_display.at("digit_select_C"), content & 0b0100u);
|
||||||
|
write_pin(pins_display.at("digit_select_D"), content & 0b1000u);
|
||||||
|
}
|
||||||
|
|
||||||
|
void OutputGPIOInterface::run_display(const uint8_t &address)
|
||||||
|
{
|
||||||
|
write_pin(pins_display.at("display_select_" + std::to_string(address)), true);
|
||||||
|
|
||||||
|
write_pin(pins_display.at("display_select_" + std::to_string(address)), false);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -33,9 +33,14 @@ public:
|
|||||||
void deactivate(items::DriverBoardItem *driver_board_item) override;
|
void deactivate(items::DriverBoardItem *driver_board_item) override;
|
||||||
void deactivate(items::Item *sound) override;
|
void deactivate(items::Item *sound) override;
|
||||||
|
|
||||||
void write_display(std::shared_ptr<output::items::IDisplay> display) override;
|
void write_display(items::IDisplay &display) override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
void write_display_digit(const uint8_t display_address, const char &content, const uint8_t &position);
|
||||||
|
void select_display_segment(const uint8_t &digit);
|
||||||
|
void select_display_digit(const char &content);
|
||||||
|
void run_display(const uint8_t &address);
|
||||||
|
|
||||||
void initialize_i2c_addresses();
|
void initialize_i2c_addresses();
|
||||||
|
|
||||||
void initialize_pins();
|
void initialize_pins();
|
||||||
|
|||||||
@@ -29,7 +29,8 @@ public:
|
|||||||
virtual void write_score(int score);
|
virtual void write_score(int score);
|
||||||
virtual void write_content(std::array<char, DigitCount> content);
|
virtual void write_content(std::array<char, DigitCount> content);
|
||||||
|
|
||||||
virtual std::vector<char> get_content();
|
std::vector<char> get_content() override;
|
||||||
|
uint8_t get_address() override;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
std::array<char, DigitCount> content;
|
std::array<char, DigitCount> content;
|
||||||
|
|||||||
@@ -9,6 +9,7 @@
|
|||||||
#define _SRC_OUTPUT_IDISPLAY_H_
|
#define _SRC_OUTPUT_IDISPLAY_H_
|
||||||
|
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
#include <cstdint>
|
||||||
|
|
||||||
namespace flippR_driver
|
namespace flippR_driver
|
||||||
{
|
{
|
||||||
@@ -23,6 +24,7 @@ class IDisplay
|
|||||||
public:
|
public:
|
||||||
virtual ~IDisplay() = default;
|
virtual ~IDisplay() = default;
|
||||||
|
|
||||||
|
virtual uint8_t get_address() = 0;
|
||||||
virtual std::vector<char> get_content() = 0;
|
virtual std::vector<char> get_content() = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user