Hallo zusammen,
ich habe ein Problem mit meinem aktuellen Projekt und hoffe, dass mir jemand weiterhelfen kann. Der folgende Code funktioniert grundsätzlich, aber es gibt ein seltsames Verhalten, das ich nicht erklären kann.
Wenn ich den Teil des Codes, der für die Ansteuerung der Ausgänge zuständig ist, komplett auskommentiere, funktioniert alles einwandfrei. In diesem Fall wird der Druck korrekt an das Display gesendet und angezeigt.
Kommentiere ich jedoch den Abschnitt zur Sensorauswertung aus, funktionieren die Ausgänge wie erwartet, aber natürlich werden keine Sensordaten verarbeitet und dementsprechend auch nicht ans Display gesendet.
Ich verstehe nicht, warum diese beiden Funktionen sich gegenseitig ausschließen. Hat jemand eine Idee, woran das liegen könnte?
#include <SoftwareSerial.h>
// Definieren der Pins für die Eingänge und Ausgänge
const int front_left_up = 15;
const int front_left_down = 19;
const int front_right_up = 29;
const int front_right_down = 6;
const int rear_left_up = 14;
const int rear_left_down = 18;
const int rear_right_up = 28;
const int rear_right_down = 7;
// Setze die Software-Serial Schnittstelle für das Nextion Display
SoftwareSerial nextion(2, 3); // RX, TX
// Drucksensor-Pins und Parameter
const int sensorPin = A1; // Anschluss des Drucksensors an den analogen Eingang A1
const float sensorMinVoltage = 0.5; // minimale Spannung des Sensors bei 0 Bar
const float sensorMaxVoltage = 4.5; // maximale Spannung des Sensors bei 13,7895 Bar
const float pressureMax = 13.7895; // maximaler Druck in Bar
String daten_display = "";
void setup() {
// Initialisiere die serielle Kommunikation zur Debugging
Serial.begin(9600);
// Initialisiere die serielle Kommunikation zum Nextion Display
nextion.begin(9600);
// Definieren der Eingänge und Ausgänge als Variable
pinMode(front_left_up, OUTPUT);
pinMode(front_left_down, OUTPUT);
pinMode(front_right_up, OUTPUT);
pinMode(front_right_down, OUTPUT);
pinMode(rear_left_up, OUTPUT);
pinMode(rear_left_down, OUTPUT);
pinMode(rear_right_up, OUTPUT);
pinMode(rear_right_down, OUTPUT);
}
void loop() {
// Drucksensor auslesen
int sensorValue = analogRead(sensorPin); // Analogwert vom Sensor lesen
float sensorVoltage = sensorValue * (5.0 / 1023.0); // Umwandlung des Analogwerts in Spannung
// Umrechnung der Spannung in Druck (Bar)
float pressure = (sensorVoltage - sensorMinVoltage) * (pressureMax / (sensorMaxVoltage - sensorMinVoltage));
// Sicherstellen, dass der Druck nicht unter 0 fällt
if (pressure < 0) {
pressure = 0;
}
// Druckwert als String formatieren
char pressureString[10];
dtostrf(pressure, 0, 1, pressureString); // Druckwert in String umwandeln
// Druckwert an das Nextion Display senden
nextion.print("t8.txt=\"");
nextion.print(pressureString);
nextion.print("\"");
nextion.write(0xff); nextion.write(0xff); nextion.write(0xff);
nextion.print("t9.txt=\"");
nextion.print(pressureString);
nextion.print("\"");
nextion.write(0xff); nextion.write(0xff); nextion.write(0xff);
nextion.print("t10.txt=\"");
nextion.print(pressureString);
nextion.print("\"");
nextion.write(0xff); nextion.write(0xff); nextion.write(0xff);
nextion.print("t11.txt=\"");
nextion.print(pressureString);
nextion.print("\"");
nextion.write(0xff); nextion.write(0xff); nextion.write(0xff);
delay(1000); // Eine Sekunde warten, bevor der nächste Messwert gelesen wird
// Display-Befehle auslesen
if (nextion.available() > 0) {
daten_display += char(nextion.read());
}
// Ansteuern der Magnetventile für vorne links
if (daten_display == "front_left_up_on") {
digitalWrite(front_left_up, HIGH);
Serial.println("Erhöhung des Drucks im vorderen linken Balg wird gestartet");
daten_display = "";
}
if (daten_display == "front_left_up_off") {
digitalWrite(front_left_up, LOW);
Serial.println("Erhöhung des Drucks im vorderen linken Balg wird gestoppt");
daten_display = "";
}
if (daten_display == "front_left_down_on") {
digitalWrite(front_left_down, HIGH);
Serial.println("Ablassen des Drucks im vorderen linken Balg wird gestartet");
daten_display = "";
}
if (daten_display == "front_left_down_off") {
digitalWrite(front_left_down, LOW);
Serial.println("Ablassen des Drucks im vorderen linken Balg wird gestoppt");
daten_display = "";
}
// Ansteuern der Magnetventile für vorne rechts
if (daten_display == "front_right_up_on") {
digitalWrite(front_right_up, HIGH);
Serial.println("Erhöhung des Drucks im vorderen rechten Balg wird gestartet");
daten_display = "";
}
if (daten_display == "front_right_up_off") {
digitalWrite(front_right_up, LOW);
Serial.println("Erhöhung des Drucks im vorderen rechten Balg wird gestoppt");
daten_display = "";
}
if (daten_display == "front_right_down_on") {
digitalWrite(front_right_down, HIGH);
Serial.println("Ablassen des Drucks im vorderen rechten Balg wird gestartet");
daten_display = "";
}
if (daten_display == "front_right_down_off") {
digitalWrite(front_right_down, LOW);
Serial.println("Ablassen des Drucks im vorderen rechten Balg wird gestoppt");
daten_display = "";
}
// Ansteuern der Magnetventile für die Vorderachse
if (daten_display == "front_axle_up_on") {
digitalWrite(front_left_up, HIGH);
digitalWrite(front_right_up, HIGH);
Serial.println("Erhöhung des Drucks in der Vorderachse wird gestartet");
daten_display = "";
}
if (daten_display == "front_axle_up_off") {
digitalWrite(front_left_up, LOW);
digitalWrite(front_right_up, LOW);
Serial.println("Erhöhung des Drucks in der Vorderachse wird gestoppt");
daten_display = "";
}
if (daten_display == "front_axle_down_on") {
digitalWrite(front_left_down, HIGH);
digitalWrite(front_right_down, HIGH);
Serial.println("Ablassen des Drucks in der Vorderachse wird gestartet");
daten_display = "";
}
if (daten_display == "front_axle_down_off") {
digitalWrite(front_left_down, LOW);
digitalWrite(front_right_down, LOW);
Serial.println("Ablassen des Drucks in der Vorderachse wird gestoppt");
daten_display = "";
}
// Ansteuern der Magnetventile für hinten links
if (daten_display == "rear_left_up_on") {
digitalWrite(rear_left_up, HIGH);
Serial.println("Erhöhung des Drucks im hinteren linken Balg wird gestartet");
daten_display = "";
}
if (daten_display == "rear_left_up_off") {
digitalWrite(rear_left_up, LOW);
Serial.println("Erhöhung des Drucks im hinteren linken Balg wird gestoppt");
daten_display = "";
}
if (daten_display == "rear_left_down_on") {
digitalWrite(rear_left_down, HIGH);
Serial.println("Ablassen des Drucks im hinteren linken Balg wird gestartet");
daten_display = "";
}
if (daten_display == "rear_left_down_off") {
digitalWrite(rear_left_down, LOW);
Serial.println("Ablassen des Drucks im hinteren linken Balg wird gestoppt");
daten_display = "";
}
// Ansteuern der Magnetventile für hinten rechts
if (daten_display == "rear_right_up_on") {
digitalWrite(rear_right_up, HIGH);
Serial.println("Erhöhung des Drucks im hinteren rechten Balg wird gestartet");
daten_display = "";
}
if (daten_display == "rear_right_up_off") {
digitalWrite(rear_right_up, LOW);
Serial.println("Erhöhung des Drucks im hinteren rechten Balg wird gestoppt");
daten_display = "";
}
if (daten_display == "rear_right_down_on") {
digitalWrite(rear_right_down, HIGH);
Serial.println("Ablassen des Drucks im hinteren rechten Balg wird gestartet");
daten_display = "";
}
if (daten_display == "rear_right_down_off") {
digitalWrite(rear_right_down, LOW);
Serial.println("Ablassen des Drucks im hinteren rechten Balg wird gestoppt");
daten_display = "";
}
// Ansteuern der Magnetventile für die Hinterachse
if (daten_display == "rear_axle_up_on") {
digitalWrite(rear_left_up, HIGH);
digitalWrite(rear_right_up, HIGH);
Serial.println("Erhöhung des Drucks in der Hinterachse wird gestartet");
daten_display = "";
}
if (daten_display == "rear_axle_up_off") {
digitalWrite(rear_left_up, LOW);
digitalWrite(rear_right_up, LOW);
Serial.println("Erhöhung des Drucks in der Hinterachse wird gestoppt");
daten_display = "";
}
if (daten_display == "rear_axle_down_on") {
digitalWrite(rear_left_down, HIGH);
digitalWrite(rear_right_down, HIGH);
Serial.println("Ablassen des Drucks in der Hinterachse wird gestartet");
daten_display = "";
}
if (daten_display == "rear_axle_down_off") {
digitalWrite(rear_left_down, LOW);
digitalWrite(rear_right_down, LOW);
Serial.println("Ablassen des Drucks in der Hinterachse wird gestoppt");
daten_display = "";
}
}