Subroutinen

sascha32

Neues Mitglied
10. Okt. 2010
18
0
0
Sprachen
Guten Morgen.

So mein anliegen ist es, das ich mein Code von meiner ungenauen Uhr ein bisschen mehr Routine rein bekomme. Es wäre sehr schön wenn jemand eine Hilfe oder eine www Seite kennen würde. Ich habe schon was über flag gehört und für Taster debounce .


:rolleyes: :rolleyes:
 
Hallo Sascha
Nun, ich will mal vesuchen, zu verstehen, was du für ein Problem hast. Wenn du dir mal die Mühe machst, und deinen eigenen Text durchliest, verstehst du vielleicht, was ich meine.
Also... wichtig ist "Gedanken ordnen", sonst wird dein Code, egal in welcher Sprache, immer ein Spaghetti-Code sein. Und das kann ich dir garantieren, du wirst der sein, der daran verzweifelt. Niemand hier wird sich auch nur die geringste Mühe machen, solchen chaotischen Code zu durchleuchten, es sei denn, er ist Masochist.
Du sprichst Subroutinen an. Dazu mußt du aber wissen, wie sie eingesetzt werden sollen. Das hat nix mit "Routine" zu tun. Früher dienten sie dazu, wiederholende Programmteile zuersetzen. Im Zeitalter der "schnellen" Rechner und "massenhaftem" Speicher ist eine Subroutine immer dann angesagt, wenn sie den Code übersichtlicher gestaltet. In meinem Beitrag "keine Angst vor Assembler" habe ich bereits darauf hingewiesen. Natürlich ist gleiches Vorgehen in jeder Sprache von Vorteil.
Stell dir mal deine Programmschleife vor. Bevor du da reinrauscht, setzt du Anfangswerte, also eine Programminitialisierung sozusagen. Danach befindest du dich in einem quasi endlosen Kreis.
Nun denk mal an eine Eisenbahn.... der Zug steht auf einem Gleis, welches in einem Gleisoval endet, wie eine 6 halt. Ist er im Kreis, fährt er immer die gleiche Strecke. Er kommt immer wieder am Bahnhof vorbei, immer wieder an der gleichen Wiese, Haus oder was auch immer... wie dein Programm.
nun denk dir den Kreis größer... Platz für viele Bahnhöfe und andere Dinge, die den Zug beeinflussen. Wie dein Programm. Nun kann der Zugführer alles auswendig lernen, oder an jedem Halt eine Liste mit Aufgaben vorfinden. Denk mal nach, wer hat's einfacher und ist auch leichter zu ersetzen, der Zugführer, der alle Stationen und Aufgaben im Kopf hat, oder der, der an jeder Station den Zettel nimmt, die Aufgaben abarbeitet und danach seine Reise fortsetzt. Zugegeben, der Zugführer mit dem gesamten Wissen wird minimal schneller sein. Aber wenn er krank ist oder sonstwie ausfällt, gibt's ein Problem.... und genauso mußt du deine Subroutinen sehen. Sie müssen klar und deutlich eine Aufgabe übernehmen können. Dein Programmzyklus ruft nun eine Subroutine nach der anderen auf. Manchmal sind sie sogar geschachtelt, d. h. eine Subroutine ruft eine Weitere auf. Muß nun etwas geändert oder angepasst werden, so geschieht es in einer kleinen übersichtlichen Codesequenz. Ich hab es ja schon einmal gesschrieben: Bennene die einzelnen Aufgaben, bilde Blöcke und füge sie anschließend zusammen wie Perlen auf einer Kette...
Gruß oldmax
 
Hallo,

das ist ja von oldmax recht nett erklärt ... das mit der 6 als Eisenbahn. Ist
recht eingängig.

Subroutinen sind dafür da, damit man wiederverwendbare "Legosteine" für
die nächsten Projekte hat. Dann muß man sich die Arbeit nur einmal machen.
Außerdem strukturieren Subroutinen ein Programm und teilen es in einzelne
Funktionsgruppen auf. zB eine Subroutine zur Abfrage der Tasten, eine für
die Berechnung der Temperaturdaten, usw ...

Aber mit deiner Fragge kann ich leider auch genausowenig anfangen. Die
Themen "Flags", "Routinen", "Debounce" gehen in total verschiedene
Richtungen. Frei nach dem Motto ... vierteilt ihn! .

- Flags sind Variablen als "Schalter" / "Signallämpchen" / "Merker" im Programm
- Routinen sind Unterteilungen eines Programms
- Debounce ist ein Befehl zur Entprellung von Tasten

was hat das miteinander zu tun ?

Gruß
Dino
 
Hi
Ok, ich will noch mal etwas zu den Flags sagen. Es ist schon einige Zeit her, da hab ich diese Erklärung gelesen.
Die Briefkästen bei den amerikanischen Farmern stehen nicht am Haus, sondern an der Strasse an der Grundstückseinfahrt. Nun kommt ein Postbote vorbei und hat einen Brief. Also legt er ihn in den Briefkasten und dreht eine seitlich angebrachte kleine Fahne hoch. Damit kann der Farmer schon von weitem sehen: "Ich habe Post". Also fährt er hin, entnimmt die Post und zum Zeichen, das der Briefkasten leer ist, senkt er die Fahne wieder. Das funktioniert auch anders rum: Er möchte dem Postboten eine Nachricht mitgeben.. Also legt er seine Sendung in den Briefkasten und hebt die Flagge. Nun sieht der Bote, auch wenn er keine Post hat, es ist etwas zum Mitnehmen da. Er hält dann an, entnimmt die Nachricht und senkt die Flagge als Zeichen der Baearbeitung.
Wer in der Stadt lebt und die öffentlichen Verkehrsmittel nutzt, erlebt die Flags ständig: Der Passagier möchte an der nächsten Station aussteigen und drückt einen Taster. Daraufhin wird dem Fahrer der Halt an der nächsten Station signalisiert. Er ist eigentlich nichts anderes wie ein Merker für eine spätere Bearbeitung. Es wird nicht sofort reagiert, sondern erst, wenn die Stelle erreicht wird, wo die Bearbeitung vorgesehen ist.
So, und nun ist ein anderer dran, "debounce" zu erklären....
Gruß oldmax
 
Danke schön Oldmax für die erklärung, das ist super erklärt.

das mit dem Debounce, ist eine super Sache wenn man weiß wie es geht. Ich mache es ganz normal mit dem Taster entprellen. Aber man will ja noch weiter lernen.

ich mache es so.

Configuration vom Taster

Config Pind.1 = Input
Portd.1 = 1
Taster1 Alias Pind.1


Das dann in die do loop Schleife.


If Taster1 = 0 Then
Waitms 50
Incr Minute
End If
 
Hi
Bei deiner Abfrage gehst du davon aus, das, sollte der Taster sein Signal verlieren, er die If-Bedingung verläßt. Nun, ob das in Basic so ist, weiß ich nicht, doch ich bezweifle dies. Also zählst du nach 50 ms einfach eine Minute hoch, egal welchen Zustand dein Schalter hat. Das mag hier funktionieren....
Dein Wait hält übrigends dein Programm gewaltig auf. Auch das fällt hier nicht ins Gewicht, solltest du aber wissen. Dazu mal ein Beispiel:
Du bekommst einen Auftrag, 5 km durch eine belebte Stadt zu laufen. Ist normalerweise kein Problem und kann relativ gemütlich in 1 Std. erledigt werden. Nun sagt dir aber deine innere Stimme: "immer, wenn du ein schönes Mädel siehst, bleib 5 Min. stehen und schau ihr nach" .....
Solange du keinem Mädel begegnest, ist der Weg in einer Stunde kein Problem, aber .....
Um nun sicher zu sein, das du kein Prellen mehr hast, kannst du folgendermaßen vorgehen:
Nimm eine Zählvariable.
Nun deine Anweisungen:
Code:
If Taster1 = 0 then Inc Zaehler
If Taster1 = 1 then Zaehler =0
If Zaehler = 10 then Inc Minute
Nun, was ist da anders? Das Programm läuft durch, wird also nicht gebremst durch irgendwelche Wartezeiten.
Ändert sich der Tasterzustand, dann wird wieder von vorn begonnen mit der Zählerei. Erst wenn du 10 Programmzyklen keine Änderung vom Taster hattest, ist das Tastersignal gültig. und du kannst die gewünschte Aktion ausführen.
@All
Schlagt mich bitte nicht, es gibt inteligentere Lösungen, aber die ist glaub ich ganz gut für Erklärung.
Gruß oldmax
 

Über uns

  • Makerconnect ist ein Forum, welches wir ausschließlich für einen Gedankenaustausch und als Diskussionsplattform für Interessierte bereitstellen, welche sich privat, durch das Studium oder beruflich mit Mikrocontroller- und Kleinstrechnersystemen beschäftigen wollen oder müssen ;-)
  • Dirk
  • Du bist noch kein Mitglied in unserer freundlichen Community? Werde Teil von uns und registriere dich in unserem Forum.
  •  Registriere dich

User Menu

 Kaffeezeit

  • Wir arbeiten hart daran sicherzustellen, dass unser Forum permanent online und schnell erreichbar ist, unsere Forensoftware auf dem aktuellsten Stand ist und der Server regelmäßig gewartet wird. Auch die Themen Datensicherheit und Datenschutz sind uns wichtig und hier sind wir auch ständig aktiv. Alles in allem, sorgen wir uns darum, dass alles Drumherum stimmt :-)

    Dir gefällt das Forum und unsere Arbeit und du möchtest uns unterstützen? Unterstütze uns durch deine Premium-Mitgliedschaft!
    Wir freuen uns auch über eine Spende für unsere Kaffeekasse :-)
    Vielen Dank! :ciao:


     Spende uns! (Paypal)