.:$n!p3r:.
Cadet 3rd Year
- Registriert
- Dez. 2005
- Beiträge
- 51
Hallo,
Ich hab da mal eine Frage und zwar zum Thema LPT (Qbasic/Register).
Ich arbeite gerade an ein Projekt "Ampelschaltung per Modul über QBasic steuern".
Es ist eine Ampelschaltung für eine Kreuzung also mit 4 Ampeln. Ich habe jeweils 2 Ampeln paralell geschaltet. Das Modul ist eigentlich nur ein schalter mit Relais,Optokoplern und LED's.
Es gibt auch ein Eingangsmodul also welches Signale zum PC senden kann, dies wollt ich für eine Fussgängerampel benutzen.
Nur wie soll ich das mit den Schaltern für die Fussgänger lösen?
Geht es denn wenn ich ein High zustand sende und ein zusätztlichen empfange? oder gibt es dan einen Kurtzen? also senden und empfangen gleichzeitig?
Wenns funktioniert kann ich ein Ausgang dazu verwenden einen Eingang mit +5V zu treiben?
\\edit: Hab gemerkt das man die Eingänge nur auf Masse legt -.-
Ich bin dankbar für jede Anmerkung....
auch wenn es hier nicht unbedingt reingehört hier mal mein Quellcode, vllt könnt ihr Fehler finden oder etwas vereinfachen? THX
p.s Er ist noch nich fertig, ich muss noch die Optionen vervollständigen für die zeit der einzelnen Phasen...
Ich hab da mal eine Frage und zwar zum Thema LPT (Qbasic/Register).
Ich arbeite gerade an ein Projekt "Ampelschaltung per Modul über QBasic steuern".
Es ist eine Ampelschaltung für eine Kreuzung also mit 4 Ampeln. Ich habe jeweils 2 Ampeln paralell geschaltet. Das Modul ist eigentlich nur ein schalter mit Relais,Optokoplern und LED's.
Es gibt auch ein Eingangsmodul also welches Signale zum PC senden kann, dies wollt ich für eine Fussgängerampel benutzen.
Nur wie soll ich das mit den Schaltern für die Fussgänger lösen?
Geht es denn wenn ich ein High zustand sende und ein zusätztlichen empfange? oder gibt es dan einen Kurtzen? also senden und empfangen gleichzeitig?
Wenns funktioniert kann ich ein Ausgang dazu verwenden einen Eingang mit +5V zu treiben?
\\edit: Hab gemerkt das man die Eingänge nur auf Masse legt -.-
Ich bin dankbar für jede Anmerkung....
auch wenn es hier nicht unbedingt reingehört hier mal mein Quellcode, vllt könnt ihr Fehler finden oder etwas vereinfachen? THX
p.s Er ist noch nich fertig, ich muss noch die Optionen vervollständigen für die zeit der einzelnen Phasen...
Code:
'Sub und Function Deklaration
DECLARE SUB Abfrage (NowPhase!)
DECLARE SUB TimerP (Zeit!, NowPhase!)
DECLARE FUNCTION Fussgaengerampel (Schalter!, NowPhase!)
DECLARE SUB Warnleuchten ()
DECLARE SUB Phase1 ()
DECLARE SUB Phase2 (Opt2!)
DECLARE SUB Phase3 ()
DECLARE SUB Phase4 (Opt4!)
DECLARE SUB Phase5 ()
DECLARE SUB Anfang ()
'Deklaration
DIM Opt!
DIM Opt1!
DIM Opt2!
DIM Opt3!
DIM Opt4!
DIM OptwAn!
DIM OptwAus!
DIM OptPhase!
DIM WarnOpt!
DIM NowPhase!
DIM Phase!
DIM Zeit!
DIM sek!
DIM t!
' Globale Deklaration
DIM SHARED Gedrueckt!
DIM SHARED Schalter!
DIM SHARED Adresse%
DIM SHARED DatAdresse%
DIM SHARED StatAdresse%
DIM SHARED SteuAdresse%
DIM SHARED A1Rot!
DIM SHARED A2Rot!
DIM SHARED FA1Rot!
DIM SHARED FA2Rot!
DIM SHARED A1Gelb!
DIM SHARED A2Gelb!
DIM SHARED A1Gruen!
DIM SHARED A2Gruen!
DIM SHARED FA1Gruen!
DIM SHARED FA2Gruen!
DEF SEG = 0
Adresse% = PEEK(&H408) + PEEK(&H409) * 256
OUT (Adresse%), 0
OUT (Adresse% + 2), 11
'Aufruf des HauptProgramms
CALL Anfang
SUB Abfrage (NowPhase!)
SELECT CASE INP(StatAdresse%)
CASE IS = 63 '63 S56
Gedrueckt = 1
Schalter! = 1
LOCATE 10, 30
PRINT "Achtung Fussg„nger auf Ampel1!"
GOTO callFuss
CASE IS = 88 '95 S88
Gedrueckt = 1
Schalter! = 2
LOCATE 10, 30
PRINT "Achtung Fussg„nger auf Ampel2!"
GOTO callFuss
CASE IS = 104 '111 S104
Gedrueckt = 1
Schalter! = 1
LOCATE 10, 30
PRINT "Achtung Fussg„nger auf Ampel1!"
GOTO callFuss
CASE IS = 112 '119 S112
Gedrueckt = 1
Schalter! = 2
LOCATE 10, 30
PRINT "Achtung Fussg„nger auf Ampel2!"
GOTO callFuss
END SELECT
IF Gedrueckt! = 1 THEN
GOTO callFuss
END IF
GOTO ENDE
'Auswahl welche Phase war, um zu entscheiden was gemacht werden soll.
callFuss:
IF NowPhase = 1 OR NowPhase = 3 OR NowPhase = 5 THEN
IF Gedrueckt = 1 THEN
Gedrueckt = Fussgaengerampel(Schalter!, NowPhase!)
END IF
END IF
ENDE:
NowPhase = 0
END SUB
SUB Anfang
'****************************WERTZUORDNUNG*VARIABLEN****************************
'Gedrueckt auf 0 setzten
Gedrueckt! = 0
'Ampelfarben der Pinadressen zuorden
A1Rot! = 1
A2Rot! = 8
FA1Rot! = 64
FA2Rot! = 10
A1Gelb! = 2
A2Gelb! = 16
A1Gruen! = 4
A2Gruen! = 32
FA1Gruen! = 128
FA2Gruen! = 9
'Wertzuordnung der Option pausen von "Phasen 1-5" (Wartezeit in sec.)
Opt1! = 3
Opt2! = 3
Opt3! = 3
Opt4! = 3
opt5! = 3
opt6! = 3
'Wertzuordnung der Option pausen "Warnleuchten" (Wartezeit in sec.)
OptwAn! = 15
OptwAus! = 15
'Adressen zuordnen des LPT-Port
DatAdresse% = Adresse% 'Daten-Register
StatAdresse% = Adresse% + 1 'Status-Register
SteuAdresse% = Adresse% + 2 'Steuer-Register
'****************************WERTZUORDNUNG*VARIABLEN*ENDE***********************
Menu:
'Anzeige des ersten Men
CLS
PRINT "Projekt: Ampel mit QBasic ber den LPT-Port steuern."
LOCATE 2, 10
PRINT "Von Daniel Mller und Markus Trame"
LOCATE 3, 10
PRINT "Vom 10.07.07 bis 21.09.07"
COLOR 2
LOCATE 9, 23
PRINT "Ampelschaltung fr Kreuzung"
LOCATE 10, 23
PRINT "________________________________"
LOCATE 11, 23
PRINT "Menu"
'Optionen vom ersten Men
LOCATE 12, 27
PRINT "1 -Alle Ampelphasen durchlaufen"
LOCATE 13, 27
PRINT "2 -Alle Ampeln auf Gelb blinkend schalten"
LOCATE 14, 27
PRINT "3 -Programm beenden"
LOCATE 15, 27
PRINT "4 -Optionen"
LOCATE 17, 23
INPUT "Nr. der Option:", Phase!
CLS
'Auswahl der Eingabe von ersten Men
SELECT CASE Phase!
CASE IS = 1
GOTO AllePhasen
CASE IS = 2
GOTO Warnleuchten
CASE IS = 3
END
CASE IS = 4
GOTO Optionen
END SELECT
CLS
GOTO Menu
END
Optionen:
'Menu von Optionen
LOCATE 10, 27
PRINT "1 -Optionen der Phasen"
LOCATE 11, 27
PRINT "2 -Optionen der Warnbeleuchtung"
LOCATE 12, 27
PRINT "3 -Zurck zum Menu"
LOCATE 14, 23
INPUT "Nr. der Option:", Opt!
CLS
'Auswahl von Eingabe der Option
SELECT CASE Opt!
CASE IS = 1
GOTO Phasen
CASE IS = 2
GOTO WarnL
CASE IS = 3
GOTO Menu
END SELECT
CLS
GOTO Optionen
END
WarnL:
'Menu vom Warnleuchten
LOCATE 10, 27
PRINT "1 -Leuchtphase der GelbenLampen"
LOCATE 11, 27
PRINT "2 -Dunkelphase der GelbenLampen"
LOCATE 12, 27
PRINT "3 -Zurck"
LOCATE 13, 23
INPUT "Nr. der Option:", WarnOpt!
CLS
SELECT CASE WarnOpt!
CASE IS = 1
INPUT "Leuchtphase:", OptwAn!
CASE IS = 2
INPUT "Dunkelphase:", OptwAus!
CASE IS = 3
GOTO Optionen
END SELECT
CLS
GOTO WarnL
END
Phasen:
'Menu von den PhasenOptionen
LOCATE 10, 27
PRINT "1 -Phasendauer(1) Ampel1(Grn) Ampel2(Rot)"
LOCATE 11, 27
PRINT "2 -Phasendauer(2) Ampel1(Gelb)-Ampel1(Rot) Ampel2(Rot)-Ampel2(Rot/Gelb)"
LOCATE 12, 27
PRINT "3 -Phasendauer(3) Ampel1(Rot) Ampel2(Grn)"
LOCATE 13, 27
PRINT "4 -Phasendauer(4) Ampel1(Rot)-Ampel1(Rot/Gelb) Ampel2(Gelb)-Ampel2(Rot)"
LOCATE 14, 27
PRINT "5 -Phasendauer(5) Ampel1(Grn) Ampel2(Rot)"
LOCATE 15, 27
PRINT "6 -Zurck"
INPUT "Nr. der Option:", OptPhase!
CLS
LOCATE 5, 5
SELECT CASE OptPhase!
CASE IS = 1
INPUT "Phasendauer(1) in sec.", Opt1!
CASE IS = 2
INPUT "Phasendauer(1) in sec.", Opt2!
CASE IS = 3
INPUT "Phasendauer(1) in sec.", Opt3!
CASE IS = 4
INPUT "Phasendauer(1) in sec.", Opt4!
CASE IS = 5
INPUT "Phasendauer(1) in sec.", opt5!
CASE IS = 6
GOTO Optionen
END SELECT
CLS
GOTO Phasen
END
'Option: alle Phasen durchlaufen
AllePhasen:
'Fussgesteuerte schleife abbruch bei ESC-Tase
DO
CALL Phase1
NowPhase! = 1
CALL Abfrage(NowPhase!)
CALL TimerP(Opt1!, NowPhase!)
CALL Phase2(Opt2!)
NowPhase! = 2
CALL TimerP(Opt2!, NowPhase!)
CALL Phase3
NowPhase! = 3
CALL Abfrage(NowPhase!)
CALL TimerP(Opt3!, NowPhase!)
CALL Phase4(Opt4!)
NowPhase! = 4
CALL TimerP(Opt4!, NowPhase!)
CALL Phase5
NowPhase! = 5
CALL Abfrage(NowPhase!)
CALL TimerP(opt5!, NowPhase!)
LOOP UNTIL INKEY$ = CHR$(27)
END
'Option: Es werden alle Ampeln auf Gelb blinkend geschaltet
Warnleuchten:
'Fussgesteuerte schleife abbruch bei ESC-Taste
DO
LOCATE 12, 30
PRINT "Warnleuchten"
LOCATE 13, 30
PRINT "An in sec. :";
PRINT OptwAn
LOCATE 14, 30
PRINT "Aus in sec. :";
PRINT OptwAus
OUT (DatAdresse%), A1Gelb! + A2Gelb!
SOUND 32000, OptwAn!
IF INKEY$ = "+" THEN
OptwAn! = OptwAn! + 1
IF OptwAn! > 70 THEN
OptwAn! = 15
END IF
OptwAus! = OptwAn!
END IF
IF INKEY$ = "-" THEN
OptwAn! = OptwAn! - 1
IF OptwAn! <= 0 THEN
OptwAn! = 1
END IF
OptwAus! = OptwAn!
END IF
OUT (DatAdresse%), 0
CLS
SOUND 32000, OptwAus!
LOOP UNTIL INKEY$ = CHR$(27)
END
END SUB
FUNCTION Fussgaengerampel (s!, NowPhase!)
IF s! = 1 THEN
SELECT CASE NowPhase!
CASE IS = 1
OUT (SteuAdresse%), FA2Rot
Fussgaengerampel = 1
CASE IS = 3
OUT (DatAdresse%), A1Rot + A2Gruen + FA1Gruen
OUT (SteuAdresse%), FA2Rot
SLEEP 5
Fussgaengerampel = 0
CASE IS = 5
OUT (SteuAdresse%), FA2Rot
Fussgaengerampel = 1
END SELECT
ELSEIF s! = 2 THEN
SELECT CASE NowPhase
CASE IS = 1
OUT (SteuAdresse%), FA2Gruen
SLEEP 5
Fussgaengerampel = 0
CASE IS = 3
OUT (DatAdresse%), A1Rot + A2Gruen + FA1Rot
OUT (SteuAdresse%), FA2Rot
Fussgaengerampel = 1
CASE IS = 5
OUT (SteuAdresse%), FA2Rot
Fussgaengerampel = 1
END SELECT
END IF
END FUNCTION
SUB Phase1
'Setzt Ampel1 auf Grn und Ampel2 auf Rot. FA1 Rot FA2 Rot
CLS
LOCATE 10, 23
PRINT "Ampel1 [Grn]"
LOCATE 11, 23
PRINT "Ampel2 [Rot]"
OUT (DatAdresse%), A1Gruen! + A2Rot! + FA1Rot
'Fussg„ngerampel2 auf Rot
OUT (SteuAdresse%), FA2Rot!
END SUB
SUB Phase2 (Opt2!)
'Setzt Ampel1 auf Gelb und Ampel2 auf Rot
CLS
LOCATE 10, 23
PRINT "Ampel1 [Gelb]"
LOCATE 11, 23
PRINT "Ampel2 [Rot]"
OUT (DatAdresse%), A1Gelb + A2Rot + FA1Rot
OUT (SteuAdresse%), FA2Rot
NowPhase! = 2
CALL TimerP(Opt2!, NowPhase!)
'Setzt Ampel1 auf Rot und setzt Ampel2 auf Rot/Gelb
CLS
LOCATE 10, 23
PRINT "Ampel1 [Rot]"
LOCATE 11, 23
PRINT "Ampel2 [Rot/Gelb]"
OUT (DatAdresse%), A1Rot + A2Rot + A2Gelb + FA1Rot
OUT (SteuAdresse%), FA2Rot
END SUB
SUB Phase3
'Setzt Ampel1 auf Rot und Ampel2 auf Grn
CLS
LOCATE 10, 23
PRINT "Ampel1 [Rot]"
LOCATE 11, 23
PRINT "Ampel2 [Grn]"
OUT (DatAdresse%), A1Rot + A2Gruen + FA1Rot
OUT (SteuAdresse%), FA2Rot
END SUB
SUB Phase4 (Opt4!)
'Setzt Ampel1 auf Rot und l„sst Ampel2 auf Gelb
CLS
LOCATE 10, 23
PRINT "Ampel1 [Rot]"
LOCATE 11, 23
PRINT "Ampel2 [Gelb]"
OUT (DatAdresse%), A1Rot + A2Gelb + FA1Rot
OUT (SteuAdresse%), FA2Rot
NowPhase! = 4
CALL TimerP(Opt4!, NowPhase!)
'Setzt Ampel1 auf Rot/Gelb und Ampel2 auf Rot
CLS
LOCATE 10, 23
PRINT "Ampel1 [Rot/Gelb]"
LOCATE 11, 23
PRINT "Ampel2 [Rot]"
OUT (DatAdresse%), A1Rot + A1Gelb + A2Rot + FA1Rot
OUT (SteuAdresse%), FA2Rot
END SUB
SUB Phase5
'Setzt Ampel1 auf Grn und Ampel2 auf Rot
CLS
LOCATE 10, 23
PRINT "Ampel1 [Grn]"
LOCATE 11, 23
PRINT "Ampel2 [Rot]"
OUT (DatAdresse%), A1Gruen + A2Rot + FA1Rot
OUT (SteuAdresse%), FA2Rot
END SUB
SUB TimerP (Zeit!, NowPhase!)
sek! = Zeit!
t! = TIMER
WHILE t! + sek! > TIMER
IF INKEY$ = CHR$(27) THEN END
CALL Abfrage(NowPhase!)
WEND
END SUB
Zuletzt bearbeitet: