guten Abend zusammen,
gibt es bekannte Schwierigkeiten bei derSwitch Case Anwendung und Millis()?
Prbier mich grad aus, ob ich bereits bekannte und erprobte Sketchteile auch in anderen Sketchen nutzen kann.
Bin dabei, eine primitive Pendelzugsteuerung mit 3 Halte/ Wendepunkte zu entwickeln.
Prizip: Überfahren eines Hallsensores löst eine zeitlich begrenzte Aktion aus (i.e. Ausgang 2 sec. High).
Allerdings stecke ich bereits beim ausschalten nach x Sec. fest.
da gibt es doch bestimmt den ein oderen anderen Lösungsschubser.
Der (exemplarisch) Problembereich beginnt bei Case 1 und endet beim Break.
Löse ich einen , löse ich bestimmt alle (hoffe ich).
alle anderen Dinge wie Anzeige im LCD Display funktionieren, Case Auswertung funktioniert.
Danke für's weiterhelfen.
//***** Angaben zum Display*****
#include <Bounce2.h>// Taster entprellen
#include <Wire.h> // Verdrahtung LCD Display
#include <LiquidCrystal_I2C.h> // Ansteuerung LCD Display
LiquidCrystal_I2C lcd(0x27,20,4); // Datenleitungen an A4/ A5
//***** Angaben zum Entprellen*****
Bounce debouncer = Bounce();
//***** Konstanzen Zuordnung der Taster/ Hallsensoren*****
const int HSQ1 = 2;
const int HSQ2 = 3;
const int HSQ3 = 4;
const int Taster_Start= 5;
//***** Konstanzen Zuordnung der Ansteuerung Relais*****
const int Relais_HSQ1 = 7;
const int Relais_HSQ2 = 8;
const int Relais_HSQ3 = 9;
const int Relais_Weiche_Abz = 10;
const int Relais_Weiche_Ger = 11;
const int Relais_Start= 12;
const int Relais_Fahrstrom = 13;
const int Relais_Umpolung = 14;
//***** Variablen der Startzeiten*****
unsigned long Startzeit1 =0;
unsigned long Startzeit2 =0;
unsigned long Startzeit3 =0;
unsigned long Startzeit4 =0;
unsigned long Wecker = 3000;
//*****Beginn Setup Bereich*****
void setup()
// Pin Modus Ausgang Relais
{
pinMode(Relais_HSQ1,OUTPUT); // Pin 7
pinMode(Relais_HSQ2,OUTPUT); // Pin 8
pinMode(Relais_HSQ3,OUTPUT); // Pin 9
pinMode(Relais_Weiche_Abz,OUTPUT); // Pin 10
pinMode(Relais_Weiche_Ger,OUTPUT); // Pin 11
pinMode(Relais_Start,OUTPUT); // Pin 12
pinMode(Relais_Fahrstrom,OUTPUT); // Pin 13
pinMode(Relais_Umpolung,OUTPUT); // Pin 14
// Pin Modus Hallsensoren/ Taster
pinMode(HSQ1,INPUT); // Pin 2
pinMode(HSQ2,INPUT); // Pin 3
pinMode(HSQ3,INPUT); // Pin 4
pinMode(Taster_Start,INPUT); // Pin 5
// Entprellen vom Taster
debouncer.attach(Taster_Start);
debouncer.interval(5);
// Initalisierung LCD Display
lcd.init();
lcd.backlight();
}
//***** Ende Setup Bereich*****
//*****Beginn Loop Bereich*****
void loop() {
int Eingabe = 0; // Variable Switch Case Auswertung
//***** Taster entprellen und auswerten*****
debouncer.update();
int value = debouncer.read();
if ( value == LOW) {
digitalWrite(Relais_Start,HIGH );
}
else {
digitalWrite(Relais_Start, HIGH );
Eingabe = 4;// Änderung der Variable
}
//*****Abfrage Hallsensoren HSQ1- HSQ3*****
if (digitalRead(HSQ1)==HIGH){
Eingabe = 1;// Änderung der Variable
}
if (digitalRead(HSQ2)==HIGH){
Eingabe = 2;// Änderung der Variable
}
if (digitalRead(HSQ3)==HIGH){
Eingabe = 3;// Änderung der Variabble
}
//*****Beginn Switch Case*****
switch (Eingabe){
case 1://***** Abfrage HSQ1 *****
if (digitalRead(HSQ1)==HIGH){
digitalWrite(Relais_HSQ1,HIGH);
lcd.backlight();
lcd.clear();
lcd.setCursor(0,0); // Cursorpos 0, Zeile 1
lcd.print(F("Hallsen. HSQ1 aktiv"));
Startzeit1=millis();
}
else if (millis()-Startzeit1>=2000){
digitalWrite(Relais_HSQ1,LOW);
}
break;
case 2://***** Abfrage HSQ2 *****
if (digitalRead(HSQ2)==HIGH){
digitalWrite(Relais_HSQ2,HIGH);
lcd.backlight();
lcd.clear();
lcd.setCursor(0,1); // Cursorpos 1, Zeile 2
lcd.print(F("Hallsen. HSQ2 aktiv"));
Startzeit2=millis();
}
else if (millis()-Startzeit2>=2000){
digitalWrite(Relais_HSQ2,LOW);
}
break;
case 3:////***** Abfrage HSQ3 *****
if (digitalRead(HSQ3)==HIGH){
digitalWrite(Relais_HSQ3,HIGH);
lcd.backlight();
lcd.clear();
lcd.setCursor(0,2); // Cursorpos 1, Zeile 2
lcd.print(F("Hallsen. HSQ3 aktiv"));
Startzeit2=millis();
}
else if (millis()-Startzeit2>=2000){
digitalWrite(Relais_HSQ2,LOW);
}
break;
case 4:////***** Abfrage Taster *****
if (digitalRead(Taster_Start)==HIGH){
digitalWrite(Relais_Weiche_Ger,HIGH);
lcd.backlight();
lcd.clear();
lcd.setCursor(0,3); // Cursorpos 1, Zeile 2
lcd.print(F("Taster aktiv"));
Startzeit4=millis();
}
else if (millis()-Startzeit4>=5000){
digitalWrite(Relais_Weiche_Ger,LOW);
}
break;
default:;
}//***** Ende Switch Case
}//***** Ende Loop Bereich*****