Arne schrieb:
> Jede dieser Lichtschranken wird jetzt unabhängig von den anderen für
> sagen wir ca. 500ms unterbrochen, die genaue Länge der Signale ist
> jedoch bei jedem Signal (nicht nur bei jedem Kanal) individuell
> unterschiedlich.
> Hat jemand eine Idee wie ich die Signale sinnvoll zählen kann?
Du willst vermutlich eine funktionierende Personenzählung mittels
Lichtschränke. Da haben sich schon wesentlich kompetentere Leute die
Zähne dran ausgebissen. Also gleich vorbeugend: eine perfekt
funktionierende Lösung dafür ist theoretisch und deshalb natürlich auch
praktisch unmöglich. Nur, wenn mittels baulicher Maßnahmen eine
Personenvereinzelung vorgenommen wird, ist eine Lösung realisierbar, die
zumindest solange recht zuverlässig funktioniert, wie es keine Absicht
gibt, diese auszutricksen.
Wie auch immer: Deine Definition ist doch schon fast hinreichend für
eine sinnvolle Zählung (wie gesagt: wenn es eine physische
Personenvereinzelung gibt). Die geforderte Mindestlänge für eine
Unterbrechung soll also 500ms sein. Es fehlt noch die Definition dafür,
wie lange innerhalb so einer Unterbrechung diese Unterbrechung auch mal
wieder aufgehoben sein darf, ohne daß das zu einer Mehrfachzählung
führt. Genau diese beiden Größen sind dann letztlich der Knackpunkt der
Sache. Wenn man clever googelt, gibt es sogar dazu Statistiken zu
finden...
Der Rest ist triviale Programmierung: Flankendetektion, Timeouts und
Statusmaschinen.
> Ich möchte das ganze gerne in Bascom programmieren, eine andere Sprache
> beherrsche ich momentan nicht.
Das Verrückte ist: Wenn man programmieren kann (d.h. im Wesentlichen
einfach nur: wenn man logisch denken kann), ist die Sprache weitgehend
egal. Man muß sie halt nur lernen, um sie benutzen zu können, d.h.:
entscheiden zu können, wie man das Problem mit den verfügbaren
Sprachmitteln umsetzen kann. Dazu muß man im Minimum aber wenigstens
alle wichtigen Features der verwendete Sprache kennen...
Du kannst aber offensichtlich nichtmal wirklich BASCOM, denn dein
Problem scheint einfach die Zahl der Lichtschranken zu sein, d.h.: du
hast wohl nicht gelernt, daß sowas wie Datenstrukturen und/oder Felder
existiert und wie man das Zeug sinnvoll benutzt, wenn man dieselbe nicht
völlig triviale Sache für mehr als eine Instanz von Irgendwas tun will.
Wie kannst du das lernen? Ganz einfach: systematisch.
1) Implementiere den Kram erstmal für nur genau eine Lichtschranke mit
dem, was du bisher kannst.
2) Überlege, welche der im Programm verwendeten Variablen für die
Lichtschrankenfunktion selber relevant ist.
3) Fasse diese Variablen zu einer Datenstruktur zusammen.
4) Schreibe dein Programm so um, daß des statt mit den ursprünglichen
Einzelvariablen mit dieser Datenstruktur arbeitet.
5) Lerne, was Arrays sind.
6) Erzeuge ein Array deiner Datenstruktur mit sovielen Elementen, wie es
Lichtschranken gibt. Schreibe deine Datenstruktur auf irgendeine
Arrayposition, bloß nicht auf die erste.
7) Schreibe dein Programm so um, daß es mit der dieser Datenstruktur
irgendwo im Array umgehen kann. Schreibe sie zum Test immer mal wieder
auf irgendeine andere Position. Sorge dafür, daß diese Position
programmweit gültig an genau einer Stelle festgelegt werden kann.
8) Letzter Schritt: Schreibe dein Programm so um, daß es alles, was es
mit dem einen Arrayelement tut, mit allen gleichermaßen tut.
Fertig. Und du hast nebenbei ganz wesentliche Grundlagen des
Programmierens ganz allgemein gelernt. Dann du wirst bald auch
herausfinden, daß auch andere Sprachen Datenstrukturen, Arrays und
Kontrollstrukturen wie If/else/endif oder for/next anbieten, auch wenn
sich die Syntax im Detail unterscheidet, am Ende ist es immer nur wieder
ein- und dieselbe langweilige Soße. Jedenfalls solange du im Bereich der
Anweisungssprachen bleibst...