Hallo. Das Ergebnis bisher sieht schon sehr gut aus. Habe allerdings ein Problem, dass ich nicht ganz nachvollziehen kann. Zahl und t_ml sind alle als unsigned long deklariert. Beim Vergleich (t_ml >= (Zahl)) bricht die Schleife allerdings gleich beim ersten Durchlauf ab obwohl die Zahl 30 und t_ml 0 ist. Was habe ich falsch gemacht ?
Consoleninhalt:
13:38:10.876 -> 30
13:38:10.876 -> Zahl wird verarbeitet
13:38:11.890 -> Current flow: 0.0L/min Total: 0mL
13:38:11.938 -> Füllmenge erreicht
unsigned long Zahl;
char Data[5]; //Anzahl der max Ziffernzahl -1 in diesem Fall eine 4-stellige Zahl
int i; //Arbeitsvariable
unsigned long Tempo; // Startzeit für die Übertragung
int PINOUT = 8; // Pin 8 am Arduino festlegen
float cfactor = 5.0;
byte interrupt = 0;
byte sensorPin = 2;
byte pulseCount;
float flowRate;
unsigned int f_ml;
unsigned long t_ml;
unsigned long oldTime;
void setup()
{
Serial.begin(9600);
pinMode(PINOUT, OUTPUT); // Initialisieren des Ausgangs
digitalWrite(PINOUT, HIGH); // Initialisiere: Relais aus
pinMode(sensorPin, INPUT);
digitalWrite(sensorPin, HIGH);
attachInterrupt(interrupt, pulseCounter, FALLING);
}
void loop() {
do {
if (Serial.available()) {
Data[i] = Serial.read(); //liest die Zeichen nacheinander ein
i++;
}
if (i < 1)Tempo = millis(); // Startzeit abspeichern
} while (i < 4 && (millis() - Tempo) < 500); // schleife solange nicht 4 Zeichen übertragenoder 0,5 Sekunden vorbei sind
Data[i] = 0; // Abschluß der Zeichenkette mit Null für die Umwandlung
Zahl = atoi(Data); // Umwandlung Zeichenkette zu
i = 0;
Serial.println(Zahl); // ausgabe der Zahl zu kontrolle
if (Zahl > 0) { // Testet, ob das Zeichen eine Zahl ist.
Serial.println("Zahl wird verarbeitet" );
digitalWrite(PINOUT, LOW); // Schaltet ein
delay(1000);
do {
if ((millis() - oldTime) > 1000)
{
int semic;
detachInterrupt(interrupt);
flowRate = ((1000.0 / (millis() - oldTime)) * pulseCount) / cfactor;
oldTime = millis();
f_ml = (flowRate / 60) * 1000;
t_ml += f_ml;
Serial.print("Current flow: ");
Serial.print(int(flowRate));
Serial.print(".");
semic = (flowRate - int(flowRate)) * 10;
Serial.print(semic, DEC) ;
Serial.print("L/min");
Serial.print(" Total: ");
Serial.print(t_ml);
Serial.println("mL");
pulseCount = 0;
attachInterrupt(interrupt, pulseCounter, FALLING);
}
} while (t_ml >= (Zahl));
Serial.println("Füllmenge erreicht");
digitalWrite(PINOUT, HIGH); // Schaltet aus
}
else {
Serial.println("Das Zeichen ist keine Zahl");
}
}
void pulseCounter()
{
pulseCount++;
}