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:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
ständiger Programmablauf ohne Funktion
21.11.2020, 15:22 (Dieser Beitrag wurde zuletzt bearbeitet: 21.11.2020 15:23 von AnjinSan.)
Beitrag #1
ständiger Programmablauf ohne Funktion
Hallo liebe Arduino Fans,
ein vermutlich banales Problem hindert mich am Weiterkommen.
Ziel ist es :
verzögertes kaskadierendes Einschalten von 5 x2 Ausgänge (Gruppe 1-5), nach Ablauf einer Zeit im "Rückwärtsgang" wieder ausschalten. Nach einer Wartezeit Programmablauf erneut starten.
Bisher funktioniert:
verzögert Einschalten der Gruppen (nacheinander mit entsprechner Wartezeit),
Ausschalten rückwärts (Gruppe 5-1).
Ein erneuter Ablauf findet nicht statt.
Zum Steuern des Ablaufes benutze ich eine Status Variable. Setze ich diese Variable nach(!) den gesamten Programmdurchlauf wieder auf den Anfangswert, gerät das System schwer durcheinander. Über hilfreiche Tipps würde ich mich sehr freuen.
liebe Grüsse
AnjinSan
hier der Sketch:

Code:
//
// Beleuchtung Lokschuppen
// kaskadierende Einschaltung von 5 Gruppen á 2 Lampen
// bei Arbeitsbeginn
//kaskadierende Ausschaltung der Lampen nach Arbeitsende
// Verlauf von Flügeltor nach hinten.
//
// Definition Konstanzen
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;    //
// Reihe 2
const uint32_t Wartezeit_2 = 8000; // xx sec. warten bevor Einschaltung
const uint32_t Ein_2 = 6000;       // xx sec. Einschaltdauer
uint32_t Startzeit_2,Einzeit_2;     //
// Reihe 3
const uint32_t Wartezeit_3 = 11000; // xx sec. warten bevor Einschaltung
const uint32_t Ein_3 = 7000;       // xx sec. Einschaltdauer
uint32_t Startzeit_3,Einzeit_3;     //
// Reihe 4
const uint32_t Wartezeit_4 = 14000; // xx sec. warten bevor Einschaltung
const uint32_t Ein_4= 8000;       // xx sec. Einschaltdauer
uint32_t Startzeit_4,Einzeit_4;     //
// Reihe 5
const uint32_t Wartezeit_5 = 17000; // xx sec. warten bevor Einschaltung
const uint32_t Ein_5 = 9000;       // xx sec. Einschaltdauer
uint32_t Startzeit_5,Einzeit_5;     //
//
//Zeit vor Wiedereinschalten
const uint32_t Wartezeit_6 = 20000; // xx sec. warten bevor Einschaltung
const uint32_t Ein_6 =10000;       // xx sec. Einschaltdauer
uint32_t Startzeit_6,Einzeit_6;     //
//
// Definition LEDs
//Gruppe 1
const int LED_2 = 2;
const int LED_3 = 3;
//Gruppe 2
const int LED_4 = 4;
const int LED_5 = 5;
//Grupp 3
const int LED_6 = 6;
const int LED_7 = 7;
// Gruppe 4
const int LED_8 = 8;
const int LED_9 = 9;
// Gruppe 5
const int LED_10 = 10;
const int LED_11 = 11;
const int LED_12 = 12;// Testled
//
void setup()
{
//PIN Modus
pinMode(2,OUTPUT);
pinMode(3,OUTPUT);
pinMode(4,OUTPUT);
pinMode(5,OUTPUT);
pinMode(6,OUTPUT);
pinMode(7,OUTPUT);
pinMode(8,OUTPUT);
pinMode(9,OUTPUT);
pinMode(10,OUTPUT);
pinMode(11,OUTPUT);
pinMode(12,OUTPUT);// Testled
}
//
void loop()
{
static uint8_t status = 1;  
uint32_t aktuelle_Millis = millis();
//
// Einschalten Gruppe 1
if (status == 1 && aktuelle_Millis - Startzeit_1 >= Wartezeit_1)
    {
    Einzeit_1 = aktuelle_Millis;
    digitalWrite(2, HIGH);
    digitalWrite(3, HIGH);
    digitalWrite(12, LOW);
    status = 2;
    }
//
// Einschalten Gruppe 2
if (status == 2 && aktuelle_Millis - Startzeit_2 >= Wartezeit_2)
    {
    Einzeit_2 = aktuelle_Millis;
    digitalWrite(4, HIGH);
    digitalWrite(5, HIGH);
  status = 3;
    }
// Einschalten Gruppe 3
if (status == 3 && aktuelle_Millis - Startzeit_3 >= Wartezeit_3)
    {
    Einzeit_3 = aktuelle_Millis;
    digitalWrite(6, HIGH);
    digitalWrite(7, HIGH);
    status = 4;
    }
//
// Einschalten Gruppe 4
if (status == 4 && aktuelle_Millis - Startzeit_4 >= Wartezeit_4)
    {
    Einzeit_4 = aktuelle_Millis;
    digitalWrite(8, HIGH);
    digitalWrite(9, HIGH);
    status = 5;
    }
//
// Einschalten Gruppe 5
if (status == 5 && aktuelle_Millis - Startzeit_5 >= Wartezeit_5)
    {
    Einzeit_5 = aktuelle_Millis;
    digitalWrite(10, HIGH);
    digitalWrite(11, HIGH);
    status = 6;
    }
//
// Ausschalten Gruppe 1
   if (status == 6 && aktuelle_Millis -Einzeit_1 >= Ein_1) // Ausschalten
   {
    digitalWrite(2,LOW);
    digitalWrite(3,LOW);
    status = 7;
   }
//
// Ausschalten Gruppe 2
   if (status == 7 && aktuelle_Millis -Einzeit_2 >= Ein_2) // Ausschalten
   {
    digitalWrite(4,LOW);
    digitalWrite(5,LOW);
  status = 8;
   }
  //
// Ausschalten Gruppe 3
   if (status == 8 && aktuelle_Millis -Einzeit_3 >= Ein_3) // Ausschalten
   {
    digitalWrite(6,LOW);
    digitalWrite(7,LOW);
  status = 9;
   }
// Ausschalten Gruppe 4
   if (status == 9 && aktuelle_Millis -Einzeit_4 >= Ein_4) // Ausschalten
   {
    digitalWrite(8,LOW);
    digitalWrite(9,LOW);
  status = 10;
   }
// Ausschalten Gruppe 5
  if (status == 10 && aktuelle_Millis -Einzeit_5 >= Ein_5) // Ausschalten
   {
    digitalWrite(10,LOW);
    digitalWrite(11,LOW);
  status = 11;//
   }
// Wiedereinschalten PROBLEMBEREICH
if (status == 11 && aktuelle_Millis - Startzeit_6 >= Wartezeit_6)
    {
    Einzeit_6 = aktuelle_Millis;
    digitalWrite(12,HIGH);
    status = 1; //
    }  
}
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
21.11.2020, 15:31
Beitrag #2
RE: ständiger Programmablauf ohne Funktion
Baue Dir entsprechende serielle Ausgaben in Deinen Sketch und lass Dir die Werte der Variablen an den kritischen Stellen anzeigen. Dann merkst Du, wo Dein Sketch falsch abbiegt.

Gruß Tommy

"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
21.11.2020, 18:00
Beitrag #3
RE: ständiger Programmablauf ohne Funktion
(21.11.2020 15:31)Tommy56 schrieb:  Baue Dir entsprechende serielle Ausgaben in Deinen Sketch und lass Dir die Werte der Variablen an den kritischen Stellen anzeigen. Dann merkst Du, wo Dein Sketch falsch abbiegt.

Gruß Tommy

Hallo Tommy56,
Serial eingebaut.
Fesatgestellt, dass der Statuswechsel nicht erkannt wird, resp. ignoriert wird. Passert bei der Änderung von Staus 5 auf Status 6.
Wobei ich jetzt mal hergehe und das ganze verschlanke und runterbreche.
vielleich komme ich ja drauf.
Ansonsten hoffe ich auf weitere Hilfe.
einen schönen Feierabend.
wbr. AnjinSan
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
22.11.2020, 12:50
Beitrag #4
RE: ständiger Programmablauf ohne Funktion
Hallo und einen schönen Sonntag zusammen,
nachdem ich den Sketch zerlegt und hier und da noch ein paar Statusmeldungen eingebaut habe. Und auch noch Fehler bereinigt habe,
läuft der minimale Sketch wie gewünscht.
Hier nochmal ein Danke an Tommy56 für den Tipp.
Falls jemand nachlesen möchte hier der reduzierte Sketch (alle vorher schon geschriebenen SAchen sind für später drin geblieben):

Code:
//
// Beleuchtung Lokschuppen
// kaskadierende Einschaltung von 5 Gruppen á 2 Lampen
// bei Arbeitsbeginn
//kaskadierende Ausschaltung der Lampen nach Arbeitsende
// Verlauf von Flügeltor nach hinten.
//
// Definition Konstanzen
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;    //
// Reihe 2
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;     //
// Reihe 3
const uint32_t Wartezeit_3 = 11000; // xx sec. warten bevor Einschaltung
const uint32_t Ein_3 = 9000;       // xx sec. Einschaltdauer
uint32_t Startzeit_3,Einzeit_3;     //
// Reihe 4
const uint32_t Wartezeit_4 = 14000; // xx sec. warten bevor Einschaltung
const uint32_t Ein_4= 11000;       // xx sec. Einschaltdauer
uint32_t Startzeit_4,Einzeit_4;     //
// Reihe 5
const uint32_t Wartezeit_5 = 17000; // xx sec. warten bevor Einschaltung
const uint32_t Ein_5 = 13000;       // xx sec. Einschaltdauer
uint32_t Startzeit_5,Einzeit_5;     //
//
//Zeit vor Wiedereinschalten
const uint32_t Wartezeit_6 = 2000; // xx sec. warten bevor Einschaltung
const uint32_t Ein_6 =1500;       // xx sec. Einschaltdauer
uint32_t Startzeit_6,Einzeit_6;     //
//
// Definition LEDs
//Gruppe 1
const int LED_2 = 2;
const int LED_3 = 3;
//Gruppe 2
const int LED_4 = 4;
const int LED_5 = 5;
//Grupp 3
const int LED_6 = 6;
const int LED_7 = 7;
// Gruppe 4
const int LED_8 = 8;
const int LED_9 = 9;
// Gruppe 5
const int LED_10 = 10;
const int LED_11 = 11;
const int LED_12 = 12;// Testled
//
void setup()
{
Serial.begin(9600); // Kontrollorgan  
//PIN Modus
pinMode(2,OUTPUT);
pinMode(3,OUTPUT);
pinMode(4,OUTPUT);
pinMode(5,OUTPUT);
pinMode(6,OUTPUT);
pinMode(7,OUTPUT);
pinMode(8,OUTPUT);
pinMode(9,OUTPUT);
pinMode(10,OUTPUT);
pinMode(11,OUTPUT);
pinMode(12,OUTPUT);// Testled
}
//
void loop()
{
static uint8_t Status = 0;  
uint32_t aktuelle_Millis = millis();
//
Serial.println(Status);
// Einschalten Gruppe 1
if (Status == 0 )
{
  Startzeit_1 = aktuelle_Millis;
  Status = 1;
}
if (Status == 1 && aktuelle_Millis - Startzeit_1 >= Wartezeit_1)
  {
    Einzeit_1 = aktuelle_Millis;
    digitalWrite(2,HIGH);
    digitalWrite(3,HIGH);
Status = 2;
  }
//****************************
// Ausschalten Gruppe 1
if (Status == 2 )
{
  Startzeit_2 = aktuelle_Millis;
  Status = 3;
}
if (Status == 3 && aktuelle_Millis - Startzeit_2 >= Wartezeit_2)
  {
    Einzeit_2 = aktuelle_Millis;
    digitalWrite(2,LOW);
    digitalWrite(3,LOW);
Status = 0;
  }
  
  









}// Ende Loop


liebe Grüße AnjinSan
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
22.11.2020, 12:59
Beitrag #5
RE: ständiger Programmablauf ohne Funktion
Danke für die Rückmeldung.

Als nächste Stufe könntest Du evtl. die LEDs in einem Array verwalten, wenn Du willst.

Gruß Tommy

"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
22.11.2020, 18:30
Beitrag #6
RE: ständiger Programmablauf ohne Funktion
(22.11.2020 12:59)Tommy56 schrieb:  Danke für die Rückmeldung.

Als nächste Stufe könntest Du evtl. die LEDs in einem Array verwalten, wenn Du willst.

Gruß Tommy

ohoh, finger in die WundeSmile
Das versuche ich ja schon an einer anderen Stelle.

naja, aber insgesamt macht der kpl. Sketch jetzt weas ich erreiche wollte. Einschalten der Gruppen 1-5 mit einer zeitlichen Verzögerung zu einander.
Dann auch das ganze quasi Rückwärts (5-1)wieder aus.

Nochmals Danke fürs anschubsen.
Und Arrays kommen vermutlich während der REHA vom 28.12 - 3.2. als Freizeitaufgabe dran.
Salü
AnjinSan
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  Servos ohne delay juergen001 23 1.112 30.10.2020 16:49
Letzter Beitrag: MicroBahner
  Objekt ohne Rückgabewert? BR03.10 9 484 21.09.2020 14:40
Letzter Beitrag: Tommy56
  Nextion an Arduino und umgekehrt ohne Bibliothek night022 23 1.051 17.09.2020 04:59
Letzter Beitrag: night022
Question Sketch compilieren und testen ohne hochladen? Triax16 18 2.047 02.05.2020 12:48
Letzter Beitrag: Bitklopfer
  PID-Regler PID als Funktion nimmzwei 3 964 27.04.2020 20:39
Letzter Beitrag: nimmzwei
  Frage zum richtigen verwenden einer Funktion Gerdchen03 3 749 10.04.2020 19:37
Letzter Beitrag: Tommy56
  Menu funktioniert ohne Serial.println nicht GSA1150 7 922 30.03.2020 18:26
Letzter Beitrag: Tommy56
  Stepper Motor mit zwei Taster bedienen / Fehler ohne Fehlermeldung Milano 6 1.002 21.03.2020 16:06
Letzter Beitrag: MicroBahner
  Funktion aufrufen senseman 14 1.562 09.02.2020 21:42
Letzter Beitrag: senseman
  Funktion random() Bau3r 1 497 02.02.2020 16:23
Letzter Beitrag: Tommy56

Gehe zu:


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