 |
Das deutsche QBasic- und FreeBASIC-Forum Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Gremlin

Anmeldungsdatum: 12.12.2004 Beiträge: 142 Wohnort: Heinsberg
|
Verfasst am: 04.01.2005, 23:22 Titel: Kicker-Torzähler |
|
|
Hallo!
Ich habe folgendes "Problem":
Für einen Freund wollte ich jetzt eine Anlage für seinen Kicker bauen, der die gefallenen Tore zählt, und zwar mithilfe von 2 Lichtschranken.
Das Programm habe ich nun fertig geschrieben, kann es aber nicht ausprobieren, weil mir, außer vielleicht Draht, alles für die Schaltung fehlt.
Allerdings habe ich keine Lust, da während der Schulzeit noch dranzuhängen, deshalb wollte ich fragen, ob jemand die Lust verspührt, sich den Code mal durchzugucken und mich auf grobe Fehler aufmerksam zu machen.
Noch nicht Eingebautes: Hilfe; Datei editieren und berücksichtigen; Üngültigkeit eines Treffers
Here it comes:
Code: | ' ##########################################################################
' K I C K E R - T O R Z Ž H L E R
' ##########################################################################
'
' Roman Matzutt, Januar 2005
' Gremlin02@web.de
'
' Dieses Programm ist daf?r bestimmt, die Torz„hler eines Kickers
' abzuschaffen, und der Streit, der manchmal damit verbunden ist!
'
' Eine Schaltung, die dazu ben”tigt wird:
' * IR-Diode an Pin 2 (4)
' * Fotodiode/-transistor Kollektor an Pin 3 (5)
' * Ermitter an Pin 15 (13)
' * Ein Taster zwischen Pin 6 und Pin 12 (ung?ltig)
' * Ein Taster zwischen Pin 7 und Pin 10 (Ende*)
' * Ende separat, denn so kann man alles "runterfahren".
'
' Diese Schaltung ist nat?rlich im Kicker zu integrieren...
' Adressen definieren:
Offset0% = &H378 + 0
Offset1% = &H378 + 1
' Individuelle Angaben (max. Tore, Wartezeit) aus Datei lesen:
OPEN "kicker.dat" FOR INPUT AS #1
IF NOT EOF(1) THEN INPUT #1, max.Tore% ELSE max.Tore% = 9
IF NOT EOF(1) THEN INPUT #1, Wartezeit% ELSE Wartezeit% = 3
CLOSE #1
' Grundlegender Bildschirmaufbau:
COLOR 0, 7
CLS
COLOR 15, 1
PRINT " "
PRINT " K I C K E R - T O R Z Ž H L E R "
PRINT " "
COLOR 0, 3
PRINT " <F1> Hilfe <F2> Tore zum Sieg <F3> Wartezeit nach Tor <ESC> Ende "
COLOR 0, 7
LOCATE 24, 66
PRINT "¸ Roman Matzutt";
' Ausg„nge aktivieren:
OUT Offset0%, 63
' Hauptschleife:
DO
StatusBlau% = (INP(Offset1%) AND 8) / 8
IF StatusBlau% = 0 THEN GOSUB TorBlau
StatusRot% = (INP(Offset1%) AND 16) / 16
IF StatusRot% = 0 THEN GOSUB TorRot
StatusUng% = (INP(Offset1%) AND 32) / 32
IF StatusUng% = 1 THEN GOSUB Ungueltig
StatusEnde% = (INP(Offset1%) AND 64) / 64
IF StatusEnde% = 1 THEN
DO WHILE StatusEnde% = 1
start! = TIMER
IF TIMER > start! + 3 THEN GOSUB Ende
LOOP
END IF
LOOP
TorRot:
ToreRot% = ToreRot% + 1
FOR a = 1 TO LEN(LTRIM$(RTRIM$(STR$(ToreRot%))))
Ziffer% = VAL(MID$(LTRIM$(RTRIM$(STR$(ToreRot%))), a, 1))
SELECT CASE Ziffer%
CASE 1
RESTORE D1
CASE 2
RESTORE D2
CASE 3
RESTORE D3
CASE 4
RESTORE D4
CASE 5
RESTORE D5
CASE 6
RESTORE D6
CASE 7
RESTORE D7
CASE 8
RESTORE D8
CASE 9
RESTORE D9
CASE 0
RESTORE D0
END SELECT
FOR b = 1 TO 5
READ line$(b)
LOCATE 9 + b, (20 - (LEN(STR$(Ziffer%))) / 2) + 7 * (a - 2)
COLOR 4, 7
PRINT line$(b)
NEXT b
NEXT a
RETURN
TorBlau:
ToreBlau% = ToreBlau% + 1
FOR a = 1 TO LEN(LTRIM$(RTRIM$(STR$(ToreBlau%))))
Ziffer% = VAL(MID$(LTRIM$(RTRIM$(STR$(ToreBlau%))), a, 1))
SELECT CASE Ziffer%
CASE 1
RESTORE D1
CASE 2
RESTORE D2
CASE 3
RESTORE D3
CASE 4
RESTORE D4
CASE 5
RESTORE D5
CASE 6
RESTORE D6
CASE 7
RESTORE D7
CASE 8
RESTORE D8
CASE 9
RESTORE D9
CASE 0
RESTORE D0
END SELECT
FOR b = 1 TO 5
READ line$(b)
LOCATE 9 + b, (20 - (LEN(STR$(Ziffer%))) / 2) + 7 * (a - 2)
COLOR 1, 7
PRINT line$(b)
NEXT b
NEXT a
RETURN
Ende:
END
D1:
DATA " ÜÛÛ "
DATA "ßßÛÛ "
DATA " ÛÛ "
DATA " ÛÛ "
DATA "ßßßßßß"
D2:
DATA "ÜÛßßÛÜ"
DATA " ÜÛß"
DATA " ÜÛß "
DATA "ÛÛ ÜÜ"
DATA "ßßßßßß"
D3:
DATA "ÜÛßßÛÜ"
DATA " ÛÛ"
DATA " ßßÛÜ"
DATA "ÜÜ ÛÛ"
DATA " ßßßß "
D4:
DATA " ÜÛÛ "
DATA "ÜÛßÛÛ "
DATA "ÛÜÜÛÛÜ"
DATA " ÛÛ "
DATA " ßßßß"
D5:
DATA "ÛÛßßßß"
DATA "ÛÛÜÜÜ "
DATA " ÛÛ"
DATA "ÜÜ ÛÛ"
DATA " ßßßß "
D6:
DATA " ÜÛßß "
DATA "ÛÛ "
DATA "ÛÛßßÛÜ"
DATA "ÛÛ ÛÛ"
DATA " ßßßß "
D7:
DATA "ÛÛßßÛÛ"
DATA " ÜÛß"
DATA " ÛÛ "
DATA " ÛÛ "
DATA " ßß "
D8:
DATA "ÜÛßßÛÜ"
DATA "ÛÛ ÛÛ"
DATA "ÜÛßßÛÜ"
DATA "ÛÛ ÛÛ"
DATA " ßßßß "
D9:
DATA "ÜÛßßÛÜ"
DATA "ÛÛ ÛÛ"
DATA " ßßßÛÛ"
DATA " ÜÛß "
DATA " ßß "
D0:
DATA "ÜÛßßÛÜ"
DATA "ÛÛ ÛÛ"
DATA "ÛÛ ÛÛ"
DATA "ÛÛ ÛÛ"
DATA " ßßßß " |
Ü == CHR$(220)
Û == CHR$(219)
ß == CHR$(223)
Dummer Thread, ich weiß ;o) _________________ Tja, hier konnte ihre Werbung stehen.
Pech gehabt.  |
|
Nach oben |
|
 |
Skilltronic

Anmeldungsdatum: 10.09.2004 Beiträge: 1148 Wohnort: Köln
|
Verfasst am: 05.01.2005, 03:31 Titel: |
|
|
Hallo
Zum einen solltest du das mit der Datei, in der die pers. Einstellungen gespeicht werden noch anders machen. Z.B. eine Fehlerbehandlung, die eine Art Defaultdatei mit Standardwerten anlegt, wenn sie nicht gefunden wird. Dann ist das Ganze auch etwas umständlich geschrieben. Ich habe mal versucht, den Teil mit der Anzeige etwas kompakter zu machen. Ausserdem kannst du die Grösse, Farbe usw. der Grafik relativ einfach ändern.
Code: | 'Taste 1 = Tor fue?r Blau
'Taste 2 = Tor f?uer Rot
'Taste 3 = Zuruecksetzen
'Ende mit ESC
SCREEN 12
CLS
DIM pixel(9, 6, 9)
GOSUB zahlen
GOSUB punkte
GOSUB null
DO
DO
DO
t$ = INKEY$
LOOP WHILE t$ = ""
IF t$ = CHR$(27) THEN END
t = ASC(t$) - 48
IF t = 3 THEN GOSUB null
LOOP WHILE t < 1 OR t > 2
tor(t) = tor(t) + 1
IF tor(t) = 10 THEN GOSUB null ELSE GOSUB anzeige
LOOP
null:
FOR t = 1 TO 2
tor(t) = 0
GOSUB anzeige
NEXT
RETURN
anzeige:
FOR x = 0 TO 6
xb = x * 20 + (t - 1) * 220 + 140
FOR y = 0 TO 9
yb = y * 20 + 120
LINE (xb, yb)-(xb + 18, yb + 18), pixel(tor(t), x, y), BF
NEXT
NEXT
RETURN
zahlen:
FOR a = 0 TO 9
LOCATE 1, 1
PRINT USING "#"; a
FOR x = 0 TO 6
FOR y = 0 TO 9
pixel(a, x, y) = POINT(x, y + 2)
PSET (x, y + 2), 0
NEXT
NEXT
NEXT
RETURN
punkte:
FOR x = 300 TO 320 STEP 20
FOR y = 160 TO 180 STEP 20
LINE (x, y)-(x + 18, y + 18), 15, BF
LINE (x, y + 80)-(x + 18, y + 98), 15, BF
NEXT
NEXT
RETURN
|
Wie hast du dir denn das mit der Lichtschranke vorgestellt ? Du müsstest ja die gesamte Fläche des Tores abdecken - da wird eine am Boden nicht ausreichen. Bei mehreren hast du dann das Problem, das sie sich überlagern. Und du musst Störungen durch Tageslicht etc. ausschalten. Eine einfache Schaltung aus IR Sende- und Empfängerdiode wird nicht ausreichen, um ein ordentliches Ergebnis zu bekommen. Da musst du wahrscheinlich etwas mehr Hardwareaufwand treiben. Ich hätte auch schon ein paar Ideen dazu.
Gruss
Skilltronic _________________ Elektronik und QB? www.skilltronics.de ! |
|
Nach oben |
|
 |
