diff --git a/app/src/lib/models.ts b/app/src/lib/models.ts
index 8636a71..8c07c32 100644
--- a/app/src/lib/models.ts
+++ b/app/src/lib/models.ts
@@ -173,11 +173,11 @@ export type CameraSettings = {
export type servo = {
channel: number;
name: string;
- direction: number;
+ inverted: boolean;
angle: number;
- min_pwm: number;
- max_pwm: number;
- min_angle: number;
- max_angle: number;
center_angle: number;
+ // min_pwm: number;
+ // max_pwm: number;
+ // min_angle: number;
+ // max_angle: number;
};
\ No newline at end of file
diff --git a/app/src/routes/peripherals/servo/servo.svelte b/app/src/routes/peripherals/servo/servo.svelte
index 4914de6..122cbb4 100644
--- a/app/src/routes/peripherals/servo/servo.svelte
+++ b/app/src/routes/peripherals/servo/servo.svelte
@@ -8,13 +8,16 @@
Is inverted
+
+ Middle position
+
+
-
- Min ($100)
- $500
- $1000
- Max ($1500)
+
+ 0
+ 90
+ 180
-
+
\ No newline at end of file
diff --git a/app/src/routes/peripherals/servo/servos.svelte b/app/src/routes/peripherals/servo/servos.svelte
index 4036221..db5f7e5 100644
--- a/app/src/routes/peripherals/servo/servos.svelte
+++ b/app/src/routes/peripherals/servo/servos.svelte
@@ -16,7 +16,7 @@
{
channel: 0,
name: "Front right hip",
- direction: direction,
+ inverted: false,
angle: angle,
min_pwm: min_pwm,
max_pwm: max_pwm,
diff --git a/esp32/lib/ESP32-sveltekit/ServoController.h b/esp32/lib/ESP32-sveltekit/ServoController.h
index 8edc2e9..e8e7921 100644
--- a/esp32/lib/ESP32-sveltekit/ServoController.h
+++ b/esp32/lib/ESP32-sveltekit/ServoController.h
@@ -11,14 +11,66 @@
#define SERVO_CONFIG_FILE "/config/deviceConfig.json"
#define SERVO_CONFIGURATION_SETTINGS_PATH "/api/servo/configuration"
+struct servo_t
+{
+ String name;
+ int8_t channel;
+ bool inverted;
+ int16_t angle;
+ int16_t center_angle;
+};
class ServoConfiguration {
public:
int32_t servo_oscillator_frequency {SERVO_OSCILLATOR_FREQUENCY};
int32_t servo_pwm_frequency {SERVO_FREQ};
- static void read(ServoConfiguration &settings, JsonObject &root) {}
+ std::vector servos_config;
+ bool is_active {false};
+
+ static void read(ServoConfiguration &settings, JsonObject &root) {
+ root["is_active"] = settings.is_active;
+ root["servo_pwm_frequency"] = settings.servo_oscillator_frequency;
+ root["servo_oscillator_frequency"] = settings.servo_oscillator_frequency;
+
+ JsonArray servos = root["servos"].to();
+
+ for (auto &servo : settings.servos_config)
+ {
+ JsonObject servo_config = servos.add();
+
+ servo_config["name"] = servo.name;
+ servo_config["channel"] = servo.channel;
+ servo_config["inverted"] = servo.inverted;
+ servo_config["angle"] = servo.angle;
+ servo_config["center_angle"] = servo.center_angle;
+ }
+ }
static StateUpdateResult update(JsonObject &root, ServoConfiguration &settings) {
+ settings.is_active = root["is_active"];
+ settings.servo_pwm_frequency = root["servo_pwm_frequency"];
+ settings.servo_oscillator_frequency = root["servo_oscillator_frequency"];
+ settings.servos_config.clear();
+
+ JsonArray servos = root["servos"];
+ if (root["servos"].is())
+ {
+ int i = 0;
+ for (auto servo : servos)
+ {
+ JsonObject servo_config = servo.as();
+ servo_t new_servo;
+
+ new_servo.name = servo_config["name"].as();
+ new_servo.channel = servo_config["channel"];
+ new_servo.inverted = servo_config["inverted"];
+ new_servo.angle = servo_config["angle"];
+ new_servo.center_angle = servo_config["center_angle"];
+
+ settings.servos_config.push_back(new_servo);
+ i++;
+ }
+ }
return StateUpdateResult::CHANGED;
};
};
@@ -43,17 +95,15 @@ class ServoController : public Adafruit_PWMServoDriver, public StatefulService