Hallo,
aktuell arbeite ich an einem Projekt, welches mich seit einiger ZEit beschäftigt.
Ich baue ein Gerät, welches die Zeit vom öffnen eines Ventils bis zu dessen Verschluss misst.
Dabei gibt es folgende Bedingungen:
Situation 1: Schalter A (NC=Normally Closed) geschlossen, Schalter B (NO = Normally Open) ist offen ==> Begrüßungstext auf Stoppuhrdisplay
Situation 2: Schalter A offen, Schalter B offen ==> Stoppuhr startet, LED geht an
Situation 3: Schalter A offen, Schalter B geschlossen ==> Stoppuhr läuft weiter
Situation 4a: Schalter A geschlossen, Schalter B offen ==> Stoppuhr beendet, Resultat wird angezeigt
Situation 4b: Schalter A geschlossen, Schalter B war NICHT geschlossen ==> Anzeige "ungültig"
Diese Abfolge ist sozusagen logisch aufeinander folgend. Situation 3 dient nur dazu um zu verifizieren, dass das Ventil auch ganz geöffnet war.
Nun die Frage: Egal wie ich es drehe und wende, ich bekomme es nicht hin. Habe es mit verschiedenen Optionen probiert. Hat jemand eine Idee für mich, oder ist die Logik einfach nur zu wild?
Im folgenden mein Code:
//OLED Bibliotheken
#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels
#define OLED_RESET 4 // not used / nicht genutzt bei diesem Display
Adafruit_SSD1306 display(OLED_RESET);
//Button INT
int ledPin1 = 10;
int buttonApin = 9;
int buttonBpin = 8;
int buttonState1 = 0;
int lastButtonState1 = 0;
int buttonState2 = 0;
int lastButtonState2 = 0;
//Stoppuhr Init
int milisec;
int seconds;
int minutes;
byte leds = 0;
unsigned long start, finished, elapsed;
void setup() {
// OLED SETUP
// initialize with the I2C addr 0x3C / mit I2C-Adresse 0x3c initialisieren
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
display.clearDisplay();
display.setTextSize(2);
display.setTextColor(WHITE);
display.setCursor(15, 1);
display.print("Trichter");
display.setCursor(18, 16);
display.print("2 0 1 9");
display.display();
// random start seed / zufälligen Startwert für Random-Funtionen initialisieren
randomSeed(analogRead(0));
// BUTTON SETUP
pinMode(ledPin1, OUTPUT);
pinMode(buttonApin, INPUT_PULLUP); //9
pinMode(buttonBpin, INPUT_PULLUP); //8
}
#define DRAW_DELAY 118
#define D_NUM 47
int i;
void displayResult() {
int s, ms;
unsigned long over;
elapsed = finished - start;
over = elapsed % 3600000;
over = over % 60000;
s = int(over / 1000);
ms = over % 1000;
display.print(s);
display.print(",");
display.print(ms);
display.print("s");
display.display();
}
void loop() {
display.clearDisplay();
buttonState1 = digitalRead(buttonApin);
buttonState2 = digitalRead(buttonBpin);
if (buttonState1 == LOW && buttonState2 == HIGH )
{ start = millis();
display.invertDisplay(true);
display.clearDisplay();
display.setTextSize(1);
display.setCursor(20, 1);
display.print("TEXTbla");
display.setCursor(40, 15);
display.setTextSize(2);
display.print("GO!");
display.display();
digitalWrite(ledPin1, HIGH);
lastButtonState1 = buttonState1;
}
if (buttonState2 == LOW)
{ lastButtonState2 = buttonState2;
}
if (buttonState1 == HIGH && ButtonState2 == HIGH && lastButtonState1 == LOW && lastButtonState2 == LOW)
{
display.invertDisplay(false);
finished = millis();
delay(100);
display.setCursor(1, 4);
display.setTextSize(3);
displayResult();
display.display();
digitalWrite(ledPin1, LOW);
}
}
Vielen Dank für etwaige Hilfe