Guten Tag Situation: Treppenbeleuchtung in der richtigen Reihenfolgen ausschalten. Ich habe selbst (zum ersten mal) eine Platine erstellt und ein Programm geschrieben. Nun ist meine Frage...wie bekomme ich es hin, dass die LED'S der einzelnen Stufen in folgender Reihenfolge abgeschalten? -Wenn zuletzt von oben nach unten gegangen wurde, gibt Bewegungsmelder 1(unten) am längsten ein High-Signal raus und beim abschalten des Bewegungsmelder 1 sollen die LED'S von oben nach unten abschalten. Und von unten nach oben genau anders herum. Wie kann ich also eine "Abschaltreihenfolge" von Inputs abfragen? Programmiert wird mit LUNA AVR Mikrocontroller = Atmega8 Bisher ist das meine Version, ich hätte es aber gerne wie oben beschrieben. Ist nur ein Teilausschnitt (abschalten)... "" elseif S1=0 and S2=0 then LED6=0 and LED7=0 Waitms 100 LED5=0 and LED8=0 Waitms 100 LED4=0 and LED9=0 Waitms 100 LED3=0 and LED10=0 Waitms 100 LED2=0 and LED11=0 Waitms 100 LED1=0 and LED12=0 "" Weitere Informationen LED12 ganz oben LED1 ganz unten S1 Bewegungsmelder unten S2 Bewegungsmelder oben Bitte bringt mich nicht gleich um ;-), wenn es total einfach ist. Ich habe mich auch mit der Suchfunktion beschäftigt, aber wahrscheinlich nicht den richtigen Begriff gewählt. Vielen Dank schon einmal im Vorraus
David schrieb: > -Wenn zuletzt von oben nach unten gegangen wurde, gibt Bewegungsmelder > 1(unten) am längsten ein High-Signal raus und beim abschalten des > Bewegungsmelder 1 sollen die LED'S von oben nach unten abschalten. > > Und von unten nach oben genau anders herum. > > Wie kann ich also eine "Abschaltreihenfolge" von Inputs abfragen? Im Ernst ? An welchen PINs sind die Bewegungsmelder ? Wie werden die LEDs ein bzw. ausgeschaltet (PORT, PIN) ? Wenn die PINs richtig angeschlossen sind, kann es einfacher sein.
Hast du bedacht, dass manchmal auch mehrere Personen das Treppenhaus gleichzeitig nutzen und dabei eventuell sogar nicht den selben Weg haben?
David schrieb: > Ich > habe mich auch mit der Suchfunktion beschäftigt, aber wahrscheinlich > nicht den richtigen Begriff gewählt. Man sucht nicht Programmlösungen, sondern man schreibt sie. Dazu ist es notwendig, erstmal einen Programmablaufplan zu erstellen. Für Deinen speziellen Fall könnte man auch ein Zeitdiagramm nehmen, wo die Eingänge und Ausgänge untereinander dargestellt werden. In jedem Fall mußt Du erstmal eindeutig jeden möglichen Zustand beschreiben. Es reicht nicht, wenn Du nur das Abschalten beschreibst und niemand weiß, wann sie eingeschaltet werden. Ganz schlecht ist eine Funktionsbeschreibung als herausgerissene Codebruchstückchen, denn die muß dann erstmal ein Betrachter in ihre Funktion wieder rückübersetzen und dann ihren Aufrufstelle vermuten (hellsehen).
Hier ist die Beschaltung des atmega8. Ich hoffe das könnt ihr erkennen. An den Led Ausgängen sind Transistoren die die LED's einschalten. Gleich lade ich noch das vorläufige Programm hoch
Hier noch das Programm. Ist das in eine Txt-Datei auch OK? Ich wusste nicht welches Dateiformat geöffnet werden kann. Und das geht bei jedem. PB7 ist korrigiert in PB6
David schrieb: > Hier noch das Programm.
1 | LED6=0 and LED7=0 |
Was willst du hiermit erreichen ? Wahrscheinlich wolltest du beide LEDs ausschalten, oder ? Hier wird aber nur LED6 ausgeschaltet. Compiler sieht das folgendermassen: If (0 AND (LED7=0)) Then LED6 = Obige Abfrage = FALSE = 0 EndIf LED7 wird somit niemals ausgeschaltet, LED6 wird immer ausgeschaltet, da (0 AND EgalWas) immer Null ergibt. Wenn du deine Pins anders verbinden kannst, geht es wahrscheinlich eleganter, wenn nicht, solltest du folgendes andern:
1 | LED1.mode =output, low |
2 | ...
|
3 | LED12.mode =output, low |
4 | ...
|
5 | ...
|
6 | elseif S1=0 and S2=0 then |
7 | |
8 | LED6 = 0 |
9 | LED7 = 0 |
10 | Waitms 100 |
11 | ...
|
12 | ...
|
:
Bearbeitet durch User
Was ja noch wichtig ist: Wann und wie lange wird eine Person vom Sensor erfasst ? Und folgende Situationen hast du (wahrscheinlich) nicht bedacht: a) Jemand steigt von unten nach oben, die Beleuchtung wird von unten nach oben eingeschaltet. Wenn sich diese Person in der Mitte befindet, werden wahrscheinlich beide Sensoren auf Null sein, Beleuchtung geht aus. Dann gelangt die Person oben an, der obere Sensor schaltet die Beleuchtung erneut an, diesmal von oben nach unten. b) Jemand will die Treppe runtersteigen, die Beleuchtung geht diesmal von oben nach unten ein. Wenn sich diese Person in der Mitte befindet, werden wahrscheinlich beide Sensoren auf Null sein, Beleuchtung geht aus. Eine andere Person will die Treppe raufsteigen, die Beleuchtung geht diesmal von unten nach oben ein. Die erste Person ist unten angelangt, die Beleuchtung geht aus. Die zweite Person ist oben angelangt, die Beleuchtung geht von oben nach unten an. Usw. usw...
Hi
> Usw. usw...
Die Treppe darf nur von Einzelpersonen benutzt werden.
MfG Spess
Was sind das für 'Sensoren'? Mach doch an jede Stufe zu jeder LED einen. Mit etwas 'Nachlauf'. Dann kannst du immer mit einem Lichtstreifen mitgehen. Man braucht sich auch keine Gedanken darüber machen, wie man die Spezialfälle abfängt: - mitten auf der Treppe umgekehrt - eine Person kommt von oben, die andere von unten ----- spess53 schrieb: > Die Treppe darf nur von Einzelpersonen benutzt werden. Nach umfangreicher Einweisung ;-)
:
Bearbeitet durch User
Oder jemand betritt die Treppe, hat was vergessen und geht zurück, d.h. der obere Puls kommt nie. Usw. usw. Das Schwere ist nicht das Programmieren, sondern das Spezifizieren, also eine vollständige Beschreibung aller Funktionen. Ich hab sowas schonmal in der Praxis gesehen, d.h. viele Sensoren und Lampen im Treppenhaus. Dieses Geflackere geht einem extrem auf den Keks.
Peter D. schrieb: > Ich hab sowas schonmal in der Praxis gesehen, d.h. viele Sensoren und > Lampen im Treppenhaus. Dieses Geflackere geht einem extrem auf den Keks. LOL. Ich auch. Und da ich von Natur aus neugierig und bisschen gemein bin: Treppe rauf, schnell zurück, wieder rauf, stehenbleiben, vorletzte Stuffe stehengeblieben, wieder zurück - gar nichts hat richtig funktioniert...
Ich bin auch skeptisch, was die praktische Anwendung betrifft. Letztlich haben sich die üblichen Zeitschalter, gut bewährt. Allenfalls könnte man die Schalter auf den Absätzen durch Bewegungsmelder ersetzen. Aber irgendwelche Reihenfolgen sind meiner Meinung nach großer Murks. Die Leute verhalten sich oft nicht rational. Portemonai vergessen. Ein langer Schwatz von erst drei und dann zwei Leuten. Etcpp. Und bei einem Umzug wimmeln dann mal leicht 5 +x Menschen herum, bei denen durch einfache Bewegungsmelder nicht mehr zu klären ist, wer sich da wohin bewegt. Vergiss es.
Vielen Dank für die vielen Ideen. Es ist übrigens ein Einfamilienhaus. Also so viele Menschen werden dort nicht gleichzeitig hoch und runter gehen. Wenn es einmal nicht funktioniert ist es auch ok. Aber im Regelfall sollte es klappen. Doch auf meine Frage ist keiner so wirklich eingegangen. Hier noch einmal... Kann ich ein Programm schreiben, welches die Abschaltreihenfolge der Bewegungsmelder erkennt und dann dementsprechend reagiert? Bsp. Also Bewegungsmelder 1 gibt ein high Signal und 2 ist noch auf null (Led iSt an)...dann geht 1 auch auf null ....dann geht es von oben nach unten aus. Die Bewegungsmelder sind schon mit Zeitrelais. Die Zeiten kann man von 5sec bis 5 min einstellen.
> Es ist übrigens ein Einfamilienhaus. Welchen Sinn macht da eine komplexe Ablaufsteuerung bei der Beleuchtung? Ich stelle mir ein oder 2 Etagen vor mit maximal einer Hand voll Lampen. > Kann ich ein Programm schreiben, welches die Abschaltreihenfolge > der Bewegungsmelder erkennt und dann dementsprechend reagiert? Möglich ist das ganz sicher. Die Frage ist, ob du das kannst. Wenn jeder programmieren könnte, wäre kein so gut bezahlter Job. Bei deinen Texten fürchte ich eher, dass du keine Lösung erarbeiten kannst, weil du schon die Aufgabe nicht sauber beschreiben kannst. Das ist übrigens der Unterschied zwischen "Programmierer" und "Softwareentwickler". Du wirst wohl einen Softwareentwickler brauchen, der Dir klipp und klar sagt, wie das Programm funktionieren soll. Ist nicht böse gemeint.
David schrieb: > Doch auf meine Frage ist keiner so wirklich eingegangen. Doch, bin ich. Aber du hast meine Fragen nicht beantwortet.
Nun, mal unabhängig davon, ob so eine Steuerung sinnvoll sein mag: Zunächst mal wäre der erste Schritt, sogenannte Anwendungsfälle hin zu schreiben - und das in einer formalisierten Form. Die konkrete Form ist zwar nicht entscheidend, aber aus der Beschreibung müssen alle möglichen Kombinationen von Sensorzuständen und den Zuständen der Lichter hervorgehen, sowie die zeitlichen Beziehungen. Diese Kombinationen leiten sich aus der konkreten Anordnung der Sensoren und Lichter sowie den möglichen Fällen von Betreten und Verlassen des Treppenhauses durch Menschen ab. Es tritt aber hierbei ein Erfahrungs- und Kenntnisproblem auf, dass Du eigentlich zu allererst lösen müsstest. Und das Du das Problem hast, lässt sich aus der Art Deiner Fragestellung herleiten. In der Regel wird ein Anfänger erst einmal einfache Anweisungen anzuwenden lernen. Dann, im zweiten Schritt, wird er einfache Bedingungen kennenlernen und deren Anwendung bei einfach Problemen. Etwa die Bestimmung des Absolutwertes einer Zahl. Es mag sein, dass Du solche Aufgaben schon lösen kannst. Danach werden die Bedingungsgefüge, wenn ich das hier einmal so nenne, komplexer und man wendet etwa nicht nur if-else an, sondern auch switch-cases. Also etwa Fälle, in denen ein Wert, mehrere alternativ auftretende Bedingungen erfüllen kann und jeweils unterschiedlich darauf reagiert werden muss. Auch das hast Du vielleicht schon angewendet. Im nächsten Schritt, gibt es dann Bedingungsgefüge, bei denen mehrere Werte auf Bedingungen geprüft werden müssen und deren mögliche Kombinationen unterschiedliche Reaktionen ergeben. Da gibt es zwei Unterbereiche: 1. Das Verhalten hängt nicht von vorherigen Zuständen ab und 2. Das Verhalten hängt doch von vorherigen Zuständen ab. (Darin gibt es nochmal zwei wesentliche Gruppen, aber das lassen wir hier mal weg). Deine Treppenhausmimik nun, betrifft den zweiten Fall. Das Paradigma dafür ist der Zustandsautomat (engl. Statemachine) und das formale Mittel zur Darstellung sind Zustandstabellen bzw. Zustandsgraphen. Dazu kannst Du hier im Forum z.B. den Artikel https://www.mikrocontroller.net/articles/Statemachine#Darstellung_von_Zustandsautomaten lesen. Weitere Darstellungen gibt es im Internet. Ein Zustandsautomat, der von mehreren Eingangswerten abhängt und eine Reihe von Zuständen hat ist nun aber mental auf Anhieb nicht wirklich vollständig zu beherrschen. Normalerweise näher man sich dem in dem man zunächst recht einfache Automaten beschreibt und implementiert und dann zu komplexeren fortschreitet. Ein Treppenhausdingsbums ist nun nicht eigentlich wahnsinnig kompliziert aber doch schon etwas fortgeschrittener. Es wäre gut, wenn Du Dich anhand des Artikels und weiterer Artikel im Internet darin einarbeitest. Das Du das nötig hast, geht aus der Art Deiner Fragestellung hervor. Denn jemand der einfache Zustandsautomaten kennt, wird auch erkennen, dass es sich hier um so etwas handelt, selbst wenn er an der schlichten Zahl der Eingangsvariablen und Zustände zunächst scheitern würde. Dann braucht derjenige Detailhilfe oder das man ihn an der richtigen Stelle mal vom Blatt hebt (wie eine Nadel von der Platte) und an der richtigen wieder aufsetzt - einfach weil er (und das passiert den meisten so und ist kein Zeichen von Dummheit oder so) in dem "Gewusel" verloren geht. Aber auch Dein Versuch, dazu ein fertiges Programm in Internet zu finden, deutet auf Defizite im Erfahrungsbereich hin, denn diese Dinge lassen sich nicht generisch (allgemein) beschreiben. Es gibt lediglich ein Paradigma (ein allgemeines Verfahren und eine Vorgehensweise), daß jedesmal auf neue von Anfang an angewendet werden muss. Ein zusätzliches Problem ist hier, dass Deine Art von Anwendung im Prinzip zwar, begrenzte Zustandszahlen hat, weil nur eine begrenzte Anzahl von Personen das Gebäude betreten kann, aber in der Praxis würde man - zumindest vorerst - nur von einer begrenzten Anzahl ausgehen und nach Fertigstellung der begrenzten Form (finit) einmal untersuchen, was für Auswirkungen eine unbegrenzte Anzahl hat (infinit). Aber das ist dann schon etwas verzwicktes, was man nur begrenzt erklären kann. Also: Der praktische Hinweis: Sofern die oben genannten Voraussetzungen gegeben sind, einschliesslich der Versuche mit einfachen Zustandsautomaten, skizzierst Du einen für die Treppenhausgeschichte. Dann sehen wir mal weiter.
Eine andere Variante, bei der man aber den Zusammenhang zum Automaten nicht gleich sieht, ist die Entscheidungstabelle. Es kommt auch darauf an, ob Dir eher verbale oder graphische Darstellungen liegen. Aber schaue es Dir einmal an. Der Punkt ist, das reale, praktisch relevante Zusammenhänge leicht mal zu sehr großen Zahlen von Zuständen bzw. Bedingungen führen. Und da kriegt man leicht mal den Frust, weil man, jedesmal, wenn man den Überblick verliert, wieder von vorne anfangen muss. Ich will Dir das sicher nicht ausreden, aber richte Dich auf eine große Anzahl Kaffeekannen ein und einige durchwachte Nächte. So. Viel Erfolg.
Wenn das deine zwei einzigen Probleme sind: David schrieb: > Doch auf meine Frage ist keiner so wirklich eingegangen. David schrieb: > Nun ist meine Frage...wie bekomme ich es hin, dass die > LED'S der einzelnen Stufen in folgender Reihenfolge abgeschalten?
1 | /* Pseudocode */ |
2 | für i von 1 bis 12 |
3 | LED[i] ausschalten |
4 | Pause ca. 100..200ms |
5 | nächstes i |
6 | // und umgekehrt |
David schrieb: > Wie kann ich also eine "Abschaltreihenfolge" von Inputs abfragen?
1 | /* Pseudocode */ |
2 | wenn Melder1 oder Melder2 'an' erkannt, dann: |
3 | Timer starten |
4 | Zeitdifferenz1 und Zeitdifferenz2 auf '0' setzen |
5 | warten: |
6 | Melder1 an? -> Zeit1 merken, Flag1 für 'an' setzen |
7 | Melder2 an? -> Zeit2 merken, Flag2 für 'an' setzen |
8 | wenn Flag1 auf 'an'-> Melder1 aus? Zeitdifferenz1 merken, Flag1 auf 'aus' |
9 | wenn Flag2 auf 'an'-> Melder2 aus? Zeitdifferenz2 merken, Flag2 auf 'aus' |
10 | wenn Flag1 und Flag2 auf 'aus' -> gehe zu 'fertig' |
11 | gehe zu 'warten' |
12 | fertig: |
13 | je nach Zeitdifferenzen Beleuchtung ausschalten |
Bewegungsmelder auf reichlich bemessene Verweildauer auf der Treppe einstellen.
Ein pragmatischer Ansatz : Sobald ein Melder angibt, wird das gesammte Treppenhaus, welche ja nur etwa 3 Stockwerke hoch sein kann fuer 3 minuten eingeschaltet. Wenn jemand stehenbleibt muss der eben mit der Hand winken, um den Sensor wieder auszuloesen. Das Tool der Wahl fuer solche Projekte nennt sich Zustandsdiagramm. Auf englisch State-event-diagram
Ralf G. schrieb: >> LED'S der einzelnen Stufen in folgender Reihenfolge abgeschalten?/* Pseudocode
1 | > für i von 1 bis 12 |
2 | > LED[i] ausschalten |
3 | > Pause ca. 100..200ms |
4 | > nächstes i |
5 | > // und umgekehrt |
Mit For..Next Schleife geht das bestimmt nicht so wie du es
geschrieben hast.
Ralf G. schrieb:
1 | > wenn Flag1 und Flag2 auf 'aus' -> gehe zu 'fertig' |
2 | > gehe zu 'warten' |
3 | > fertig: |
4 | > je nach Zeitdifferenzen Beleuchtung ausschalten |
Was ausschalten ? Wo hast du es oben überhaupt eingeschaltet ?
Marc V. schrieb: > Wo hast du es oben überhaupt eingeschaltet ? Ich verstehe zwar nicht, wieso dich das jetzt interessiert, aber darum ging es nicht. Denn: David schrieb: > wie bekomme ich es hin, dass die > LED'S der einzelnen Stufen in folgender Reihenfolge abgeschalten?
Ich wollte keine Komplettlösung (wäre zwar schön, aber ich würde das auch gerne selbst machen). Ich wollte nur einen Ansatz in welche Richtung ich mich einlesen muss. Danke für den Ansatz @Marc Vesely Das Programm habe ich erstmal so umgeschrieben wie sie es oben beschrieben haben Wann...unten und oben jeweils vor der Stufe Wie lange. ..wie ist das gemeint? Solange wie ich die Zeit an den Bewegungsmeldern einstelle
David schrieb: > Wie lange. ..wie ist das gemeint? Solange wie ich die Zeit an den > Bewegungsmeldern einstelle Marc V. schrieb: > Wann und wie lange wird eine Person vom Sensor erfasst ? Wann wird eine Person von deinem Sensor erfasst ? In 3 Meter, 5 Meter, 1 Meter Abstand ? Wie lange wird eine Person von deinem Sensor erfasst ? Bis zur Treppenmitte, nur oberes bzw. unteres Drittel, die ganze Treppe wird vom Sensor abgedeckt ?
Marc V. schrieb: > die ganze > Treppe wird vom Sensor abgedeckt ? Wenn das Licht unvermittelt ausgeht, wird die ganze Treppe von der Person abgedeckt. MfG Paul
Paul B. schrieb: > Wenn das Licht unvermittelt ausgeht, wird die ganze Treppe von der > Person abgedeckt. Auch ein möglicher Fall: Der obere Sensor geht an, 0,97s später geht der untere Sensor an ?
Die Lösung: Oma ist die Treppe runtergefallen. In diesem Fall wird Licht nicht ausgeschaltet.
Die Person wird ca einen halben Meter vor der Treppe erfasst....oben und unten ist gleich. Sobald die erste Stufe betreten wird , wird die Person noch mehr erfasst. Auch dieSeminar Fall von oben und unten gleich. Es ist eine 12 stufige Treppe
David schrieb: > Sobald die erste Stufe betreten wird , wird die Person noch mehr > erfasst. Auch dieSeminar Fall von oben und unten gleich. Ich hoffe, dass das ' nicht mehr erfasst ' heissen sollte. Im übrigen wirst du es kaum ohne Zustandstabellen und Flowcharts anständig lösen können. Mit 2 Sensoren, 2 Flags und 2 Zeitzählern sind es mindestens 2^6 = 64 mögliche Zustände. Und das auch nur dann, wenn man die Zeitzähler als abgelaufen / nicht abgelaufen nimmt. Ich hab dir etwas angehängt wie du ungefähr damit anfangen kannst - es ist fehlerhaft, aber gibt dir in etwa eine Idee womit du es zu tun hast - zu Ende bringen musst du es allerdings alleine.
Vielen Dank Ja da hast du richtig geraten. Eine Frage dazu...was ist TBD?
David schrieb: > Eine Frage dazu...was ist TBD? To be done? Also in deutsch: keine Ahnung, vielleicht faellt mir igendwann was ein. wendelsberg
wendelsberg schrieb: > Also in deutsch: keine Ahnung, vielleicht faellt mir igendwann was ein. Ich hätte es nicht besser erklärt.
:
Bearbeitet durch User
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.