Meine Aufgabenstellung lautet:
In einem Drainageschacht sammelt sich Wasser. Es stehen zwei Pumpen zur Verfügung. Immer wenn ein gewisser Pegel überschritten wird, soll eine Pumpe starten (immer die „andere“, also abwechselnd). Bei einem Minimalpegel wird die Pumpe wieder gestoppt. Steigt der Pegel über einen Alarmpegel sollen beide Pumpen gestartet werden.
Wählen Sie geeignete Komponenten aus, bauen Sie diese entsprechend auf und programmieren Sie ein Steuerungsprogramm dafür.
Ich habe folgendes Programm geschrieben, es kompiliert:
Doch als Auslastungswert wird immer der Wert meines am Anfang bei #define festgelegten Ausgangs mit 100 multipliziert und ausgegeben, obwohl es überhaupt nichts damit zu tun hat.
P.S.: Die Pumpen können nur entweder 0 oder 100 Prozent leisten, keine Zwischenstufen.
Hier habe ich noch ein Programm verfasst, es ist ähnlich, kompiliert aber nicht:
In einem Drainageschacht sammelt sich Wasser. Es stehen zwei Pumpen zur Verfügung. Immer wenn ein gewisser Pegel überschritten wird, soll eine Pumpe starten (immer die „andere“, also abwechselnd). Bei einem Minimalpegel wird die Pumpe wieder gestoppt. Steigt der Pegel über einen Alarmpegel sollen beide Pumpen gestartet werden.
Wählen Sie geeignete Komponenten aus, bauen Sie diese entsprechend auf und programmieren Sie ein Steuerungsprogramm dafür.
Ich habe folgendes Programm geschrieben, es kompiliert:
C++:
#define P1 1
#define P2 1
#define TIGGER_PIN 2
#define ECHO_PIN 3
int oldbut = 1;
int Durchlauf = 1;
unsigned long get_sensor()
{
digitalWrite(TIGGER_PIN, LOW);
delayMicroseconds(2);
digitalWrite(TIGGER_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TIGGER_PIN, LOW);
delayMicroseconds(2); //Schall wird ausgeschickt
return pulseIn(ECHO_PIN, HIGH, 1000000L); //Warte, bis Schall zurückkommt
}
void setup() {
Serial.begin(9600);
pinMode(P1, OUTPUT); //definiere Pumpe 1 als Ausgang
pinMode(P2, OUTPUT); //definiere Pumpe 2 als Ausgang
pinMode(TIGGER_PIN, OUTPUT); //definiere Lautsprecher als Ausgang
pinMode(ECHO_PIN, INPUT); //definiere Mikrophon als Eingang
}
void loop() {
unsigned long sensor = get_sensor();
int pegel = (sensor / 2) * 0.3432;
int but = !digitalRead(pegel);
int AZ2 = 100; /**Einschaltpegel definieren**/
int Min = 200; /**Minimalen Pegel definieren, bei dem sich die Pumpe(n) ausschalten**/
int AZ5 = 70; /**Alarmpegel definieren, bei dem sich beide Pumpen einschalten!**/
if (but == 1 && oldbut == 0) { /**Wenn der Taster gedrückt wird, dann noch einen Durchlauf**/
Durchlauf++;
}
if (but == 1 && Durchlauf % 2 == 0) { /** Wenn Taster gedrückt wird, und der Rest= 0 ist, wird die LED heller**/
if (pegel < AZ2 && pegel > AZ5)
{
do { /** LED wird heller, solange die Zahl kleiner als 255 ist.**/
P1 == 1;
} while (pegel < AZ2);
if (pegel < AZ5)
{ do {
P1 == 1;
P2 == 1;
} while (pegel < AZ5);
}
else if (pegel > AZ2)
{
P1 == 0;
P2 == 0;
}
}
}
else if (but == 1 && Durchlauf % 2 == 1) {
if (pegel < AZ2 && pegel > AZ5)
{ do {
P2 == 1;
} while (pegel < AZ2);
if (pegel < AZ5)
{ do {
P1 == 1;
P2 == 1;
} while (pegel < AZ5);
}
else if (pegel > AZ2)
{
P1 == 0;
P2 == 0;
}
}
}
oldbut = but;
Serial.print("Auslastung Pumpe 1: ");
Serial.println(float(P1) * 100) + Serial.print("%");
Serial.print("Auslastung Pumpe 2: ");
Serial.println(float(P2) * 100) + Serial.print("%");
Doch als Auslastungswert wird immer der Wert meines am Anfang bei #define festgelegten Ausgangs mit 100 multipliziert und ausgegeben, obwohl es überhaupt nichts damit zu tun hat.
P.S.: Die Pumpen können nur entweder 0 oder 100 Prozent leisten, keine Zwischenstufen.
Hier habe ich noch ein Programm verfasst, es ist ähnlich, kompiliert aber nicht:
C++:
#define P1 1
#define P2 1
#define TIGGER_PIN 2
#define ECHO_PIN 3
int oldbut = 1;
int Durchlauf = 1;
unsigned long get_sensor()
{
digitalWrite(TIGGER_PIN, LOW);
delayMicroseconds(2);
digitalWrite(TIGGER_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TIGGER_PIN, LOW);
delayMicroseconds(2); //Schall wird ausgeschickt
return pulseIn(ECHO_PIN, HIGH, 1000000L); //Warte, bis Schall zurückkommt
}
void setup() {
Serial.begin(9600);
pinMode(P1, OUTPUT); //definiere Pumpe 1 als Ausgang
pinMode(P2, OUTPUT); //definiere Pumpe 2 als Ausgang
pinMode(TIGGER_PIN, OUTPUT); //definiere Lautsprecher als Ausgang
pinMode(ECHO_PIN, INPUT); //definiere Mikrophon als Eingang
}
void loop() {
unsigned long sensor = get_sensor();
int pegel = (sensor / 2) * 0.3432;
int but = !digitalRead(pegel);
int AZ2 = 100; /**Einschaltpegel definieren**/
int Min = 200; /**Minimalen Pegel definieren, bei dem sich die Pumpe(n) ausschalten**/
int AZ5 = 70; /**Alarmpegel definieren, bei dem sich beide Pumpen einschalten!**/
if (but == 1 && oldbut == 0) { /**Wenn der Taster gedrückt wird, dann noch einen Durchlauf**/
Durchlauf++;
}
if (pegel < AZ2 && pegel > AZ5 && Durchlauf % 2 == 0) { /** Wenn Taster gedrückt wird, und der Rest= 0 ist, wird die LED heller**/
if (pegel < AZ2 && pegel > AZ5)
{
do { /** LED wird heller, solange die Zahl kleiner als 255 ist.**/
P1 == 1;
}while(pegel < AZ2);
} else if(pegel > AZ2)
{
P1 == 0;
P2 == 0;
}
}
else if (pegel < AZ2 && pegel > AZ5 && Durchlauf % 2 == 1) {
if (pegel < AZ2 && pegel > AZ5)
{ do {
P2 == 1;
} while (pegel < AZ2);
else if (pegel > AZ2)
{
P1 == 0;
P2 == 0;
}
}
}
else if(pegel < AZ5)
{ do {
P1 == 1;
P2 == 1;
} while (pegel < AZ5);
}
else (pegel < AZ5)
{ do {
P1 == 1;
P2 == 1;
} while (pegel < AZ5);
}
oldbut = but;
Serial.print("Auslastung Pumpe 1: ");
Serial.println(float(P1) * 100) + Serial.print("%");
Serial.print("Auslastung Pumpe 2: ");
Serial.println(float(P2) * 100) + Serial.print("%");
}
}
Zuletzt bearbeitet von einem Moderator: