INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 1 Bewertungen - 1 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
PZS Problem mit Ausgang schalten
28.06.2019, 15:53
Beitrag #1
PZS Problem mit Ausgang schalten
Hallo zusammen,
nach etwas längerer Pause kann ich wieder an meinen Programm für eine Pendelzugsteuerung arbeiten (klingt ja komisch "arbeiten").
Grundfunktionen laufen einwandfreu, Pendelsimulation mit Anzeige der einzelnen High/ Low ansteuerungen via LEDs klappt.
Dabei ist mir etwas aufgefallen:
in einen "Abschnitt" kann ich einen Ausgang nicht wie gedacht einschalten.
Obwohl, einschalten scheint ja zu gehen, aber die vorgesehene Einschaltdauer wird nicht erreicht.
Problemkind wird in den Zeilen 115, 149 und 157 geschaltet.
Vielleicht erkennt ja jemand den flaschen Fähler und zeigt mir auf, wie man es richtig macht.
Danke und einen schönen Grillabend!

der Code:

Code:
/*Pendelzugsteuerung
Ziel Y-Strecke im Pendelbetrieb
Aktuell Hin- und Rückfahrt A-B/ B-A
Version V5.2
HSQ1 -HSQ3= Hallsensoren
Staus_x dient der Verfolgung der einzelnen Schritte
Taster als Eventual Position
*/
//***** Angaben zum Entprellen*****
  #include <Bounce2.h>// Taster entprellen
  Bounce debouncer = Bounce();
  
//***** Konstanzen Zuordnung der Taster/ Hallsensoren*****

const int Taster = 2;
const int HSQ1 = 3;
const int HSQ2 = 4;
const int HSQ3 = 5;

boolean ausgeloest1 = false;
boolean ausgeloest2 = false;
boolean ausgeloest3 = false;
boolean ausgeloest4 = false;
//*************** Einschaltverzögerung *******

const uint32_t Wartezeit_1 = 5000; // xx sec. warten bevor Einschaltung
const uint32_t Ein_1 = 5000;       // xx sec. Einschaltdauer
uint32_t Startzeit_1,Einzeit_1;    //

const uint32_t Wartezeit_2 = 5000; // xx sec. warten bevor Einschaltung
const uint32_t Ein_2 = 5000;       // xx sec. Einschaltdauer
uint32_t Startzeit_2,Einzeit_2;    //

const uint32_t Wartezeit_3 = 5000; // xx sec. warten bevor Einschaltung
const uint32_t Ein_3 = 5000;       // xx sec. Einschaltdauer
uint32_t Startzeit_3,Einzeit_3;    //
//***** Konstanten 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_Ger1 = 11;
const int Relais_Fahrstrom_Hin = 12;
const int Relais_Fahrstrom_Rueck = 13;
const int Relais_Fahrstrom= 14;
const int Relais_Weiche_Ger2= 15;
const int TestC=16;
//***** Variablen der Startzeiten*****

unsigned long Startzeit1 =0;
unsigned long Startzeit2 =0;
unsigned long Startzeit3 =0;
unsigned long Startzeit4 =0;
unsigned long Startzeit5 =0;
unsigned long Startzeit6 =0;
unsigned long Startzeit7= 0;
  
//************************************

