- LiFePO4 Speicher Test         
Ergebnis 1 bis 10 von 42

Thema: Zielscheibensystem mit Zufall

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    DjEKI
    Gast
    Ohja, jetzt habe ich das voll verstanden, danke

    Gut, dann werde ich mich mal rann setzen und das irgendwie umsetzen. Ich mache das jetzt nicht mehr per ADC, sondern lasse halt die Zeitverzögerung entscheiden. Kann man 2 Abläufe gleichzeitig durchlaufen kassen? zB ein Hauptprogramm und den Zufallsgenerator (ein Ablauf bestimmter Zahlen mit Loop Effekt). Sonbst habe ich schon andere Ideen.

    Ansonsten muss ich noch die Variabeln kennen lernen. Dass die Punkte addiert werden.

    Und später auch die LCD anzeige (stinknormale Rote leuchtende Zahlen)

    Normalerweise habe ich mir ein Konzept gedacht, wie es wirklich Fertig aussehen sollte:
    1.er Modus: Normales schießen mit Zufall der Ziele und 2 Sekunden Aufblinkzeit. 5-10 Punkte.
    2.er Modus: schnelles schießen, Zufall der Ziele, Punkte ergeben sich durch den Zeitraum. Umso schneller man trifft, umso mehr Punkte.
    3.er Modus: Man bekommt 500 Punkte, beim Treffer werden sie abgezogen bis wirklich nur Null erreicht worden ist, die Zeit ist dann das Ergebnis

    Und? Scheint es machbar zu sein ? ^^

    mfg EKI

  2. #2
    DjEKI
    Gast

    Erstes Programm:

    Moin, mein erstes Programm ist fertig, und da stoße ich schon mal auf ein Problem.
    Erstmal will ich dazu was sagen, dass ist meine 1 Variante, die evtl durch Profis besser und kürzer geht, aber mein Wissen ist leider nur so weit wie in diesem Programm zusehen ist.
    Aber leider stoße ich da auf ein Problem. Ganz unten darf kein GOTO im Interrupt sein, aber ich hätte dort zugern eins. Nur wie Löse ich das Problem?

    Code:
    $regfile = "m8def.dat"
    $crystal = 1000000
    
    
    '***********************************************************************'
    
    
    Dim Scheibe As Integer
    Dim 5punkte As Integer
    Dim 10punkte As Integer
    Dim Punkte As Integer
    Dim A As Byte
    
    A = 0
    Scheibe = 0
    Punkte = 0
    
    
    Config Portd.0 = Output
    Config Portd.5 = Output
    Config Portd.6 = Output
    Config Int0 = Rising
    Config Int1 = Rising
    Enable Interrupts
    Enable Int0
    Enable Int1
    On Int0 Int0_5punkte
    On Int1 Int1_10punkte
    
    Anfang:
    Do
    
    If Scheibe = 1 Then
       Goto Scheibe1
    Else
       Portd.0 = 0
    End If
    
    If Scheibe = 2 Then
       Goto Scheibe2
    Else
       Portd.5 = 0
    End If
    
    If Scheibe = 3 Then
       Goto Scheibe3
    Else
       Portd.6 = 0
    End If
    
    Incr A
    Loop Until A = 20
    End                                                         'hier erscheint ein Ton und zeigt das Ende mit Ergebnis.
    
    '*************************************************************************'
    Scheibe1:
    Portd.0 = 1
    Set Scheibe = 1
    Waitms 250
    Set Scheibe = 2
    Waitms 250
    Set Scheibe = 3
    Waitms 250
    Set Scheibe = 1
    Waitms 250
    Set Scheibe = 2
    Waitms 250                                                  'wenn hier getroffen wurde, ist die variable 2, also die 2. Scheibe ist aktiv'
    Set Scheibe = 3
    Waitms 250
    Set Scheibe = 1
    Waitms 250
    Set Scheibe = 2
    Waitms 250
    Set Scheibe = 3
    Portd.0 = 0
    Goto Anfang
    
    Scheibe2:
    Portd.0 = 1
    Set Scheibe = 1
    Waitms 250
    Set Scheibe = 2
    Waitms 250
    Set Scheibe = 3
    Waitms 250
    Set Scheibe = 1
    Waitms 250
    Set Scheibe = 2
    Waitms 250
    Set Scheibe = 3
    Waitms 250
    Set Scheibe = 1
    Waitms 250
    Set Scheibe = 2
    Waitms 250
    Set Scheibe = 2
    Portd.0 = 0
    Goto Anfang
    
    Scheibe3:
    Portd.0 = 1
    Set Scheibe = 1
    Waitms 250
    Set Scheibe = 2
    Waitms 250
    Set Scheibe = 3
    Waitms 250
    Set Scheibe = 1
    Waitms 250
    Set Scheibe = 2
    Waitms 250
    Set Scheibe = 3
    Waitms 250
    Set Scheibe = 1
    Waitms 250
    Set Scheibe = 2
    Waitms 250
    Set Scheibe = 1
    Portd.0 = 0
    Goto ANFANG
    
    '*************************************************************************'
    Int0_5punkte:
    5punkte = Punkte + 5
    Goto Anfang                                                 'mein größtes Problem, der hier wäre sehr wichtig, geht aber nicht... Interrupt braucht ein Return'
    
    
    Int1_10punkte:
    10punkte = Punkte + 10
    Goto Anfang                                                 'mein größtes Problem, der hier wäre sehr wichtig, geht aber nicht... Interrupt braucht ein Return'

  3. #3
    Erfahrener Benutzer Roboter Genie Avatar von HeXPloreR
    Registriert seit
    08.07.2008
    Ort
    Soltau - Niedersachsen
    Alter
    46
    Beiträge
    1.369
    Du schreibst immer noch für einen Atmega8 - ist Dir das schon aufgefallen?

    Was soll man jetzt zu diesem Programm sagen?? - fang nochmal an oder das ist es wohl noch nicht.

    Also cih verstehe nichts von dem was Du hier codest.

    Wozu änderst Du alle 250ms den Wert von Scheibe? Da kanst Du doch auch gleich den letzten Wert im Block nehmen.
    Wofür sind die Interrups überhaupt angegeben? - Die machen doch nichts wenn ich das richtig sehe.
    A wird nicht zurückgesetzt.
    Die Scheife wird vermutlich auch schneller durchlaufen sein, als Du blinzeln kannst.


    Viele Grüße

  4. #4
    DjEKI
    Gast
    Du hattest mir keine Antwort geschrieben, warum du meinst, dass es nicht für den ATmega32 ist und hast mich schon wieder nur darauf hingewiesen, dass dieser Script nicht für den ATmega32 ist, sondern für den mega8. Könntest du mir denn jetzt bitte sagen, warum dass so ist?

    Meine Idee war, die 250ms so auf zu teilen, dass es am Ende 2 Sekunden ergibt. Und fals ein Interrupt auftreten sollte, genau in der MilliSekunde stehen bleibt, dann ist der letzte vergebene Wert für die Aktivierung der nächsten Zielscheibe.
    Dann wollte ich: Der letzte Wert am ende des Layers, hat bei Scheibe1 den Wert 3, Scheibe2 den Wert 2 und Scheib3 den Wert 1. Die sind desshalb unterschiedlich, fals man die Zielscheibe nicht getroffen hat, dann kommt die nächste Zielscheibe und nicht nochmal die Selbe.

    -EDIT-
    Ich habe sowieso eben bemergt:
    Line:58 "und" 60 Variable can not be used with SET [SCHEIBE = 1 "und" 2]

    mfg EKI
    Geändert von DjEKI (11.02.2013 um 20:04 Uhr)

  5. #5
    Erfahrener Benutzer Roboter Genie Avatar von HeXPloreR
    Registriert seit
    08.07.2008
    Ort
    Soltau - Niedersachsen
    Alter
    46
    Beiträge
    1.369
    oh sorry, ich hatte in dem Beitrag überlesen das ich angesprochen war ganz oben die erste Zeile sagt es aus: m8def.dat (-> m32def.dat)


    Wieso darf denn nicht auch die selbe Zielscheibe nochmal kommen? Wäre doch okay, vor allem wenn man schon weggezogen hat um ne neu aus zu suchen? Vielleicht aber dann nicht nochmal
    Ich denke den ganzen Block mit den drei verschieden Scheiben kann man sehr viel kürzer schreiben.
    Wenn man annimmt der Wert ist 2, dann zählt man solange durch, bis Interrupt, wenn der Wert dann gleich 2 ist, ziehe eine 1 ab oder zähle 1 dazu, man könnte auch 3 dazu zählen lassen um ne neue Scheibe auszuwählen - schon ist das Problem weg.

    Aber woher weiß den Dein Programm wann es welchen Interrupt ausführen soll? - vielleicht habe ich das selbst auch nur noch nicht verstanden.
    Wenn ich soweit verstanden habe, dann müßtest du im Interrupt den Wert der Scheibe ändern, denn sonst läuft es bis zum letzten wert durch sobald es aus dem interrupt wieder zurück an Stelle springt.

    Viele Grüße
    Geändert von HeXPloreR (11.02.2013 um 20:11 Uhr)

  6. #6
    DjEKI
    Gast
    Axo, der Interrupt kommt durch ein Taster. Int0 und Int1 sollen per Taster, Also Zielscheibe 5 Punkte und 10 Punkte aktiviert werden. Oder muss ich die Int0 und 1 als Input angeben?
    Wenn nicht, habe ich ja nur 2 Interrupt eingänge. Und die müssen ja irgendwie mit den Druckplatten verbunden werden. Ich hätte es lieber so, dass nur die aktiverte Scheibe funktioniert, und alle anderen deaktiviert sind. Da aber sich alles nur mit Interrupt arbeiten lässt, sind halt alle Scheiben aktiv, dass heißt, auch wenn die SCheibe nicht leuchtet, könnte man damit ein Punkt machen. Wäre ja aber Betrug ^^

    PS, danke für den Hinweis, die obere Zeile mit m8def.dat habe ich von nen anderen SCript kopiert und mir nichts dabei gedacht.

    mfg EKI

  7. #7
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    15.01.2007
    Ort
    Göttingen
    Beiträge
    706
    Wenn nicht, habe ich ja nur 2 Interrupt eingänge. Und die müssen ja irgendwie mit den Druckplatten verbunden werden. Ich hätte es lieber so, dass nur die aktiverte Scheibe funktioniert, und alle anderen deaktiviert sind. Da aber sich alles nur mit Interrupt arbeiten lässt, sind halt alle Scheiben aktiv, dass heißt, auch wenn die SCheibe nicht leuchtet, könnte man damit ein Punkt machen. Wäre ja aber Betrug
    Das habe ich mir auch überlegt (auch wenn ich mich in den Rest des Codes nicht wirklich reingedacht habe).
    Ich glaube, die einzig gute Lösung hierfür ist ein Controller mit 12 Interrupt-Eingängen, von denen jeweils immer nur die zwei aktiviert werden, die zur momentan aktiven Scheibe gehören. Da gäbe es z.B. den Mega88 (28 Pins, kompatibel zum Mega8 , der hat 2 "normale" Interrupt-Eingänge, und 20 (!) sogenannte Pin-Change-Interrupt-Eingänge.

    Aber bevor ich lange weitererzähle was es damit auf sich hat, müsstest Du erstmal sagen, ob Du hinsichtlich des verwendeten Controllers soweit flexibel bist...

Ähnliche Themen

  1. 4 Led´s unabhängig per Zufall blinken lassen?
    Von DanielSan im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 22
    Letzter Beitrag: 20.07.2011, 13:43
  2. Wie denn "Zufall" programmieren
    Von Cybrix im Forum C - Programmierung (GCC u.a.)
    Antworten: 16
    Letzter Beitrag: 11.06.2007, 09:10
  3. Zufall wirklich Zufall ???
    Von Speed im Forum Software, Algorithmen und KI
    Antworten: 3
    Letzter Beitrag: 03.08.2006, 12:03
  4. LED´s per Zufall leuchten lassen
    Von Hoomer im Forum Elektronik
    Antworten: 11
    Letzter Beitrag: 05.02.2006, 14:45

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Labornetzteil AliExpress