Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

Ampelsteuerung funktioniert nicht

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu QBasic.
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
sv_t



Anmeldungsdatum: 23.05.2006
Beiträge: 6

BeitragVerfasst am: 23.05.2006, 17:30    Titel: Ampelsteuerung funktioniert nicht Antworten mit Zitat

Hallo,

ich habe eine Relaiskarte, die ich über den LPT1-Port ansteuern möchte.
Als funktion soll etwas ähnliches wie eine Ampelsteuerung herauskommen.
Ich verwende qbasic 4.5 (bin absoluter Anfänger in qbasic)

Nun soll folgendes ablaufen:

Bei einem Schießwettkampf habe ich bestimmte aktive und passive Phasen, d.h. bei rot darf ich nicht schießen, bei gelb kann ich mich vorbereiten, bei grün darf ich schießen,
bei gelb muss ich ablegen und sichern, bei rot ist Schluss.

So läuft mein Programm ab:

- Programm starten
- alle Ausgänge an LPT1 auf 0 setzen
- setzen von Ausgang 1 (Lampe rot)
- warten auf Eingabe (z.B. Leertaste)
- starten des Timers (10 sec)
- rücksetzen von Ausgang 1 (Lampe rot)
- setzen von Ausgang 2 (Lampe gelb)
- starten des Timers (10 sec)
- rücksetzen von Ausgang 2 (Lampe gelb)
- setzen von Ausgang 3 (Lampe grün)
- starten des Timers (10 sec)
- rücksetzen von Ausgang 3 (Lampe grün)
- setzen von Ausgang 2 (Lampe gelb)
- starten des Timers (10 sec)
- rücksetzen von Ausgang 2 (Lampe gelb)
- setzen von Ausgang 1 (Lampe rot)
- springe zum Anfang um mit Leertaste neu zu starten

So habe ich programmiert:

Code:


CLS
OUT 888,0
PRINT "Ampelsteuerung"
PRINT " "
OUT 888,1
PRINT "ROT"
PRINT "Start mit Leertaste"
DO
LOOP UNTIL TIME$ = "00:00:10"
OUT 888,2
PRINT "GELB"
DO
LOOP UNTIL TIME$ = "00:00:10"
OUT 888,3
PRINT "GRÜN"
DO
LOOP UNTIL TIME$ = "00:00:10"
OUT 888,2
PRINT "GELB"
DO
LOOP UNTIL TIME$ = "00:00:10"
OUT 888,1
PRINT "ROT"




Nun habe ich folgende Fragen:

- Wie baue ich die Funktion INKEY$=CHR$( ) ein und welcher ASCII-Code steht für das Leerzeichen?
- Warum geht mein Programm nur bis PRINT "Start mit Leertaste", also warum wird nicht gezählt?
- Wie springe ich vom Ende wieder zum Anfang?

Vielen Dank für Eure Hilfe,
freundliche GRüße,
Sven.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
jb



Anmeldungsdatum: 14.01.2005
Beiträge: 2010

BeitragVerfasst am: 23.05.2006, 17:34    Titel: Antworten mit Zitat

Zitat:

- Wie baue ich die Funktion INKEY$=CHR$( ) ein und welcher ASCII-Code steht für das Leerzeichen?

Leerzeichen = chr$(32)
Code:

E$ = INKEY$
IF E$ = CHR$(32) THEN ...


Zitat:
- Warum geht mein Programm nur bis PRINT "Start mit Leertaste", also warum wird nicht gezählt?

TIME$ gibt die Uhrzeit zurück, nicht die verstrichenen Sekunden. Verwende lieber TIMER:
Code:

T = TIMER
DO
LOOP UNTIL TIMER > T + 10

Das wartet auch 10 Sekunden.

Zitat:
- Wie springe ich vom Ende wieder zum Anfang?

Mach um dein ganzes Programm ein
Code:

DO
 ' Programm
