Convert to .cpp and .h. Change led lib
This commit is contained in:
parent
f4e540b508
commit
860399deb1
@ -2,8 +2,13 @@ set(SOURCES
|
|||||||
"TM1640/TM16xx.cpp"
|
"TM1640/TM16xx.cpp"
|
||||||
"TM1640/TM1640.cpp"
|
"TM1640/TM1640.cpp"
|
||||||
"bottom_half.cpp"
|
"bottom_half.cpp"
|
||||||
"wires.cpp"
|
"char_lcd.cpp"
|
||||||
|
"game_timer.cpp"
|
||||||
"leds.cpp"
|
"leds.cpp"
|
||||||
|
"sd.cpp"
|
||||||
|
"speaker.cpp"
|
||||||
|
"sseg.cpp"
|
||||||
|
"wires.cpp"
|
||||||
)
|
)
|
||||||
|
|
||||||
target_sources(${COMPONENT_LIB} PRIVATE ${SOURCES})
|
target_sources(${COMPONENT_LIB} PRIVATE ${SOURCES})
|
||||||
|
|||||||
18
main/drivers/char_lcd.cpp
Normal file
18
main/drivers/char_lcd.cpp
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
#include "char_lcd.h"
|
||||||
|
|
||||||
|
#define CHAR_LCD_I2C_NUM I2C_NUM_0
|
||||||
|
|
||||||
|
#define LCD_ADDR 0x27
|
||||||
|
#define LCD_COLS 20
|
||||||
|
#define LCD_ROWS 4
|
||||||
|
|
||||||
|
static const char *TAG = "char_lcd";
|
||||||
|
|
||||||
|
void init_char_lcd(void) {
|
||||||
|
lcd_init(&lcd, LCD_ADDR, CHAR_LCD_I2C_NUM);
|
||||||
|
lcd_begin(&lcd, LCD_COLS, LCD_ROWS);
|
||||||
|
|
||||||
|
lcd_set_backlight(&lcd, 255);
|
||||||
|
|
||||||
|
ESP_LOGI(TAG, "LCD initialized");
|
||||||
|
}
|
||||||
18
main/drivers/char_lcd.h
Normal file
18
main/drivers/char_lcd.h
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
#ifndef CHAR_LCD_H
|
||||||
|
#define CHAR_LCD_H
|
||||||
|
|
||||||
|
#include "i2c_lcd_pcf8574.h"
|
||||||
|
|
||||||
|
#define CHAR_LCD_I2C_NUM I2C_NUM_0
|
||||||
|
|
||||||
|
#define LCD_ADDR 0x27
|
||||||
|
#define LCD_COLS 20
|
||||||
|
#define LCD_ROWS 4
|
||||||
|
|
||||||
|
i2c_lcd_pcf8574_handle_t lcd;
|
||||||
|
|
||||||
|
static const char *CHAR_LCD_TAG = "char_lcd";
|
||||||
|
|
||||||
|
void init_char_lcd(void);
|
||||||
|
|
||||||
|
#endif /* CHAR_LCD_H */
|
||||||
@ -1,52 +0,0 @@
|
|||||||
#ifndef CHAR_LCD_HPP
|
|
||||||
#define CHAR_LCD_HPP
|
|
||||||
|
|
||||||
#include "i2c_lcd_pcf8574.h"
|
|
||||||
|
|
||||||
#define CHAR_LCD_I2C_NUM I2C_NUM_0
|
|
||||||
|
|
||||||
#define LCD_ADDR 0x27
|
|
||||||
#define LCD_COLS 20
|
|
||||||
#define LCD_ROWS 4
|
|
||||||
|
|
||||||
i2c_lcd_pcf8574_handle_t lcd;
|
|
||||||
|
|
||||||
static const char *CHAR_LCD_TAG = "char_lcd";
|
|
||||||
|
|
||||||
void init_char_lcd(void) {
|
|
||||||
|
|
||||||
lcd_init(&lcd, LCD_ADDR, CHAR_LCD_I2C_NUM);
|
|
||||||
lcd_begin(&lcd, LCD_COLS, LCD_ROWS);
|
|
||||||
|
|
||||||
// Turn on the backlight
|
|
||||||
lcd_set_backlight(&lcd, 255);
|
|
||||||
|
|
||||||
ESP_LOGI(CHAR_LCD_TAG, "LCD initialized");
|
|
||||||
}
|
|
||||||
|
|
||||||
void example_lcd(void) {
|
|
||||||
// Print a message
|
|
||||||
lcd_set_cursor(&lcd, 0, 0);
|
|
||||||
lcd_print(&lcd, "Hello, ESP32!");
|
|
||||||
lcd_set_cursor(&lcd, 0, 1);
|
|
||||||
lcd_print(&lcd, "LCD Test");
|
|
||||||
|
|
||||||
int counter = 0;
|
|
||||||
while (1) {
|
|
||||||
vTaskDelay(20 / portTICK_PERIOD_MS); // Wait for 1 second
|
|
||||||
|
|
||||||
// Update the counter on the LCD
|
|
||||||
lcd_set_cursor(&lcd, 10, 1);
|
|
||||||
char buffer[14];
|
|
||||||
snprintf(buffer, sizeof(buffer), "%5d", counter);
|
|
||||||
lcd_print(&lcd, buffer);
|
|
||||||
|
|
||||||
counter++;
|
|
||||||
|
|
||||||
// Reset counter to avoid display overflow
|
|
||||||
if (counter > 99999) counter = 0;
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif /* CHAR_LCD_HPP */
|
|
||||||
79
main/drivers/game_timer.cpp
Normal file
79
main/drivers/game_timer.cpp
Normal file
@ -0,0 +1,79 @@
|
|||||||
|
#ifndef GAME_TIMER_HPP
|
||||||
|
#define GAME_TIMER_HPP
|
||||||
|
|
||||||
|
#include "game_timer.h"
|
||||||
|
|
||||||
|
static bool is_module_playing;
|
||||||
|
static bool is_game_playing;
|
||||||
|
|
||||||
|
// in ms
|
||||||
|
static uint32_t game_time_left;
|
||||||
|
static uint32_t module_time_left;
|
||||||
|
|
||||||
|
static void game_timer_task(void *arg);
|
||||||
|
static uint32_t sat_sub(uint32_t x, uint32_t y);
|
||||||
|
|
||||||
|
void init_game_module_timer(void) {
|
||||||
|
xTaskCreate(game_timer_task, "game_module_timer", 4096, NULL, 10, NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
void start_game_timer(void) {
|
||||||
|
is_game_playing = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
void stop_game_timer(void) {
|
||||||
|
is_game_playing = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
void start_module_timer(void) {
|
||||||
|
is_module_playing = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
void stop_module_timer(void) {
|
||||||
|
is_module_playing = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
void set_game_time(uint32_t new_time) {
|
||||||
|
time_left = new_time;
|
||||||
|
}
|
||||||
|
|
||||||
|
uint32_t get_game_time() {
|
||||||
|
return time_left;
|
||||||
|
}
|
||||||
|
|
||||||
|
void set_module_time(uint32_t new_time) {
|
||||||
|
time_left = new_time;
|
||||||
|
}
|
||||||
|
|
||||||
|
uint32_t get_module_time() {
|
||||||
|
return time_left;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void game_timer_task(void *arg)
|
||||||
|
{
|
||||||
|
TickType_t lastWakeTime = xTaskGetTickCount();
|
||||||
|
|
||||||
|
const uint32_t frequency = 100;
|
||||||
|
while (1) {
|
||||||
|
vTaskDelayUntil( &lastWakeTime, pdMS_TO_TICKS(frequency));
|
||||||
|
if (is_game_playing) {
|
||||||
|
game_time_left = sat_sub(game_time_left, frequency);
|
||||||
|
set_game_sseg_num(game_time_left / 100, 1);
|
||||||
|
}
|
||||||
|
if (is_module_playing) {
|
||||||
|
module_time_left = sat_sub(module_time_left, frequency);
|
||||||
|
set_module_sseg_num(module_time_left / 100, 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
vTaskDelete(NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
static uint32_t sat_sub(uint32_t x, uint32_t y)
|
||||||
|
{
|
||||||
|
uint32_t res = x - y;
|
||||||
|
res &= -(res <= x);
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif /* GAME_TIMER_HPP */
|
||||||
30
main/drivers/game_timer.h
Normal file
30
main/drivers/game_timer.h
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
#ifndef GAME_TIMER_H
|
||||||
|
#define GAME_TIMER_H
|
||||||
|
|
||||||
|
#include "freertos/FreeRTOS.h"
|
||||||
|
#include "sseg.hpp"
|
||||||
|
|
||||||
|
/// Initializes the game and module timers.
|
||||||
|
void init_game_module_timer(void);
|
||||||
|
|
||||||
|
/// Starts the game timer
|
||||||
|
void start_game_timer(void);
|
||||||
|
/// Stops the game timer
|
||||||
|
void stop_game_timer(void);
|
||||||
|
|
||||||
|
/// Starts the module timer
|
||||||
|
void start_module_timer(void);
|
||||||
|
/// Stops the module timer
|
||||||
|
void stop_module_timer(void);
|
||||||
|
|
||||||
|
/// Sets the game time in ms
|
||||||
|
void set_game_time(uint32_t new_time);
|
||||||
|
/// Gets the current game time in ms
|
||||||
|
uint32_t get_game_time();
|
||||||
|
|
||||||
|
/// Sets the module time in ms
|
||||||
|
void set_module_time(uint32_t new_time);
|
||||||
|
/// Gets the current module time in ms
|
||||||
|
uint32_t get_module_time();
|
||||||
|
|
||||||
|
#endif /* GAME_TIMER_H */
|
||||||
@ -1,57 +0,0 @@
|
|||||||
#ifndef GAME_TIMER_HPP
|
|
||||||
#define GAME_TIMER_HPP
|
|
||||||
|
|
||||||
#include "freertos/FreeRTOS.h"
|
|
||||||
|
|
||||||
#include "sseg.hpp"
|
|
||||||
|
|
||||||
static bool playing;
|
|
||||||
static uint32_t time_left;
|
|
||||||
|
|
||||||
static void game_timer_task(void *arg);
|
|
||||||
uint32_t sat_sub(uint32_t x, uint32_t y);
|
|
||||||
|
|
||||||
void start_timer(void) {
|
|
||||||
playing = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
void stop_timer(void) {
|
|
||||||
playing = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
void init_game_timer(void) {
|
|
||||||
xTaskCreate(game_timer_task, "game_timer", 4096, NULL, 10, NULL);
|
|
||||||
}
|
|
||||||
|
|
||||||
void set_game_time(uint32_t new_time) {
|
|
||||||
time_left = new_time;
|
|
||||||
}
|
|
||||||
|
|
||||||
uint32_t get_game_time() {
|
|
||||||
return time_left;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void game_timer_task(void *arg)
|
|
||||||
{
|
|
||||||
TickType_t lastWakeTime = xTaskGetTickCount();
|
|
||||||
|
|
||||||
const uint32_t frequency = 100;
|
|
||||||
while (1) {
|
|
||||||
vTaskDelayUntil( &lastWakeTime, pdMS_TO_TICKS(frequency));
|
|
||||||
if (playing) {
|
|
||||||
time_left = sat_sub(time_left, frequency);
|
|
||||||
set_game_timer(time_left / 100, 1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
vTaskDelete(NULL);
|
|
||||||
}
|
|
||||||
|
|
||||||
uint32_t sat_sub(uint32_t x, uint32_t y)
|
|
||||||
{
|
|
||||||
uint32_t res = x - y;
|
|
||||||
res &= -(res <= x);
|
|
||||||
return res;
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif /* GAME_TIMER_HPP */
|
|
||||||
@ -1,6 +1,5 @@
|
|||||||
#include "leds.h"
|
#include "leds.h"
|
||||||
|
|
||||||
#define TAG "leds"
|
|
||||||
#define PIXEL_COUNT 21
|
#define PIXEL_COUNT 21
|
||||||
#define NEOPIXEL_PIN GPIO_NUM_7
|
#define NEOPIXEL_PIN GPIO_NUM_7
|
||||||
|
|
||||||
|
|||||||
@ -1,6 +1,5 @@
|
|||||||
#ifndef LEDS_H
|
#ifndef LEDS_H
|
||||||
#define LEDS_H
|
#define LEDS_H
|
||||||
|
|
||||||
#include "neopixel.h"
|
|
||||||
|
|
||||||
#endif /* LEDS_H */
|
#endif /* LEDS_H */
|
||||||
@ -1,26 +1,4 @@
|
|||||||
#ifndef SD_HPP
|
#include "sd.h"
|
||||||
#define SD_HPP
|
|
||||||
|
|
||||||
#include <string.h>
|
|
||||||
#include <sys/unistd.h>
|
|
||||||
#include <sys/stat.h>
|
|
||||||
#include "esp_vfs_fat.h"
|
|
||||||
#include "sdmmc_cmd.h"
|
|
||||||
#include "driver/sdmmc_host.h"
|
|
||||||
|
|
||||||
static const char *SD_TAG = "sd_driver";
|
|
||||||
|
|
||||||
#define MOUNT_POINT "/sdcard"
|
|
||||||
|
|
||||||
const char mount_point[] = MOUNT_POINT;
|
|
||||||
sdmmc_card_t *card;
|
|
||||||
|
|
||||||
#define SD_PIN_CLK GPIO_NUM_48
|
|
||||||
#define SD_PIN_CMD GPIO_NUM_45
|
|
||||||
#define SD_PIN_D0 GPIO_NUM_47
|
|
||||||
#define SD_PIN_D1 GPIO_NUM_21
|
|
||||||
#define SD_PIN_D2 GPIO_NUM_39
|
|
||||||
#define SD_PIN_D3 GPIO_NUM_38
|
|
||||||
|
|
||||||
void init_sd() {
|
void init_sd() {
|
||||||
esp_err_t ret;
|
esp_err_t ret;
|
||||||
@ -89,5 +67,3 @@ void deinit_sd() {
|
|||||||
esp_vfs_fat_sdcard_unmount(mount_point, card);
|
esp_vfs_fat_sdcard_unmount(mount_point, card);
|
||||||
ESP_LOGI(SD_TAG, "Card unmounted");
|
ESP_LOGI(SD_TAG, "Card unmounted");
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif /* SD_HPP */
|
|
||||||
27
main/drivers/sd.h
Normal file
27
main/drivers/sd.h
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
#ifndef SD_H
|
||||||
|
#define SD_H
|
||||||
|
|
||||||
|
#include <string.h>
|
||||||
|
#include <sys/unistd.h>
|
||||||
|
#include <sys/stat.h>
|
||||||
|
#include "esp_vfs_fat.h"
|
||||||
|
#include "sdmmc_cmd.h"
|
||||||
|
#include "driver/sdmmc_host.h"
|
||||||
|
|
||||||
|
#define MOUNT_POINT "/sdcard"
|
||||||
|
|
||||||
|
const char mount_point[] = MOUNT_POINT;
|
||||||
|
|
||||||
|
sdmmc_card_t *card;
|
||||||
|
|
||||||
|
#define SD_PIN_CLK GPIO_NUM_48
|
||||||
|
#define SD_PIN_CMD GPIO_NUM_45
|
||||||
|
#define SD_PIN_D0 GPIO_NUM_47
|
||||||
|
#define SD_PIN_D1 GPIO_NUM_21
|
||||||
|
#define SD_PIN_D2 GPIO_NUM_39
|
||||||
|
#define SD_PIN_D3 GPIO_NUM_38
|
||||||
|
|
||||||
|
void init_sd();
|
||||||
|
void deinit_sd();
|
||||||
|
|
||||||
|
#endif /* SD_H */
|
||||||
@ -1,31 +1,14 @@
|
|||||||
#ifndef SPEAKER_HPP
|
#include "speaker.h"
|
||||||
#define SPEAKER_HPP
|
|
||||||
|
|
||||||
#include <stdint.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include "freertos/FreeRTOS.h"
|
|
||||||
#include "freertos/task.h"
|
|
||||||
#include "driver/i2s_std.h"
|
|
||||||
#include "driver/gpio.h"
|
|
||||||
#include "esp_check.h"
|
|
||||||
#include "sdkconfig.h"
|
|
||||||
#include "sd.hpp"
|
|
||||||
|
|
||||||
#define SPEAKER_PIN_BCLK GPIO_NUM_46
|
|
||||||
#define SPEAKER_PIN_WS GPIO_NUM_9
|
|
||||||
#define SPEAKER_PIN_DOUT GPIO_NUM_3
|
|
||||||
#define SAMPLE_RATE 44100
|
|
||||||
#define AUDIO_BUFFER 2048
|
|
||||||
|
|
||||||
static i2s_chan_handle_t tx_chan;
|
static i2s_chan_handle_t tx_chan;
|
||||||
|
|
||||||
static const char *SPEAKER_TAG = "speaker_driver";
|
static const char *TAG = "speaker_driver";
|
||||||
|
|
||||||
esp_err_t play_raw(const char *fp) {
|
esp_err_t play_raw(const char *fp) {
|
||||||
FILE *fh = fopen(fp, "rb");
|
FILE *fh = fopen(fp, "rb");
|
||||||
if (fh == NULL)
|
if (fh == NULL)
|
||||||
{
|
{
|
||||||
ESP_LOGE(SPEAKER_TAG, "Failed to open file");
|
ESP_LOGE(TAG, "Failed to open file");
|
||||||
return ESP_ERR_INVALID_ARG;
|
return ESP_ERR_INVALID_ARG;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -56,7 +39,7 @@ esp_err_t play_raw(const char *fp) {
|
|||||||
for (int i = 0; i < bytes_read; i++) {
|
for (int i = 0; i < bytes_read; i++) {
|
||||||
write_buf[i] = read_buf[i] << 4;
|
write_buf[i] = read_buf[i] << 4;
|
||||||
}
|
}
|
||||||
ESP_LOGV(SPEAKER_TAG, "Bytes read: %d", bytes_read);
|
ESP_LOGV(TAG, "Bytes read: %d", bytes_read);
|
||||||
}
|
}
|
||||||
|
|
||||||
i2s_channel_disable(tx_chan);
|
i2s_channel_disable(tx_chan);
|
||||||
@ -66,7 +49,7 @@ esp_err_t play_raw(const char *fp) {
|
|||||||
return ESP_OK;
|
return ESP_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void init_speaker(void) {
|
void init_speaker(void) {
|
||||||
i2s_chan_config_t tx_chan_cfg = I2S_CHANNEL_DEFAULT_CONFIG(I2S_NUM_AUTO, I2S_ROLE_MASTER);
|
i2s_chan_config_t tx_chan_cfg = I2S_CHANNEL_DEFAULT_CONFIG(I2S_NUM_AUTO, I2S_ROLE_MASTER);
|
||||||
ESP_ERROR_CHECK(i2s_new_channel(&tx_chan_cfg, &tx_chan, NULL));
|
ESP_ERROR_CHECK(i2s_new_channel(&tx_chan_cfg, &tx_chan, NULL));
|
||||||
|
|
||||||
@ -92,5 +75,3 @@ static void init_speaker(void) {
|
|||||||
void play_example() {
|
void play_example() {
|
||||||
ESP_ERROR_CHECK_WITHOUT_ABORT(play_raw("/sdcard/o.pcm"));
|
ESP_ERROR_CHECK_WITHOUT_ABORT(play_raw("/sdcard/o.pcm"));
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif /* SPEAKER_HPP */
|
|
||||||
28
main/drivers/speaker.h
Normal file
28
main/drivers/speaker.h
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
#ifndef SPEAKER_H
|
||||||
|
#define SPEAKER_H
|
||||||
|
|
||||||
|
#include <stdint.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include "freertos/FreeRTOS.h"
|
||||||
|
#include "freertos/task.h"
|
||||||
|
#include "driver/i2s_std.h"
|
||||||
|
#include "driver/gpio.h"
|
||||||
|
#include "esp_check.h"
|
||||||
|
#include "sdkconfig.h"
|
||||||
|
#include "sd.hpp"
|
||||||
|
|
||||||
|
#define SPEAKER_PIN_BCLK GPIO_NUM_46
|
||||||
|
#define SPEAKER_PIN_WS GPIO_NUM_9
|
||||||
|
#define SPEAKER_PIN_DOUT GPIO_NUM_3
|
||||||
|
#define SAMPLE_RATE 44100
|
||||||
|
#define AUDIO_BUFFER 2048
|
||||||
|
|
||||||
|
static i2s_chan_handle_t tx_chan;
|
||||||
|
|
||||||
|
static const char *SPEAKER_TAG = "speaker_driver";
|
||||||
|
|
||||||
|
esp_err_t play_raw(const char *fp);
|
||||||
|
void init_speaker(void)
|
||||||
|
void play_example();
|
||||||
|
|
||||||
|
#endif /* SPEAKER_H */
|
||||||
37
main/drivers/sseg.cpp
Normal file
37
main/drivers/sseg.cpp
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
#include "sseg.h"
|
||||||
|
|
||||||
|
static const char *TAG = "sseg_driver";
|
||||||
|
|
||||||
|
void init_sseg() {
|
||||||
|
sseg = new TM1640(SSEG_PIN_DATA, SSEG_PIN_CLK, 8);
|
||||||
|
}
|
||||||
|
|
||||||
|
void set_game_sseg_raw(uint8_t* digits) {
|
||||||
|
sseg->setSegments(0, digits[0]);
|
||||||
|
sseg->setSegments(1, digits[1]);
|
||||||
|
sseg->setSegments(2, digits[2]);
|
||||||
|
sseg->setSegments(3, digits[3]);
|
||||||
|
}
|
||||||
|
|
||||||
|
void set_module_sseg_raw(uint8_t* digits) {
|
||||||
|
sseg->setSegments(4, digits[0]);
|
||||||
|
sseg->setSegments(5, digits[1]);
|
||||||
|
sseg->setSegments(6, digits[2]);
|
||||||
|
sseg->setSegments(7, digits[3]);
|
||||||
|
}
|
||||||
|
|
||||||
|
void set_game_sseg_num(unsigned int value, int dot_pos) {
|
||||||
|
for (int i = 0; i < 4; i++) {
|
||||||
|
auto idx = value % 10;
|
||||||
|
sseg->sendChar(3-i, TM16XX_NUMBER_FONT[idx], i == dot_pos);
|
||||||
|
value = value / 10;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void set_module_sseg_num(unsigned int value, int dot_pos) {
|
||||||
|
for (int i = 0; i < 4; i++) {
|
||||||
|
auto idx = value % 10;
|
||||||
|
sseg->sendChar(7-i, TM16XX_NUMBER_FONT[idx], i == dot_pos);
|
||||||
|
value = value / 10;
|
||||||
|
}
|
||||||
|
}
|
||||||
35
main/drivers/sseg.h
Normal file
35
main/drivers/sseg.h
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
#ifndef SSEG_H
|
||||||
|
#define SSEG_H
|
||||||
|
|
||||||
|
#include "TM1640/TM1640.h"
|
||||||
|
#include <esp_log.h>
|
||||||
|
|
||||||
|
#define SSEG_PIN_DATA GPIO_NUM_10
|
||||||
|
#define SSEG_PIN_CLK GPIO_NUM_11
|
||||||
|
|
||||||
|
TM1640* sseg = nullptr;
|
||||||
|
|
||||||
|
/// Initializes the seven segment driver
|
||||||
|
void init_sseg();
|
||||||
|
|
||||||
|
/// sets the game seven segment to the value of the digits
|
||||||
|
///
|
||||||
|
/// the bits 0-6 map to segments A-G, and bit 7 is DP.
|
||||||
|
///
|
||||||
|
/// `digits` must have len >= 4.
|
||||||
|
void set_game_sseg_raw(uint8_t* digits);
|
||||||
|
|
||||||
|
/// sets the module seven segment to the value of the digits
|
||||||
|
///
|
||||||
|
/// the bits 0-6 map to segments A-G, and bit 7 is DP.
|
||||||
|
///
|
||||||
|
/// `digits` must have len >= 4.
|
||||||
|
void set_module_sseg_raw(uint8_t* digits);
|
||||||
|
|
||||||
|
/// sets the game timer to the given number, with the dot at position `dot_pos` from the right (0 => right-most digit).
|
||||||
|
void set_game_sseg_num(unsigned int value, int dot_pos);
|
||||||
|
|
||||||
|
/// sets the module timer to the given number, with the dot at position `dot_pos` from the right (0 => right-most digit).
|
||||||
|
void set_module_sseg_num(unsigned int value, int dot_pos);
|
||||||
|
|
||||||
|
#endif /* SSEG_H */
|
||||||
@ -1,40 +0,0 @@
|
|||||||
#ifndef SSEG_HPP
|
|
||||||
#define SSEG_HPP
|
|
||||||
|
|
||||||
#include "TM1640/TM1640.h"
|
|
||||||
#include <esp_log.h>
|
|
||||||
|
|
||||||
#define SSEG_PIN_DATA GPIO_NUM_10
|
|
||||||
#define SSEG_PIN_CLK GPIO_NUM_11
|
|
||||||
|
|
||||||
static const char *SSEG_TAG = "sseg_driver";
|
|
||||||
|
|
||||||
TM1640* sseg = nullptr;
|
|
||||||
|
|
||||||
void init_sseg() {
|
|
||||||
sseg = new TM1640(SSEG_PIN_DATA, SSEG_PIN_CLK, 8);
|
|
||||||
}
|
|
||||||
|
|
||||||
void set_game_timer(unsigned int value, int dot_pos) {
|
|
||||||
if (sseg == nullptr) {
|
|
||||||
ESP_LOGE(SSEG_TAG, "SSEG display not initialized");
|
|
||||||
}
|
|
||||||
for (int i = 0; i < 4; i++) {
|
|
||||||
auto idx = value % 10;
|
|
||||||
sseg->sendChar(3-i, TM16XX_NUMBER_FONT[idx], i == dot_pos);
|
|
||||||
value = value / 10;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void set_module_timer(unsigned int value, int dot_pos) {
|
|
||||||
if (sseg == nullptr) {
|
|
||||||
ESP_LOGE(SSEG_TAG, "SSEG display not initialized");
|
|
||||||
}
|
|
||||||
for (int i = 0; i < 4; i++) {
|
|
||||||
auto idx = value % 10;
|
|
||||||
sseg->sendChar(7-i, TM16XX_NUMBER_FONT[idx], i == dot_pos);
|
|
||||||
value = value / 10;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif /* SSEG_HPP */
|
|
||||||
@ -1,12 +1,5 @@
|
|||||||
#include "wires.h"
|
#include "wires.h"
|
||||||
|
|
||||||
#define WIRES_PIN_DELTA GPIO_NUM_2
|
|
||||||
#define WIRES_I2C_NUM I2C_NUM_1
|
|
||||||
#define WIRES_I2C_ADDR 125
|
|
||||||
|
|
||||||
#define DELTA_BIT_WIRES 0
|
|
||||||
#define DELTA_BIT_BUTTON 1
|
|
||||||
|
|
||||||
static const char *TAG = "wires";
|
static const char *TAG = "wires";
|
||||||
|
|
||||||
static bool button_state;
|
static bool button_state;
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
## IDF Component Manager Manifest File
|
## IDF Component Manager Manifest File
|
||||||
dependencies:
|
dependencies:
|
||||||
zorxx/neopixel: "*"
|
iamflinks/i2c_lcd_pcf8574: "^1.0.1"
|
||||||
# iamflinks/i2c_lcd_pcf8574: "^1.0.1"
|
espressif/led_strip: "^2.5.4"
|
||||||
lvgl/lvgl: "^8.1"
|
lvgl/lvgl: "^8.1"
|
||||||
atanisoft/esp_lcd_ili9488: "^1.0.9"
|
atanisoft/esp_lcd_ili9488: "^1.0.9"
|
||||||
## Required IDF version
|
## Required IDF version
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user