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
Suche Beispiel für je einmal ausgeführte Unterprogramme mit Aufruf durch Tasten
26.12.2014, 22:15 (Dieser Beitrag wurde zuletzt bearbeitet: 26.12.2014 22:17 von Marlox.)
Beitrag #1
Suche Beispiel für je einmal ausgeführte Unterprogramme mit Aufruf durch Tasten
Hallo,

vorab bitte ich um etwas Verständnis, ich bin absoluter Neuling in Sachen Programmierung jeweder Art, daher sind die meisten meiner Fragen bestimmt nicht die Hellsten Wink

Ich habe schon ein wenig rumgestöbert, aber bisher noch nichts für mich verständliches dazu gefunden (was nichts heissen mag...)

Kennt oder hat jemand einen Beispielcode, wo einfach bestimmte Unterprogramme/Funktionen per Digitaleingang einmalig aufgerufen werden?
Also im Stil einer einfachen SPS,quasi:

Drückt man Knopf A, wird Funktion A aufgerufen.
Drückt man Knopf B, wird Funktion B aufgerufen.
Aber mit der Möglichkeit, jederzeit abzubrechen!

Wenn ich das richtig verstanden habe, sollte dann im loop ja nur die Überwachung der Inputs laufen und bei entsprechendem Input dann die dazu gehörende Funktion aufgerufen werden, richtig?

Die Unterprogramme/Funktionen könnte ich dann einfach per voids, ausserhalb der loop hängen, oder?

Aber wie setze ich dann einen "Abbruch-Knopf" um, bei dem jede momentan laufende Funktion sofort beendet wird und nur die loop-Funktion dauerhaft weiter läuft?
Und wie schaut es aus, wenn da gerade ein delay am Laufen wäre? Kann man trotzdem direkt abbrechen?

Klar könnte man das auch über den Reset-Knopf machen, aber schön ist das bestimtm nicht, da gibt es doch bestimmt elegantere Methoden.

Am schönsten wäre es für mich natürlich, wenn jemand einen funktionierenden Code mit ähnlicher Funktion kennen würde oder hätte, damit ich mir das mal genau anschauen kann, was wo wie gemacht wird.

Vielen Dank
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
26.12.2014, 22:52
Beitrag #2
RE: Suche Beispiel für je einmal ausgeführte Unterprogramme mit Aufruf durch Tasten
setze doch einfach den 3. Knopf auch in die loop... die void die du damit aufrufst setzt die Werte die du in den anderen bedien voids setzt auf 0....

du kannst ja mal in meinen Beitrag zur IR- Fernbedienung schauen- im Prinzip ist es nichts anderes...

also ungefähr so

void setup ()
{
....
....
....
}

void loop()
{
case Taste1 = HIGH:
Funktion1;

case Taste2 = HIGH:
Funktion2;

case Taste3 = HIGH;
Abbruch;
}

void Funktion1
{
Aktion 1;
}

void Funktion2
{
Aktion 2;
}

void Abbruch
{
Aktion 1 = 0;
Aktion 2 = 0;
}



also nur mal ganz grob....
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
26.12.2014, 23:32 (Dieser Beitrag wurde zuletzt bearbeitet: 26.12.2014 23:37 von Marlox.)
Beitrag #3
RE: Suche Beispiel für je einmal ausgeführte Unterprogramme mit Aufruf durch Tasten
Ah, sehr gut...
Ich breche die laufende Funktion also nicht direkt ab, sondern setze einfach die dort verwendeten Werte auf Null.
Damit werde ich morgen mal ein wenig experimentieren müssen.
In den Funktionen sollen verschiedene zeitliche Abläufe ausgeführt werden. Mal sehen, wie das funktioniert, während die Timer laufen
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
27.12.2014, 00:10
Beitrag #4
RE: Suche Beispiel für je einmal ausgeführte Unterprogramme mit Aufruf durch Tasten
setz doch mal den sketch hier rein.... da läßt sich eher mal was sagen...

und ich verspreche nicht auf "blinken ohne delay" zu verweisen... ;-)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
27.12.2014, 10:03 (Dieser Beitrag wurde zuletzt bearbeitet: 27.12.2014 10:11 von Marlox.)
Beitrag #5
RE: Suche Beispiel für je einmal ausgeführte Unterprogramme mit Aufruf durch Tasten
Ohje... Das gibt jetzt gleich virtuelle Schellen Big Grin
Aber naja, man soll ja weiter kommen, nicht wahr?

Hier also mal ein erster Versuch, ein Ergebnis zu erzielen. Ich bitte um Nachsicht, ich habe quasi Null Erfahrung mit dem Programmieren. Und nachdem ich schon so schön eingeladen worden bin, hier nur schnell mit Delay verdeutlicht, was nacher passieren soll.
Es sollen einfach drei Ausgänge für bestimmte Zeiten nacheinander angeschaltet werden. Diese trennen mir hier noch drei Spannungsteiler voneinander ab. Das veranlasst dann meinen Frequenzumrichter, die Frässpindel für die entsprechenden Zeiten mit den entsprechenden Drehzahlen warm laufen zu lassen.
Natürlich werde ich das später über PWM und AnalogOut machen, da habe ich gestern nacht auch schon die ersten Erfolgserlebnisse gehabt mit dem PWM-Wandler Cool

Also, das war der bisherige Code.
Knopf drücken, Warmlauf starten.

Für später soll möglich sein:
Knopf A für Phase 1 des Warmlaufes
Knopf B für Phase 2 des Warmlaufes
Knopf C für Phase 3 des Warmlaufes
Knopf D für kompletten Warmlauf
Knopf E für sofortigen Abbruch des Warmlaufes in jeder Phase
Aber dazu muss ich erst noch üben bzw brauche eure Hilfe Big Grin
Zitat:int out1 = 11;
int out2 = 12;
int out3 = 13;
int buttonPin = 2;
int buttonPress = 0;

void setup() {
  pinMode(out1, OUTPUT);
  pinMode(out2, OUTPUT);
  pinMode(out3, OUTPUT);
  pinMode(buttonPin, INPUT_PULLUP);
}

void loop() {
  buttonPress = digitalRead(buttonPin);
  if (buttonPress == LOW) { // if BUTTON is LOW, start Sub WARMLAUF
  Warmlauf();
  } 
}

void Warmlauf() {
  digitalWrite(out1, HIGH); // turn Out1 on
  delay(120000); // wait for 120 seconds
  digitalWrite(out1, LOW); // turn Out1 off
  digitalWrite(out2, HIGH); // turn Out2 on
  delay(120000); // wait for 120 seconds
  digitalWrite(out2, LOW); // turn Out2 off
  digitalWrite(out3, HIGH); // turn Out3 on
  delay(60000); // wait for 60 seconds
  digitalWrite(out3, LOW); // turn Out3 off
}
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
27.12.2014, 11:58
Beitrag #6
RE: Suche Beispiel für je einmal ausgeführte Unterprogramme mit Aufruf durch Tasten
Hallo Marlox,
ein paar Fragen sollten nochmal eindeutig beantwortet werden.
Soll es möglich sein:
1. Ein laufendes Unterprogramm abzubrechen und danach ein anderes zu starten?, oder
2. ein laufendes Unterprogramm abzubrechen und unmittelbar in ein anderes Unterprogramm zu springen?
3. ein laufendes Unterprogramm soll zu jeder Zeit abgebrochen werden können, ohne auf das Ende des Unterprogramms warten zu müssen?
Von den Antworten hängt unter Umständen die Nutzbarkeit von delay() ab.
Generell ist es aber nicht schwer so etwas umzusetzen.
Grüße Ricardo

Nüchtern betrachtet...ist besoffen besser Big Grin
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
27.12.2014, 12:02 (Dieser Beitrag wurde zuletzt bearbeitet: 27.12.2014 12:03 von Marlox.)
Beitrag #7
RE: Suche Beispiel für je einmal ausgeführte Unterprogramme mit Aufruf durch Tasten
Gerne, also:

Ja, laufendes Unterprogramm soll abgebrochen werden können und danach auch wieder ein anderes gestartet werden können. Muss aber nicht unmittelbar stattfinden.
Es reicht vollkommen aus, wenn ich zuerst ABBRUCH drücke und danach dann erneut ein auszuführendes Unterprogramm anwählen muss.

Und auch ja, es soll jederzeit abgebrochen werden können, nicht erst nach dem Delay. Das klingt schon nach meiner Befürchtung, mich doch noch mit millis auseinandersetzen zu müssen

Vielen Dank!
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
27.12.2014, 13:28
Beitrag #8
RE: Suche Beispiel für je einmal ausgeführte Unterprogramme mit Aufruf durch Tasten
na wenn dein Ziel ein PWM- Signal ist, dass bei jedem Programmabschnitt die Drehzahl erhöht, mache das doch direkt mit analogWrite an einem der PWM- Ausgänge...

Dann setzt du mit jedem Taster die Drehzahl auf einen definierten Wert und mit dem Abbruch- Taster auf 0....
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  Unterschiedliche Programme durch Switch/ Case SpeedShifter 26 626 04.10.2016 15:29
Letzter Beitrag: SpeedShifter
  4 Tasten für 4 Laufzeiten des gleichen Programms Nimes 8 370 18.07.2016 16:32
Letzter Beitrag: Scheams
  Altes Digitales Display mit Text/Bits durch Genuino Micro versorgen - SPI-Bibliothek? RollingStone 0 206 25.06.2016 17:46
Letzter Beitrag: RollingStone
  2 Tasten drücken damit licht angeht tjard 11 555 19.06.2016 12:24
Letzter Beitrag: hotsystems
  Deckel offen erkennung durch Temperaturabfall MarkoM 3 260 08.06.2016 14:18
Letzter Beitrag: hotsystems
  [Suche] Library Programmierer/in für privates Projekt avoid 8 582 19.05.2016 15:01
Letzter Beitrag: avoid
Sad Suche simplen Scetch für ESP8266-Modul torsten_156 14 1.159 19.04.2016 07:54
Letzter Beitrag: amithlon
  nur ein URL aufruf ohne PHP toto1975 3 615 05.04.2016 08:26
Letzter Beitrag: iks77
  Suche LCD.h Zip bojojo 4 877 11.02.2016 17:31
Letzter Beitrag: bojojo
  Aus While-Schleife durch Interrupt aussteigen Zill3 10 1.196 08.02.2016 16:28
Letzter Beitrag: ardu_arne

Gehe zu:


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