LOOP

Das wäre dann eine Endlosschleife. Wenn es sich bei Escape beenden lassen soll, dann mache Folgenes:
Code:

DO
 E$ = INKEY$

 ' Hier kommt dein Programm

LOOP UNTIL E$ = CHR$(27)
' ASCII 27 = Escape


Viel Spaß damit lächeln

jb
_________________
Elektronik und Programmieren
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
MisterD



Anmeldungsdatum: 10.09.2004
Beiträge: 3071
Wohnort: bei Darmstadt

BeitragVerfasst am: 23.05.2006, 18:41    Titel: Antworten mit Zitat

du kannst ein leerzeichen auch einfach als " " angeben..
_________________
"It is practically impossible to teach good programming to students that have had a prior exposure to BASIC: as potential programmers they are mentally mutilated beyond hope of regeneration."
Edsger W. Dijkstra
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
sv_t



Anmeldungsdatum: 23.05.2006
Beiträge: 6

BeitragVerfasst am: 23.05.2006, 19:33    Titel: Antworten mit Zitat

Hallo,

vielen Dank für die schnellen Antworten.

Habe das Programm mal wie folgt umgeändert:

Code:


DO
  E$ = INKEY$

  CLS
  OUT 888,0

  PRINT "Ampelsteuerung"
  PRINT " "

  OUT 888,1
  PRINT "ROT"
  PRINT " "
  PRINT "Start mit Leertaste, Abbruch mit ESC"

  E$ = INKEY$
  IF E$ = CHR$(32) THEN

  CLS
  OUT 888,1
  PRINT "ROT"

  T = TIMER
  DO
  LOOP UNTIL TIMER > T + 10

  OUT 888,2
  PRINT "GELB"

  T = TIMER
  DO
  LOOP UNTIL TIMER > T + 10

  OUT 888,3
  PRINT "GRÜN"

  T = TIMER
  DO
  LOOP UNTIL TIMER > T + 10

  OUT 888,2
  PRINT "GELB"

  T = TIMER
  DO
  LOOP UNTIL TIMER > T + 10

  OUT 888,1
  PRINT "ROT"

  END IF

LOOP UNTIL E$ = CHR$(27)



Das Durchzählen funktioniert ganz gut.
Allerdings habe ich noch ein kleines Problem gleich nach dem Start des Programmes.
Da flackert die Anzeige solange, bis ich 1x Leertaste oder ESC drücke.
Dann kommt die Frage nach der Taste und nach nochmaligem Drücken der Leertaste wird gezählt.
Die ESC-Taste funktioniert nur direkt bei der ersten Tastenabfrage,
wärend des Programmes oder danach nicht.
Ist das Zählen 1x durchgelaufen, beginnt das flackern der Anzeige erneut.

Was habe ich da noch falsch gemacht? Da stimmt doch noch etwas mit der IF - THEN - Anweisung nicht, oder ?

Vielen Dank, Gruß Sven.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
sv_t



Anmeldungsdatum: 23.05.2006
Beiträge: 6

BeitragVerfasst am: 23.05.2006, 20:40    Titel: Antworten mit Zitat

Habe das Problem doch noch lösen können.

Die IF-THEN Anweisung war ja noch nicht vollständig.
Habe Sprungmarken gesetzt und mit GOTO dahin verwiesen.

Jetzt läuft es so wie es soll.

Nochmals vielen Dank an alle.

Freundliche Grüße,
Sven.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
jb



Anmeldungsdatum: 14.01.2005
Beiträge: 2010

BeitragVerfasst am: 24.05.2006, 17:57    Titel: Antworten mit Zitat

Von GOTO sollte man in der Regel aber nicht so oft Gebrauch machen...
Aber wenn's funktioniert, dann ist noch immer das die Hauptsache lächeln

jb
_________________
Elektronik und Programmieren
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu QBasic. Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
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.

 Impressum :: Datenschutz