From baeb4b696ec8033c94c7bbdc02e7112156a6fa87 Mon Sep 17 00:00:00 2001
From: Vincent van der Wal
Date: Wed, 24 Sep 2025 15:02:28 +0200
Subject: [PATCH] add pwm on and off
---
src/app.d.ts | 10 +----
src/main.cpp | 29 +++++++++++--
src/routes/+page.svelte | 93 ++++++++++++++++++++++++++++++-----------
3 files changed, 97 insertions(+), 35 deletions(-)
diff --git a/src/app.d.ts b/src/app.d.ts
index da08e6d..6757087 100644
--- a/src/app.d.ts
+++ b/src/app.d.ts
@@ -1,13 +1,7 @@
-// See https://svelte.dev/docs/kit/types#app.d.ts
-// for information about these interfaces
declare global {
namespace App {
- // interface Error {}
- // interface Locals {}
- // interface PageData {}
- // interface PageState {}
- // interface Platform {}
+
}
}
-export {};
+export { };
diff --git a/src/main.cpp b/src/main.cpp
index 22304c2..2f3b947 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -35,7 +35,8 @@ float derivedOverShoot = targetTemp;
float derivedUnderShoot = targetTemp;
unsigned long lastSwitch = 0;
unsigned long autoSwitchDelay = 20000; // 20s
-unsigned long pwmSwitchDelay = 5000; // 5s
+float pwmSwitchDelayOn = 4000; // 5s
+float pwmSwitchDelayOff = 7000; // 5s
String mode = "off";
@@ -119,6 +120,7 @@ void handleWebSocketMessage(void *arg, uint8_t *data, size_t len)
{
digitalWrite(relay, LOW);
lastSwitch = millis();
+ mode = "off";
}
else
{
@@ -154,6 +156,23 @@ void handleWebSocketMessage(void *arg, uint8_t *data, size_t len)
Serial.printf("\nMode set to ");
Serial.print(mode);
}
+ if (message.startsWith("setPWMOn"))
+ {
+ String target = message.substring(10, 15);
+ pwmSwitchDelayOn = target.toFloat();
+ Serial.printf("\nPWM switch ON set to ");
+ Serial.print(pwmSwitchDelayOn);
+ Serial.printf("°C");
+ }
+
+ if (message.startsWith("setPWMOff"))
+ {
+ String target = message.substring(11, 16);
+ pwmSwitchDelayOff = target.toFloat();
+ Serial.printf("\nPWM switch OFF set to ");
+ Serial.print(pwmSwitchDelayOff);
+ Serial.printf("°C");
+ }
}
}
@@ -228,14 +247,18 @@ void regulateRelais()
if (mode == "pwm")
{
- if ((millis() - lastSwitch) > pwmSwitchDelay)
+ if ((millis() - lastSwitch) > pwmSwitchDelayOn)
{
if (digitalRead(relay) == HIGH)
{
digitalWrite(relay, LOW);
lastSwitch = millis();
}
- else if (digitalRead(relay) == LOW)
+ }
+
+ if ((millis() - lastSwitch) > pwmSwitchDelayOff)
+ {
+ if (digitalRead(relay) == LOW)
{
digitalWrite(relay, HIGH);
lastSwitch = millis();
diff --git a/src/routes/+page.svelte b/src/routes/+page.svelte
index 85ce50d..e84cc07 100644
--- a/src/routes/+page.svelte
+++ b/src/routes/+page.svelte
@@ -8,8 +8,6 @@
import { nl } from 'date-fns/locale';
- import { browser } from '$app/environment';
-
import { pad } from '$lib/utils';
import { page } from '$app/state';
@@ -36,12 +34,13 @@
let spoofInterval = 250;
let speedFactor = 250 / spoofInterval;
const switchDelay = (30 / speedFactor) * 1000;
- const pwmDelay = (5 / speedFactor) * 1000;
+ let pwmOnDelay = (4 / speedFactor) * 1000;
+ let pwmOffDelay = (7 / speedFactor) * 1000;
- let maxValues = 4 * 60 * 60; // 60 minutes (4 values/sec)
+ let maxValues = 4 * 2 * 60 * 60; // 120 minutes (4 values/sec)
- let temperatureData = [];
- let relaisData = [];
+ let temperatureData: Array<[number, number]> = [];
+ let relaisData: Array<[number, number]> = [];
let downloadCSVButton: HTMLElement;
let modeSpan: HTMLElement;
@@ -64,14 +63,6 @@
xMax: relaisData[relaisData.length - 1][0] + 10,
xMin: r[0]
- // label: {
- // display: true,
- // content: 'Heat',
- // position: {
- // x: 'center',
- // y: 'start'
- // }
- // }
};
}
if (r[1] === 0 && active) {
@@ -92,15 +83,15 @@
backgroundColor: 'rgba(0, 255, 133, 0.25)',
borderWidth: 0,
yMax: 0,
- yMin: 400
+ yMin: 350
},
limitOrange: {
type: 'box',
drawTime: 'beforeDraw',
backgroundColor: 'rgba(255, 138, 0 ,0.25)',
borderWidth: 0,
- yMax: 400,
- yMin: 500
+ yMax: 350,
+ yMin: 450
},
limitRed: {
type: 'box',
@@ -108,8 +99,8 @@
backgroundColor: 'rgba(255, 0, 0, 0.25)',
borderWidth: 0,
- yMax: 500,
- yMin: 600
+ yMax: 450,
+ yMin: 550
},
targetTemp: {
type: 'line',
@@ -174,7 +165,6 @@
}
},
y: {
- title: 'Temperature C',
min: 0
}
}
@@ -274,11 +264,14 @@
}
if (mode === 'pwm') {
- if (d.getTime() - lastSwitch.getTime() > pwmDelay) {
+ if (d.getTime() - lastSwitch.getTime() > pwmOnDelay) {
if (relais) {
relais = 0;
lastSwitch = new Date();
- } else if (!relais) {
+ }
+ }
+ if (d.getTime() - lastSwitch.getTime() > pwmOffDelay) {
+ if (!relais) {
relais = 1;
lastSwitch = new Date();
}
@@ -405,6 +398,28 @@
}
};
+ const changePwmOn = (e: Event) => {
+ const target = e.target as HTMLTextAreaElement;
+ let value = Number(target?.value);
+ console.log('Changed pwm on to ' + value);
+ if (!import.meta.env.DEV) {
+ ws.send('setPWMOn: ' + pad(value, 3));
+ } else {
+ pwmOnDelay = (value / speedFactor) * 1000;
+ }
+ };
+
+ const changePwmOff = (e: Event) => {
+ const target = e.target as HTMLTextAreaElement;
+ let value = Number(target?.value);
+ console.log('Changed pwm off to ' + value);
+ if (!import.meta.env.DEV) {
+ ws.send('setPWMOff: ' + pad(value, 3));
+ } else {
+ pwmOffDelay = (value / speedFactor) * 1000;
+ }
+ };
+
const changeMode = (e: Event) => {
const target = e.target as HTMLTextAreaElement;
let value = target?.value;
@@ -452,7 +467,7 @@
class="onoffswitch-checkbox h-0"
id="relais_switch_input"
tabindex="0"
- checked={relais}
+ checked={relais === 1}
/>
+ {#if mode === 'pwm'}
+
+
+
+
+
+
+
+
+ {/if}
(pauseGraphUpdate = !pauseGraphUpdate)}
+ >{pauseGraphUpdate ? 'Resume' : 'Pause'} Graph