Removed not needed config for pen. Use inkscape interface.

This commit is contained in:
Holger Weber
2026-02-13 01:12:39 +01:00
parent 42e9c4d97b
commit 53e51dc50b
5 changed files with 213 additions and 143 deletions

View File

@@ -72,8 +72,8 @@ extern SerialCommand SCmd;
extern int penMin;
extern int penMax;
extern int penUpPos;
extern int penDownPos;
extern int g_iPEN_UP_POS;
extern int g_iPEN_DOWN_POS;
extern int servoRateUp;
extern int servoRateDown;
extern long rotStepError;

View File

@@ -57,7 +57,7 @@ button { margin-top: 18px; border: 0; background: #0b5ed7; color: white; padding
let lastSeq = 0;
async function loadConfig() {
const resp = await fetch('/api/config');
const resp = await fetch('/api/config', { cache: 'no-store' });
if (!resp.ok) throw new Error('Konfiguration konnte nicht geladen werden');
return resp.json();
}
@@ -92,6 +92,8 @@ async function saveConfig() {
const text = await resp.text();
throw new Error(text || 'Speichern fehlgeschlagen');
}
const saved = await resp.json();
renderForm(saved);
status.textContent = 'Gespeichert';
}
@@ -143,6 +145,9 @@ void handleGetConfig() {
server.send(500, "text/plain", "Config storage not available");
return;
}
server.sendHeader("Cache-Control", "no-store, no-cache, must-revalidate");
server.sendHeader("Pragma", "no-cache");
server.sendHeader("Expires", "0");
server.send(200, "application/json", buildConfigJson());
}
@@ -159,17 +164,18 @@ void handlePostConfig() {
String error;
if (!applyConfigJson(server.arg("plain"), error)) {
Log(String("Config JSON fehlerhaft: ") + error);
server.send(400, "text/plain", error);
return;
}
if (!saveConfigToFile()) {
Log("Config konnte nicht gespeichert werden");
server.send(500, "text/plain", "Could not save config");
return;
}
// penState = penUpPos;
// penServo.write(penState);
Log(String("Config gespeichert: penUpPos=") + g_iPEN_UP_POS + ", penDownPos=" + g_iPEN_DOWN_POS);
server.send(200, "application/json", buildConfigJson());
}
@@ -180,11 +186,19 @@ void handleGetLogs() {
}
server.send(200, "application/json", buildLogsJson(since));
}
void handleNotFound() {
if (server.uri().startsWith("/api/")) {
server.send(404, "text/plain", "API endpoint not found");
return;
}
handleRoot();
}
} // namespace
ConfigParameter configParameters[] = {
{"penUpPos", &penUpPos, "Pen Up Position", 5},
{"penDownPos", &penDownPos, "Pen Down Position", 20},
// {"penUpPos", &g_iPEN_UP_POS, "Pen Up Position", 5},
// {"penDownPos", &g_iPEN_DOWN_POS, "Pen Down Position", 20},
};
const size_t configParameterCount = sizeof(configParameters) / sizeof(configParameters[0]);
@@ -203,6 +217,7 @@ bool loadConfigFromFile() {
File file = SPIFFS.open(kConfigPath, "r");
if (!file) {
Log("config.json fehlt, defaults werden gespeichert");
return saveConfigToFile();
}
@@ -210,6 +225,7 @@ bool loadConfigFromFile() {
DeserializationError err = deserializeJson(doc, file);
file.close();
if (err) {
Log("config.json ist ungueltig, defaults werden gespeichert");
return saveConfigToFile();
}
@@ -230,6 +246,7 @@ bool loadConfigFromFile() {
param->description = item["description"].as<String>();
}
}
Log(String("Config geladen: penUpPos=") + g_iPEN_UP_POS + ", penDownPos=" + g_iPEN_DOWN_POS);
return true;
}
@@ -237,6 +254,7 @@ bool loadConfigFromFile() {
bool saveConfigToFile() {
File file = SPIFFS.open(kConfigPath, "w");
if (!file) {
Log("SPIFFS open write failed");
return false;
}
@@ -250,7 +268,11 @@ bool saveConfigToFile() {
}
bool ok = serializeJsonPretty(doc, file) > 0;
file.flush();
file.close();
if (!ok) {
Log("serializeJsonPretty failed");
}
return ok;
}
@@ -324,7 +346,7 @@ void startWebInterface() {
server.on("/api/config", HTTP_GET, handleGetConfig);
server.on("/api/config", HTTP_POST, handlePostConfig);
server.on("/api/logs", HTTP_GET, handleGetLogs);
server.onNotFound(handleRoot);
server.onNotFound(handleNotFound);
server.begin();
}

View File

@@ -1,9 +1,9 @@
#include "EggDuino.h"
void queryPen() {
void queryPen()
{
char state;
if (penState==penUpPos)
if (penState == g_iPEN_UP_POS)
state = '1';
else
state = '0';
@@ -11,22 +11,26 @@ void queryPen() {
sendAck();
}
void queryButton() {
void queryButton()
{
Serial.print(String(prgButtonState) + "\r\n");
sendAck();
prgButtonState = 0;
}
void queryLayer() {
void queryLayer()
{
Serial.print(String(layer) + "\r\n");
sendAck();
}
void setLayer() {
void setLayer()
{
uint32_t value = 0;
char *arg1;
arg1 = SCmd.next();
if (arg1 != NULL) {
if (arg1 != NULL)
{
value = atoi(arg1);
layer = value;
sendAck();
@@ -35,17 +39,19 @@ void setLayer() {
sendError();
}
void queryNodeCount() {
void queryNodeCount()
{
Serial.print(String(nodeCount) + "\r\n");
sendAck();
}
void setNodeCount() {
void setNodeCount()
{
uint32_t value = 0;
char *arg1;
arg1 = SCmd.next();
if (arg1 != NULL) {
if (arg1 != NULL)
{
value = atoi(arg1);
nodeCount = value;
sendAck();
@@ -54,31 +60,36 @@ void setNodeCount() {
sendError();
}
void nodeCountIncrement() {
void nodeCountIncrement()
{
nodeCount = nodeCount++;
sendAck();
}
void nodeCountDecrement() {
void nodeCountDecrement()
{
nodeCount = nodeCount--;
sendAck();
}
void stepperMove() {
void stepperMove()
{
uint16_t duration = 0; // in ms
int penStepsEBB = 0; // Pen
int rotStepsEBB = 0; // Rot
moveToDestination();
if (!parseSMArgs(&duration, &penStepsEBB, &rotStepsEBB)) {
if (!parseSMArgs(&duration, &penStepsEBB, &rotStepsEBB))
{
sendError();
return;
}
sendAck();
if ( (penStepsEBB==0) && (rotStepsEBB==0) ) {
if ((penStepsEBB == 0) && (rotStepsEBB == 0))
{
delay(duration);
return;
}
@@ -86,25 +97,33 @@ void stepperMove() {
prepareMove(duration, penStepsEBB, rotStepsEBB);
}
void setPen(){
void setPen()
{
int cmd;
int value;
char *arg;
char cstrMsg[20];
moveToDestination();
arg = SCmd.next();
if (arg != NULL) {
if (arg != NULL)
{
cmd = atoi(arg);
switch (cmd) {
switch (cmd)
{
case 0:
penServo.write(penUpPos);
penState=penUpPos;
penServo.write(g_iPEN_UP_POS);
penState = g_iPEN_UP_POS;
sprintf(cstrMsg, "PEN down: %d", g_iPEN_UP_POS);
Log(cstrMsg);
break;
case 1:
penServo.write(penDownPos);
penState=penDownPos;
penServo.write(g_iPEN_DOWN_POS);
penState = g_iPEN_DOWN_POS;
sprintf(cstrMsg, "PEN up: %d", g_iPEN_DOWN_POS);
Log(cstrMsg);
break;
default:
@@ -113,12 +132,14 @@ void setPen(){
}
char *val;
val = SCmd.next();
if (val != NULL) {
if (val != NULL)
{
value = atoi(val);
sendAck();
delay(value);
}
if (val==NULL && arg !=NULL) {
if (val == NULL && arg != NULL)
{
sendAck();
delay(500);
}
@@ -127,7 +148,8 @@ void setPen(){
sendError();
}
void togglePen(){
void togglePen()
{
int value;
char *arg;
@@ -144,17 +166,22 @@ void togglePen(){
delay(value);
}
void doTogglePen() {
if (penState==penUpPos) {
penServo.write(penDownPos);
penState=penDownPos;
} else {
penServo.write(penUpPos);
penState=penUpPos;
void doTogglePen()
{
if (penState == g_iPEN_UP_POS)
{
penServo.write(g_iPEN_DOWN_POS);
penState = g_iPEN_DOWN_POS;
}
else
{
penServo.write(g_iPEN_UP_POS);
penState = g_iPEN_UP_POS;
}
}
void enableMotors(){
void enableMotors()
{
int cmd;
int value;
char *arg;
@@ -166,12 +193,16 @@ void enableMotors(){
if (val != NULL)
value = atoi(val);
// values parsed
if ((arg != NULL) && (val == NULL)){
switch (cmd) {
case 0: motorsOff();
if ((arg != NULL) && (val == NULL))
{
switch (cmd)
{
case 0:
motorsOff();
sendAck();
break;
case 1: motorsOn();
case 1:
motorsOn();
sendAck();
break;
default:
@@ -179,12 +210,16 @@ void enableMotors(){
}
}
// the following implementaion is a little bit cheated, because i did not know, how to implement different values for first and second argument.
if ((arg != NULL) && (val != NULL)){
switch (value) {
case 0: motorsOff();
if ((arg != NULL) && (val != NULL))
{
switch (value)
{
case 0:
motorsOff();
sendAck();
break;
case 1: motorsOn();
case 1:
motorsOn();
sendAck();
break;
default:
@@ -193,7 +228,8 @@ void enableMotors(){
}
}
void stepperModeConfigure(){
void stepperModeConfigure()
{
int cmd;
int value;
char *arg;
@@ -204,13 +240,19 @@ void stepperModeConfigure(){
val = SCmd.next();
if (val != NULL)
value = atoi(val);
if ((arg != NULL) && (val != NULL)){
switch (cmd) {
case 4: penDownPos= (int) ((float) (value-6000)/(float) 133.3); // transformation from EBB to PWM-Servo
if ((arg != NULL) && (val != NULL))
{
switch (cmd)
{
case 4:
g_iPEN_DOWN_POS = (int)((float)(value - 6000) / (float)133.3); // transformation from EBB to PWM-Servo
Log(String("SC set PEN_DOWN_POS -> ") + g_iPEN_DOWN_POS + " (raw " + value + ")");
storePenDownPosInEE();
sendAck();
break;
case 5: penUpPos= (int)((float) (value-6000)/(float) 133.3); // transformation from EBB to PWM-Servo
case 5:
g_iPEN_UP_POS = (int)((float)(value - 6000) / (float)133.3); // transformation from EBB to PWM-Servo
Log(String("SC set PEN_UP_POS -> ") + g_iPEN_UP_POS + " (raw " + value + ")");
storePenUpPosInEE();
sendAck();
break;
@@ -220,10 +262,12 @@ void stepperModeConfigure(){
case 7: // rotMax=value; ignored
sendAck();
break;
case 11: servoRateUp=value;
case 11:
servoRateUp = value;
sendAck();
break;
case 12: servoRateDown=value;
case 12:
servoRateDown = value;
sendAck();
break;
default:
@@ -232,20 +276,24 @@ void stepperModeConfigure(){
}
}
void sendVersion(){
void sendVersion()
{
Serial.print(initSting);
Serial.print("\r\n");
}
void unrecognized(const char *command){
void unrecognized(const char *command)
{
sendError();
}
void ignore(){
void ignore()
{
sendAck();
}
void makeComInterface(){
void makeComInterface()
{
SCmd.addCommand("v", sendVersion);
SCmd.addCommand("EM", enableMotors);
SCmd.addCommand("SC", stepperModeConfigure);

View File

@@ -4,10 +4,10 @@ void initHardware()
{
if (!initConfigStore())
{
penUpPos = 5;
penDownPos = 20;
g_iPEN_UP_POS = 5;
g_iPEN_DOWN_POS = 20;
}
penState = penUpPos;
penState = g_iPEN_UP_POS;
g_stepEngine.init();
g_pStepperRotate = g_stepEngine.stepperConnectToPin(step1);

View File

@@ -52,13 +52,13 @@ Button motorsToggle(motorsButton, toggleMotors);
// Variables... be careful, by messing around here, everything has a reason and crossrelations...
int penMin = 0;
int penMax = 0;
int penUpPos = 5; // can be overwritten from EBB-Command SC
int penDownPos = 20; // can be overwritten from EBB-Command SC
int g_iPEN_UP_POS = 5; // can be overwritten from EBB-Command SC
int g_iPEN_DOWN_POS = 20; // can be overwritten from EBB-Command SC
int servoRateUp = 0; // from EBB-Protocol not implemented on machine-side
int servoRateDown = 0; // from EBB-Protocol not implemented on machine-side
long rotStepError = 0;
long penStepError = 0;
int penState = penUpPos;
int penState = g_iPEN_UP_POS;
uint32_t nodeCount = 0;
unsigned int layer = 0;
boolean prgButtonState = 0;