//*****Beginn Setup Bereich***********
void setup()
{
Serial.begin(9600);
  
//*****Pin Modus Input Hallsensoren/ Taster******

pinMode(Taster,INPUT); // Pin2 Reserve für spätere Funktion
pinMode(HSQ1,INPUT);   // Pin 3
pinMode(HSQ2,INPUT);   // Pin 4
pinMode(HSQ3,INPUT);   // Pin 5

//*****Pin Modus Output 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_Ger1,OUTPUT); // Pin 11
pinMode(Relais_Fahrstrom_Hin,OUTPUT);  // Pin 12
pinMode(Relais_Fahrstrom_Rueck,OUTPUT);   // Pin 13
pinMode(Relais_Fahrstrom,OUTPUT);      // Pin 14
pinMode(Relais_Weiche_Ger2, OUTPUT);
pinMode (TestC,OUTPUT);
//***** Entprellen vom Taster*****
debouncer.interval(5);
}
//*****Ende Setup Bereich*****
//*****Beginn Loop Bereich*****    
void loop()
{
static uint8_t status1 = 0;
static uint8_t status2 = 0;
static uint8_t status3 = 0;
uint32_t aktuelle_Millis = millis();

//*****Abfrage Hallsensoren HSQ1**********
//*****Fahrt von A nach B*******
Serial.println(status1);
if ((digitalRead(HSQ1)==LOW)&& (ausgeloest1==false)&&(status1==0))
{
  ausgeloest1= true;
  digitalWrite(Relais_Fahrstrom,LOW);
  digitalWrite(Relais_Fahrstrom_Hin,LOW);
  
//*****Abschalten Rückfahrt*****definierten Zustand herstellen

  digitalWrite(Relais_HSQ1,HIGH);
  digitalWrite( Relais_Fahrstrom,LOW);
  digitalWrite(Relais_Fahrstrom_Rueck,LOW);
  ausgeloest2= false;
  
//*****vorbereiten Abfahrt*****

  digitalWrite(Relais_Weiche_Ger1,HIGH); // Problem
  digitalWrite(Relais_Fahrstrom_Hin,HIGH);
  Startzeit1=millis();
}
else if (millis()-Startzeit1>=2000)
  {
   digitalWrite(Relais_HSQ1,LOW);
   digitalWrite(Relais_Weiche_Ger1,LOW);        
  }
if (status1 == 0 && !digitalRead(HSQ1))
{
  Startzeit_1=aktuelle_Millis;
  status1 = 1;
}
if (status1 == 1 && aktuelle_Millis - Startzeit_1 >= Wartezeit_1)
  {
   Einzeit_1 = aktuelle_Millis;
   digitalWrite(Relais_Fahrstrom,HIGH);
   status1 = 2;
  }
//*****Ankunft B*****    
//******Auschalten********
if ((digitalRead(HSQ2)==LOW)&& (ausgeloest2==false))
{
  ausgeloest2= true;      
  digitalWrite(Relais_Fahrstrom,LOW);
  digitalWrite(Relais_Fahrstrom_Hin,LOW);
  status1 = 3;
}
//*****Rückfahrt ******
//*****Fahrt von B nach A*****
if (status1==3)
{
  digitalWrite(Relais_HSQ2,HIGH);
  digitalWrite(Relais_Weiche_Ger1,HIGH); // Problem!
  digitalWrite(Relais_Fahrstrom_Rueck,HIGH);
  digitalWrite(Relais_Weiche_Ger2,HIGH);
  Startzeit2=millis();  
}
else if (millis()-Startzeit2>=2000)
{
  digitalWrite(Relais_HSQ2,LOW);
  digitalWrite(Relais_Weiche_Ger1,LOW);// Problem!
  digitalWrite(Relais_Weiche_Ger2,LOW);
}
if (status1 == 3 && !digitalRead(HSQ2))
{
  Startzeit_2=aktuelle_Millis;
  status1 = 4;
}
if (status1 == 4 && aktuelle_Millis - Startzeit_2 >= Wartezeit_2)
{
  Einzeit_2 = aktuelle_Millis;
  digitalWrite(Relais_Fahrstrom,HIGH);
ausgeloest1=false;
  status1 = 0;
}  


} // Ende Loop
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  16er Relay schalten funktioniert nur bis 8 Otter 4 558 11.03.2019 16:04
Letzter Beitrag: Otter
  Problem mit UniversalTelegramBot edi_ying 8 690 09.02.2019 15:11
Letzter Beitrag: Tommy56
Question (Denk)Problem mit char array[] ? ManfredH 3 460 05.02.2019 12:01
Letzter Beitrag: ManfredH
  USB Problem mit Linux HeikeF 5 594 03.02.2019 17:04
Letzter Beitrag: Tommy56
  Drehgeber wie Iduino SE055 - Software- oder Hardware-Problem? Arduinero 12 803 24.01.2019 13:55
Letzter Beitrag: Bitklopfer
  [Anfänger] Char Array Problem fp.blues2013 1 402 07.01.2019 13:06
Letzter Beitrag: Tommy56
  Problem beim Hochladen flint74 8 1.050 26.12.2018 19:26
Letzter Beitrag: Tommy56
  Problem mit Displayanzeige LCD2004 bzw. nicht Richtig magnum1795 39 2.834 18.12.2018 08:15
Letzter Beitrag: magnum1795
  Anfänger mit Problem/Gärtenbewässerungsprojekt Bommes 13 1.492 13.11.2018 20:17
Letzter Beitrag: fraju
  Ethernet Modul Enc28j60 Pin13 LED Schalten BennIY 17 5.067 26.09.2018 16:57
Letzter Beitrag: Tommy56

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste