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
Programm zurück in den Loop bringen
04.01.2021, 12:59 (Dieser Beitrag wurde zuletzt bearbeitet: 04.01.2021 13:10 von AnjinSan.)
Beitrag #1
Programm zurück in den Loop bringen
guten Tag und ein frohes neues Jahr,
wie bringe ich den Sketch nach den ersten Durchlauf wieder in die Spur?
Am Ende vom Sketch sollte der Inhalt der Status Variante wieder gelöscht werden und somit quasi als Inhalt die 0 bekommen.
Aber egal wo ich die Statusänderung einfüge, es klappt nicht.
Vielleicht findet ja jemand von euch den falschen Fehler und hilft mir auf die Sprünge.
Bis auf diesen Fehler klappt alles, wo ich ja schon ein bischen froh drüber bin Blush
Merci.
NACHTRAG:
den auskommentierten "status" wieder ins Spielgebracht.
Hatte ich vergessen.
auch mit dieser Änderung klappt es nicht.
Code:
// Testversion mit einer Einheit

/* Funktionsbeschreibung Entkupplungsvorgang
   Jeden Hallsensor und Taster ist eine LED zugeordnet.
   Waggon steht über Hallsensor HSQ (1-4).
   Bei Auslösung von HSQ(1-4): LED(10-14) Blau ein.
   Über externen Taster Aufwärtshub Entkuppler.
   Nach Betätigung Taster (5-9) LED (14-17) Weiß für ca.
   5 sec.ein.
   Wenn der HSQ wieder frei ist, LED blau und Weiß abschalten.
   HSQ bereit für erneute Auslösung.

*/
//***** Konstanzen Zuordnung der Taster/ Hallsensoren*****
//***** Hallsensoren *****
const int HSQ1 = 2;
//***** Taster **********
const int Taster1 = 6;
//***** Ausgänge Bessetztanzeige *****
const int LED1 = 10;
//***** Ausgänge Freigabe **********
const int LED5 = 14;
//const int Test = 19; Testled
//***** Varianten vorbesetzen *****
boolean ausgeloest1 = false;
boolean ausgeloest6 = false;
//***** Zeiten ******
unsigned long Start6 = 0;
const long Warte6 = 5000;

//***** Beginn Setup *****
void setup()
{
  Serial.begin(9600);
  //*****Pin Modus Input Hallsensoren/ Taster******
  pinMode(HSQ1, INPUT);  // Pin 2
  pinMode(Taster1, INPUT); // Pin 6
  //***** Pin Modus Output LEDs *****
  pinMode(LED1, OUTPUT); // Pin 10
  pinMode(LED5, OUTPUT); // Pin 14
  //pinMode(Test, OUTPUT); // Pin 19 Testled
}
//***** Beginn Loop *****
void loop()
{
  static uint8_t status1 = 0;
  Serial.println(status1);
  //***** Beginn Entkuppler 1 *******
  if ((digitalRead(HSQ1) == LOW) && (ausgeloest1 == false) && (status1 == 0))
  {
    ausgeloest1 = true;
    digitalWrite(LED1, HIGH);
    status1 = 1;
  }
  if ((digitalRead(Taster1) == LOW) && (ausgeloest6 == false) && (status1 == 1))
  {
    ausgeloest6 = true;
    digitalWrite(LED5, HIGH);
    status1 = 2;
  }
  unsigned long aktuelleMillis = millis();
  if ((aktuelleMillis - Start6 >= Warte6) && (ausgeloest6 = true))
  {
    Start6 = aktuelleMillis;
    digitalWrite(LED5, LOW);
    digitalWrite(LED1, LOW);
   status1 = 0;
  }
}
//***** Ende Entkuppler 1 *****
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
04.01.2021, 13:30 (Dieser Beitrag wurde zuletzt bearbeitet: 04.01.2021 13:31 von Tommy56.)
Beitrag #2
RE: Programm zurück in den Loop bringen
Du setzt sie nur in Abhängkeit von Bedingungen auf 0. Das =0 bei static gilt nur für den ersten Durchlauf.
Ich habe aber nicht wirklich verstanden, was Du willst.
Was soll Ende vom Sketch sein?

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
04.01.2021, 13:44
Beitrag #3
RE: Programm zurück in den Loop bringen
(04.01.2021 13:30)Tommy56 schrieb:  Du setzt sie nur in Abhängkeit von Bedingungen auf 0. Das =0 bei static gilt nur für den ersten Durchlauf.
Ich habe aber nicht wirklich verstanden, was Du willst.
Was soll Ende vom Sketch sein?

Gruß Tommy

Hallo Tommy56,
Ziel ist, nach Abarbeitung wieder am Anfang zu beginnen, also Loop.
jetzt muss ich genauer nachfragen:
"Du setzt sie nur in Abhängkeit von Bedingungen auf 0. Das =0 bei static gilt nur für den ersten Durchlauf. "
was muss ich ändern damit auch ein zweiter, dritter...Durchlauf funktioniert?
Brauche ich eine andere "Sorte" von Variable? Und was muss ich noch beachten?
Danke schon fürs Helfen.
Salü
AnjinSan
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
04.01.2021, 14:03 (Dieser Beitrag wurde zuletzt bearbeitet: 04.01.2021 14:08 von MicroBahner.)
Beitrag #4
RE: Programm zurück in den Loop bringen
(04.01.2021 12:59)AnjinSan schrieb:  Am Ende vom Sketch sollte der Inhalt der Status Variante wieder gelöscht werden und somit quasi als Inhalt die 0 bekommen.
Das ist die falsche Betrachtungsweise. Dein Sketch hat kein Ende - der loop() läuft endlos durch, bis Du den Arduino abschaltest.

Wenn ich das richtig sehe, soll das Ganze eine kleine Ablaufsteuerung für einen Entkupplugsvorgang auf der Moba sein. Sowas lässt sich wesentlich übersichtlicher mit einer switch()-Anweisung machen. ( Hier gab's mal von mir ein kleines Tutorial dazu ).
Die Stati, die ich sehe
  1. Warten bis zu entkuppelnde Wagen über Entkuppler stehen
  2. Warte auf Tastendruck, dann Entkuppler hoch und Zeit starten
  3. Wenn Zeit abgelaufen, Entkuppler wieder runter (und zu Punkt 1 - sollte hier aber noch nicht sein )
  4. ( Warten bis der Entkuppler wieder frei ist und zu Punkt 1 ) <- den Zustand sollte man noch einführen

was mir auffält:
-Das Starten der Zeit im Puntk 2 fehlt ( setzen von Start6 ).
-'ausgeloest6' und 'ausgelöst1'werden im loop nie wieder zurückgesetzt.

N.B. etwas sprechendere Variablennamen würden die Übersicht auch erhöhen.

Edit: dein Problem liegt nicht in der Variabel status1! Du suchst den Fehler an der falschen Stelle

Gruß, Franz-Peter
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
04.01.2021, 14:27
Beitrag #5
RE: Programm zurück in den Loop bringen
Hallo Franz-Peter,
bin ja noch am "fummeln" wie ich es am besten zaubern kann. Das hier ist ja der erste Versuch.
Dein Tipp "ausgeloest6' und 'ausgelöst1'werden im loop nie wieder zurückgesetzt." war erfolgreich,läuft erstmal.
Zum Verstehen war die Übung nicht schlecht für mich.
Weil grad durch eure Hilfen habe ich u.a. die Array Nummer verstanden.
Deine Empfehlung, das ganze mit einer/ mehreren Switch Anweisungen zu machen, wäre dann die nächste Übung.
Das ganze wird ja noch ausgebaut auf 4 Überwachungen/ Entkupplungen.
Es fehlen noch einige wichtige Merkmale, wie die besetzt/ freimeldung zu signalisieren.

Erstzmal Danke für die Tipps.
Salü
AnjinSan
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
04.01.2021, 14:41
Beitrag #6
RE: Programm zurück in den Loop bringen
Super, und weiterhin viel Spaß.

Gruß, Franz-Peter
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
07.01.2021, 17:02
Beitrag #7
RE: Programm zurück in den Loop bringen
(04.01.2021 14:41)MicroBahner schrieb:  Super, und weiterhin viel Spaß.

Hallo naochmal,
also das mit der Switch Geschichte habe ich noch verschoben, da ich erst noch ein "Fall" abhandeln muss.
Also, wenn nach dem Abkuppeln der Hallsensor noch "belegt" ist (meldet quasi ein besetzt) , dann muss ich ja auch diesen Fall berücksichtigen.
Dazu stellt sich die Frage, wo / wann muss ich diesen Zustand abfragen?
Meine bisherigen Versuche haben nicht geklappt.
Muss dazu eine weitere Variable als Zustandsspeicher angelegt werden?
Wie muss ich diese dann ggf. auswerten?
Man sieht schon, einfache Lösungen gibt es nicht. Zumal man den Entkupplungspunkt nicht richtig einsehen kann.
Wäre nett, wenn jemand eine oder zwei Ideen oder Vorschläge hat.

Schönen Abend noch, geh jetzt Schnee fegen...
AnjinSan
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
08.01.2021, 18:24
Beitrag #8
RE: Programm zurück in den Loop bringen
guten Abend,
der Sketch wird erstmal nach hinten gestellt, da
1.) da der aktuelle Wissensstand noch nicht hoch genug ist/ ausreicht.
2.) wichtige Veränderungen anstehen.

Trotzdem lieben Dank fürs helfen, ich bleibe dran...
und wenn genug Zeit und Wissen vorhanden sind, gibt es sicherlich ein Fortschreiben.

Mit Wünschen für ein entspanntes Wochenende
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
  Gamepad Programm verstehen Benni84 61 3.458 19.04.2021 19:10
Letzter Beitrag: N1d45
  Programm startet bei Neustart nicht Moritzzz 18 1.697 02.04.2021 14:06
Letzter Beitrag: Tommy56
  von loop nach setup Karl Stanger 5 933 13.03.2021 11:51
Letzter Beitrag: Karl Stanger
  Programm bleibt hängen Tellen 10 1.897 04.03.2021 23:46
Letzter Beitrag: Tellen
  funktion im loop nur einmal ausführen Thor Wallhall 6 1.004 26.12.2020 18:19
Letzter Beitrag: hotsystems
  Servo im Programm über einen Taster betätigen CB2311 26 2.540 08.12.2020 19:21
Letzter Beitrag: Tommy56
  Programm Schwimmer optimieren maxo 12 1.410 10.11.2020 19:25
Letzter Beitrag: Tommy56
  return-Anweisung in void loop() wonk 1 1.001 09.10.2020 10:13
Letzter Beitrag: Tommy56
  einmaliger Loop nach Knopfdruck Saftschmuggler 2 996 09.08.2020 18:18
Letzter Beitrag: Saftschmuggler
  loop inerhalb von void loop () FoxFactoy 11 2.472 28.06.2020 10:04
Letzter Beitrag: Tommy56

Gehe zu:


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