Gremlin

Anmeldungsdatum: 12.12.2004 Beiträge: 142 Wohnort: Heinsberg
|
Verfasst am: 05.01.2005, 09:52 Titel: |
|
|
Hi, deinen Code geh ich erst nach dem Posten richtig durch.
Also, aus dem Kicker soll der Boden im Tor genommen werden (Bis jetzt muss man den hochdrücken, damit der Ball wieder rauskommt.), um einen "Kasten" dranzuhängen, durch den der Ball dannn anh unten fällt und aufgefangen wird. Im Kasten sollte dann auch die Schranke untergebracht werden.
Wenn das Licht verschwinden muss, dann könnte man doch so 3/4 des Tores wieder mit einem abschüssigen Boden versehen und dann das Loch mit Papier bedecken, das nur an einer Seite fest ist, wenns auch nciht stabil ist. _________________ Tja, hier konnte ihre Werbung stehen.
Pech gehabt.  |
|
Nach oben |
|
 |
Skilltronic

Anmeldungsdatum: 10.09.2004 Beiträge: 1148 Wohnort: Köln
|
Verfasst am: 05.01.2005, 13:52 Titel: |
|
|
Hallo
Ich kann mir nicht so richtig vorstellen, wie dein Kickertisch aussieht, da weisst du wohl am besten, wie die Lichtschranke plaziert werden muss. Vielleicht könnte man ja auch einen Mikroschalter unter den Boden im Tor einbauen, der durch das Gewicht des Balles hinunter gedrückt wird. Bei einer Lichtschranke müsste man nämlich fast noch eine Triggerschaltung einbauen, um saubere Digitalwerte zu bekommen. Ich würde übrigens den COM-Port statt der Druckerschnittstell benutzen. Der ist Kurzschlussfest und praktisch unzerstörbar, währen der LPT da relativ empfindlich ist.
Das Ganze liesse sich auch mit relativ geringem Aufwand ganz ohne PC realisieren. Ein IC mit zwei 4-Bit Zählern für die Tore, zwei BCD-Decoder und zwei 7-Segment Aneigen. Alles zusammen (mit Schaltern oder Lichtschranken) dürfte maximal 10 Euro kosten.
Gruss
Skilltronic _________________ Elektronik und QB? www.skilltronics.de ! |
|
Nach oben |
|
 |
Gremlin

