Compare commits
9 commits
Author | SHA1 | Date | |
---|---|---|---|
Martin Brodbeck | 98cf010c4b | ||
Martin Brodbeck | 1e70cbb13d | ||
Martin Brodbeck | f19a5bab0d | ||
Martin Brodbeck | d4278d6098 | ||
Martin Brodbeck | 0bbb794346 | ||
Martin Brodbeck | 7b56534fee | ||
Martin Brodbeck | 5dc8d5e76d | ||
Martin Brodbeck | 4fbb58f1c4 | ||
Martin Brodbeck | 7a79ff85b5 |
3
.gitmodules
vendored
3
.gitmodules
vendored
|
@ -1,3 +1,6 @@
|
|||
[submodule "modules/pico-onewire"]
|
||||
path = modules/pico-onewire
|
||||
url = https://github.com/adamboardman/pico-onewire.git
|
||||
[submodule "modules/fmt"]
|
||||
path = modules/fmt
|
||||
url = https://github.com/fmtlib/fmt.git
|
||||
|
|
20
.vscode/launch.json
vendored
20
.vscode/launch.json
vendored
|
@ -1,4 +1,4 @@
|
|||
{
|
||||
{
|
||||
// Use IntelliSense to learn about possible attributes.
|
||||
// Hover to view descriptions of existing attributes.
|
||||
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
|
||||
|
@ -11,21 +11,19 @@
|
|||
"request": "launch",
|
||||
"type": "cortex-debug",
|
||||
"servertype": "openocd",
|
||||
"gdbPath" : "arm-none-eabi-gdb",
|
||||
"gdbPath": "gdb-multiarch",
|
||||
"device": "RP2040",
|
||||
//"showDevDebugOutput": "parsed",
|
||||
"configFiles": [
|
||||
"interface/picoprobe.cfg",
|
||||
"interface/raspberrypi-swd.cfg",
|
||||
"target/rp2040.cfg"
|
||||
],
|
||||
"svdFile": "${env:PICO_SDK_PATH}/src/rp2040/hardware_regs/rp2040.svd",
|
||||
"runToEntryPoint": "main",
|
||||
// Give restart the same functionality as runToMain
|
||||
//"postRestartCommands": [
|
||||
// "break main",
|
||||
// "continue"
|
||||
//],
|
||||
"searchDir": ["${env:HOME}/src/openocd/tcl"],
|
||||
// Give restart the same functionality as runToEntryPoint - main
|
||||
"postRestartCommands": [
|
||||
"break main",
|
||||
"continue"
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
10
.vscode/settings.json
vendored
10
.vscode/settings.json
vendored
|
@ -14,7 +14,13 @@
|
|||
"visibility": "hidden"
|
||||
},
|
||||
},
|
||||
"cortex-debug.openocdPath": "${env:HOME}/src/openocd/src/openocd",
|
||||
"cmake.generator": "Unix Makefiles",
|
||||
"C_Cpp.clang_format_fallbackStyle": "LLVM",
|
||||
"files.watcherExclude": {
|
||||
"**/.git/objects/**": true,
|
||||
"**/.git/subtree-cache/**": true,
|
||||
"**/node_modules/*/**": true,
|
||||
"**/.hg/store/**": true,
|
||||
".flatpak/**": true,
|
||||
"_build/**": true
|
||||
},
|
||||
}
|
||||
|
|
|
@ -1,21 +1,23 @@
|
|||
cmake_minimum_required(VERSION 3.13)
|
||||
|
||||
set(CMAKE_C_STANDARD 11)
|
||||
set(CMAKE_CXX_STANDARD 20)
|
||||
set(CMAKE_CXX_STANDARD 17)
|
||||
|
||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra -Wno-volatile")
|
||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra -fno-exceptions")
|
||||
|
||||
# Initialise pico_sdk from installed location
|
||||
# (note this can come from environment, CMake cache etc)
|
||||
set(PICO_SDK_PATH "/usr/share/pico-sdk")
|
||||
#set(PICO_SDK_PATH "/home/martin/pico/pico-sdk")
|
||||
|
||||
# Pull in Raspberry Pi Pico SDK (must be before project)
|
||||
include("cmake/pico_sdk_import.cmake")
|
||||
|
||||
project(gbmanager VERSION "1.0.0" LANGUAGES C CXX ASM)
|
||||
project(gbmanager VERSION "1.0.3" LANGUAGES C CXX ASM)
|
||||
|
||||
# Initialise the Raspberry Pi Pico SDK
|
||||
pico_sdk_init()
|
||||
|
||||
add_subdirectory(modules/pico-onewire)
|
||||
add_subdirectory(src)
|
||||
add_subdirectory(modules/fmt)
|
||||
add_subdirectory(src)
|
||||
|
|
1
modules/fmt
Submodule
1
modules/fmt
Submodule
|
@ -0,0 +1 @@
|
|||
Subproject commit b6f4ceaed0a0a24ccf575fab6c56dd50ccf6f1a9
|
|
@ -1 +1 @@
|
|||
Subproject commit d5af2a1e1d81c3cb21805e332c8185607ee74b1d
|
||||
Subproject commit 6399467cf7687ecb7f8f4e4923303349e0ecf160
|
|
@ -14,15 +14,15 @@ pico_set_program_name(${CMAKE_PROJECT_NAME} "gbmanager")
|
|||
pico_set_program_version(${CMAKE_PROJECT_NAME} ${PROJECT_VERSION})
|
||||
|
||||
if(CMAKE_BUILD_TYPE STREQUAL "Debug")
|
||||
pico_enable_stdio_uart(${CMAKE_PROJECT_NAME} 1)
|
||||
pico_enable_stdio_usb(${CMAKE_PROJECT_NAME} 0)
|
||||
pico_enable_stdio_uart(${CMAKE_PROJECT_NAME} 0)
|
||||
pico_enable_stdio_usb(${CMAKE_PROJECT_NAME} 1)
|
||||
else()
|
||||
pico_enable_stdio_uart(${CMAKE_PROJECT_NAME} 0)
|
||||
pico_enable_stdio_usb(${CMAKE_PROJECT_NAME} 0)
|
||||
endif()
|
||||
|
||||
# Add the standard library to the build
|
||||
target_link_libraries(${CMAKE_PROJECT_NAME} pico_stdlib pico_one_wire)
|
||||
target_link_libraries(${CMAKE_PROJECT_NAME} pico_stdlib pico_one_wire fmt::fmt-header-only)
|
||||
|
||||
# Add any user requested libraries
|
||||
target_link_libraries(${CMAKE_PROJECT_NAME}
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
#include <sstream>
|
||||
#include <string>
|
||||
|
||||
#include "../modules/fmt/include/fmt/format.h"
|
||||
#include "../modules/pico-onewire/api/one_wire.h"
|
||||
#include "hardware/i2c.h"
|
||||
#include "pico/stdlib.h"
|
||||
|
@ -28,9 +29,9 @@ absolute_time_t lastPressed = get_absolute_time();
|
|||
|
||||
using std::string;
|
||||
|
||||
void buttonPressedCallback(uint gpio, uint32_t events) {
|
||||
void buttonPressedCallback(uint gpio, [[maybe_unused]] uint32_t events) {
|
||||
absolute_time_t now = get_absolute_time();
|
||||
if (absolute_time_diff_us(lastPressed, now) < 750000) {
|
||||
if (absolute_time_diff_us(lastPressed, now) < 500000) {
|
||||
return;
|
||||
} else {
|
||||
lastPressed = now;
|
||||
|
@ -64,7 +65,9 @@ int main() {
|
|||
oneWire.single_device_read_rom(address);
|
||||
|
||||
// Initialize the relais
|
||||
Relais relais(RELAIS_PIN);
|
||||
// It need the button callback function, since it has to disable the on/off
|
||||
// button for a short amount of time
|
||||
Relais relais(RELAIS_PIN, &buttonPressedCallback);
|
||||
|
||||
// Initialize the Buttons
|
||||
gpio_set_irq_enabled_with_callback(BUTTON_1_PIN, GPIO_IRQ_EDGE_FALL, true,
|
||||
|
@ -76,17 +79,19 @@ int main() {
|
|||
|
||||
float temp_act{0};
|
||||
float temp_diff{0.5};
|
||||
std::stringstream lcdText{};
|
||||
string lcdText{};
|
||||
bool isHeating = false;
|
||||
string heatInfo{""};
|
||||
string systemInfo{""};
|
||||
|
||||
lcdText << " G" << CUSTOM_CHAR_AE << "rbox Manager\n (Ver. "
|
||||
<< PROJECT_VERSION << ")";
|
||||
myLCD.sendString(lcdText.str());
|
||||
lcdText = fmt::format(" G{}rbox Manager\n (Ver. {})", CUSTOM_CHAR_AE,
|
||||
PROJECT_VERSION);
|
||||
myLCD.sendString(lcdText);
|
||||
sleep_ms(3000);
|
||||
|
||||
while (true) {
|
||||
uint64_t destTime = time_us_64() + 1000000;
|
||||
|
||||
oneWire.convert_temperature(address, true, false);
|
||||
temp_act = oneWire.temperature(address);
|
||||
|
||||
|
@ -103,14 +108,12 @@ int main() {
|
|||
|
||||
relais.activate(isHeating);
|
||||
|
||||
lcdText.str("");
|
||||
lcdText.clear();
|
||||
lcdText.precision(4);
|
||||
lcdText << "ACT: " << temp_act << CUSTOM_CHAR_DEG << "C " << heatInfo
|
||||
<< "\n"
|
||||
<< "TGT: " << temp_tgt << CUSTOM_CHAR_DEG << "C " << systemInfo;
|
||||
|
||||
lcdText = fmt::format("ACT: {:05.2f}{}C {}\nTGT: {:05.2f}{}C {}",
|
||||
temp_act, CUSTOM_CHAR_DEG, heatInfo, temp_tgt,
|
||||
CUSTOM_CHAR_DEG, systemInfo);
|
||||
myLCD.setCursor(0, 0);
|
||||
myLCD.sendString(lcdText.str());
|
||||
myLCD.sendString(lcdText);
|
||||
|
||||
sleep_until((absolute_time_t){destTime});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,13 +1,35 @@
|
|||
#include "relais.h"
|
||||
|
||||
Relais::Relais(uint gpio) : gpio{gpio} {
|
||||
Relais::Relais(uint gpio, gpio_irq_callback_t callback)
|
||||
: gpio{gpio}, callback{callback} {
|
||||
gpio_init(gpio);
|
||||
gpio_set_dir(gpio, GPIO_OUT);
|
||||
off();
|
||||
}
|
||||
|
||||
void Relais::activate(bool active) { gpio_put(gpio, !active); }
|
||||
void Relais::activate(bool active) {
|
||||
if (active == lastState) {
|
||||
return;
|
||||
}
|
||||
|
||||
lastState = active;
|
||||
|
||||
gpio_set_irq_enabled_with_callback(BUTTON_1_PIN, GPIO_IRQ_EDGE_FALL, false,
|
||||
callback);
|
||||
gpio_set_irq_enabled_with_callback(BUTTON_2_PIN, GPIO_IRQ_EDGE_FALL, false,
|
||||
callback);
|
||||
gpio_set_irq_enabled_with_callback(BUTTON_3_PIN, GPIO_IRQ_EDGE_FALL, false,
|
||||
callback);
|
||||
gpio_put(gpio, !active);
|
||||
sleep_ms(100);
|
||||
gpio_set_irq_enabled_with_callback(BUTTON_1_PIN, GPIO_IRQ_EDGE_FALL, true,
|
||||
callback);
|
||||
gpio_set_irq_enabled_with_callback(BUTTON_2_PIN, GPIO_IRQ_EDGE_FALL, true,
|
||||
callback);
|
||||
gpio_set_irq_enabled_with_callback(BUTTON_3_PIN, GPIO_IRQ_EDGE_FALL, true,
|
||||
callback);
|
||||
}
|
||||
|
||||
void Relais::on() { activate(true); }
|
||||
|
||||
void Relais::off() { activate(false); }
|
||||
void Relais::off() { activate(false); }
|
||||
|
|
10
src/relais.h
10
src/relais.h
|
@ -4,15 +4,21 @@
|
|||
#include "hardware/gpio.h"
|
||||
#include "pico/stdlib.h"
|
||||
|
||||
extern const uint BUTTON_1_PIN; // declared in gbmanager.cpp
|
||||
extern const uint BUTTON_2_PIN; // declared in gbmanager.cpp
|
||||
extern const uint BUTTON_3_PIN; // declared in gbmanager.cpp
|
||||
|
||||
class Relais {
|
||||
public:
|
||||
Relais(uint gpio);
|
||||
Relais(uint gpio, gpio_irq_callback_t callback);
|
||||
void activate(bool active);
|
||||
void on();
|
||||
void off();
|
||||
|
||||
private:
|
||||
uint gpio;
|
||||
bool lastState;
|
||||
gpio_irq_callback_t callback;
|
||||
};
|
||||
|
||||
#endif
|
||||
#endif
|
||||
|
|
Loading…
Reference in a new issue