Anmeldungsdatum: 12.12.2004 Beiträge: 142 Wohnort: Heinsberg
|
Verfasst am: 05.01.2005, 14:09 Titel: |
|
|
Hallo.
Von ICs und Konsorten habe ich leider keine Ahnung, sonst würde ich das auch gerne machen.
Mit der Idee eines Tasters habe ich auch schon gespielt, aber mechanisch wäre das bestimmt aufwendig, da man einen Schalter braucht, der von der Gewichtskraft + Schwerkraft des Balles, nicht aber alleine von der Gewichtskraft dessen betätigt wird, diese Spanne ist leider nur sehr klein, da muss man schon viel ausprobieren.
Oder meisnt du gar irgendwas spezielles? _________________ Tja, hier konnte ihre Werbung stehen.
Pech gehabt.  |
|
Nach oben |
|
 |
Skilltronic

Anmeldungsdatum: 10.09.2004 Beiträge: 1148 Wohnort: Köln
|
Verfasst am: 05.01.2005, 14:28 Titel: |
|
|
Hallo
Der Unterschied zwischen Gewichts- und Schwerkraft will sich mir nicht so ganz erschliessen. Du sprachst von einer Bodenplatte im Tor, auf der der Ball zu liegen kommt. Wenn du unter die einen Schalter so montierst, das er vom Gewicht des Balle ausgelöst wird, reicht das ja schon. Um eine doppelte Zählung durch Herumspringen des Balles zu vermeiden müsste Hard- oder Sotwaremässig noch ein Monoflop eingebaut werden, der z.B. nur eine Zählung pro Sekunde zulässt oder so. Wenn die den Boden nach oben klappst um den Ball auszuwerfen, wird die Schaltung wieder "scharf" gemacht.
Die Lösung mit ICs wäre mit nicht viel mehr Aufwand verbunden, als es an den Rechner anzuschliessen. Einen Schaltplan dazu könnte ich dir evtl. erstellen. Das wäre dann aber ein sehr QB-fernes Thema und in meinem eigenen Forum vielleicht besser aufgehoben
Gruss
Skilltronic _________________ Elektronik und QB? www.skilltronics.de ! |
|
Nach oben |
|
 |
Sebastian Administrator

Anmeldungsdatum: 10.09.2004 Beiträge: 5969 Wohnort: Deutschland
|
|
Nach oben |
|
 |
Gremlin

Anmeldungsdatum: 12.12.2004 Beiträge: 142 Wohnort: Heinsberg
|
Verfasst am: 05.01.2005, 15:00 Titel: |
|
|
Hallo.
Stimmt ja!
So eine Pause müsste ich ja auch bei einer Lichtschranke einbauen, denn sonst könnte er ja öfters als nur 2x zählen können.
Dieser Unterschied:
Ich bezweifele selber, dass es wirklich Gewichtskraft ist, aberm ich meine folgenen Unterschied: Die Kraft, die auf den Schalter wirkt, wenn der Ball aus einer Höhe druaf fällt (ich schätze, daswerden so 10cm), und die, die wirkt, wenn der Ball einfach drauf liegt, aber ich könnte dann ja eine Schräge bauen, sodass der Ball nur einmal drauffällt und dann runterrollt.
Schaltplan: Wenn du dir diese Mühe wirklich machen willst, dann kannst du mir den ja als eMail schicken, wahrscheinlich haben wir die ICs auch da (kleiner Betrieb meines Vaters, er ist nur nicht mit Verbindung zum PC uä. vertraut.) _________________ Tja, hier konnte ihre Werbung stehen.
Pech gehabt.  |
|
Nach oben |
|
 |
Skilltronic

Anmeldungsdatum: 10.09.2004 Beiträge: 1148 Wohnort: Köln
|
Verfasst am: 05.01.2005, 15:15 Titel: |
|
|
Hallo
Um einen Schaltplan erstellen zu können, bräuchte ich schon noch ein paar Spezifikationen. Mit oder ohne PC, mit Lichtschranke oder Schalter, max. Toranzahl einstellbar oder immer Sieg beim 10. Tor usw.
Zitat: | Anregung: Skill, mit solchen Schaltplänen und Erklärungen könntest du deiner Seite eine ganze Menge mehr Inhalt einhauchen! |
Ich weiss...
Gruss
Skilltronic _________________ Elektronik und QB? www.skilltronics.de ! |
|
Nach oben |
|
 |
Gremlin

Anmeldungsdatum: 12.12.2004 Beiträge: 142 Wohnort: Heinsberg
|
Verfasst am: 05.01.2005, 15:19 Titel: |
|
|
Alle möglichen Kombinationen
Quatsch, also: Ohne PC, Taster, Bis 9 Tore (fest).
Und ich bedanke mich schon imVorraus! _________________ Tja, hier konnte ihre Werbung stehen.
Pech gehabt.  |
|
Nach oben |
|
 |
|
|
Du kannst keine Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum nicht antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen.
|
|