Zuletzt geändert am 25. Januar 2016 um 20:24

SpaceInLasers

Version vom 25. Januar 2016, 20:24 Uhr von Tut (Diskussion | Beiträge) (Serielle Kommandos)

SpaceNlasers header.jpg

Laser Shooting Gallery

  • Von einer festen Position müssen Ziele mit dem Laser getroffen werden
  • Typisch bis zu zwei Spieler gleichzeitig = zwei Pistolen
  • Ziele bestehen aus einem Fototransistor und werden von einem Neopixel beleuchtet
  • Bis zu 8 Ziele werden von einem Arduino verwaltet
  • Bussystem mit RS485 zwischen den Ziel-Arduinos, den Pistolen-Arduinos und einem Spielmaster
  • Spielmaster ist auch Busmaster, steuert das gesammte Spielgeschehen
    • Aktiviert Leuchtziele
    • Fragt Pistolentrigger ab
    • Startet Schußsequenz
      • Broadcast: "Bereit machen für Schuß". Die Nodes bringen Zeitintensive Aufgaben noch zu Ende, pausieren. Ggf. werden DMX-Lichter und andere langsame Störer abgeschaltet.
      • Broadcast: "Schuß - Licht-Aus-Phase". Alle schnellen Lichter werden dunkel geschaltet.
      • Broadcast: "Schuß - Einmeßphase". Der Dunkelwert der Sensoren wird nun gemessen.
      • Broadcast: "Schuß - Bit0 - Bit7". Die Pistolen aktivieren den Laser mit bestimmten Code für jedes Bit. Pro Bit fragen die Zielcontroller mit etwas Verzögerung analog alle Kanäle ab und entscheiden ob das Bit 0 oder 1 ist.
      • Broadcast: "Schuß beendet". Lichter wieder an, Zeitintensive Aufgaben werden weitergeführt.
      • Unicast: Die Zielcontroller werden reihum abgefragt.
      • Unicast: Ggf. werden Aktionen in den Zielcontrollern und den Pistolen getriggert, die einen Treffer anzeigen.
      • Unklar ist noch, ob ggf. der gesammte Broadcast-Teil einfach Zeitgesteuert ablaufen wird.

Hardware

  • Empfänger: SFH 300-3/4 (geht direkt mit dem internen Pull-Up am Analog-Eingang)

Empfang des Schusses ohne Startreferenz

  • Empfänger liefern analoges Signal, das wird auch analog eingelesen. Je mehr Licht empfangen wird, desto geringer wird der gelesene Analog-Wert
  • Bei Umgebungslicht den Wert für Sensor-Dunkel langsam nachführen
  • Ab unterschreiten eines Thresholds kann vom ersten Bit ausgegangen werden (das ist immer 1 = Licht an)
  • Irgendwie (TM) die Länge dieses Bits bestimmen - wenn lang genug, bei Flankenwechsel auf Bit-Empfangsmodus gehen

Serielle Kommandos

Unicast Kommandos ist ein ASCII-Zeichen für die ID, diese ist 0-9 für die Targets und A-C für die Waffen-Controller. Alles andere sind Broadcast-Kommandos. Kommandos nur ASCII, terminiert Retrurn).


Broadcast Kommandos:

  • sABC Bereit machen für Schuß, Licht-Aus + Schusswaffenselektion, Parameter wählt Waffen aus die schießen werden. Bei Empfang dieses Befehls werden Zeitintensive Tasks angehalten und ggf. Lichter aus gemacht.
  • S Schuss abfeuern. Die Waffen senden den Schuss, die Empfänger empfangen den Schuss. Nach 9 Bitzeiten ist alles vorbei, Zeitintensive Tasks dürfen weiterlaufen und Lichter wieder aktiviert werden.
  • I fragt ID des Arduinos ab, an dem Pin 13 mit A0 gebrückt war nach Reset
  • I? fragt ID des Arduinos ab, kann bei mehreren zur Bus-Kollision führen
  • Ixx schreibt ID des Arduinos, an dem Pin 13 mit A0 gebrückt war nach Reset. x steht für das ASCII-Zeichen der ID und muss zweimal hintereinander stehen.


Unicast Kommandos: _ ersetzen durch Target-Controller-ID

  • _aONNAABBCCDD Neopixel Animation starten, O = Objekt Nummer, NN = Animation number (Hex), AABBCCDD (Hex, optionale Argumente)
  • _AONNAABBCCDD Analog Animation starten, O = Objekt Nummer, NN = Animation number (Hex), AABBCCDD (Hex, optionale Argumente)
  • _tr Targets am Block abrufen, Rückgabe: AABBCCDDEEFFGGHH = data value
  • _tO Target mit Objekt Nummer O detailiert abfragen
  • _b fragt Buttons und letzten Barrel-Count ab. Rückgabe AABB: AA Bitfeld für Buttons, 1 gedrückt, BB Barrelcount


Neopixel Animationen aus FastLEDAnim.cpp _aONNAABBCCDD:

Effekt NN = Animation number AA BB CC DD
Do nothing 00 - - - -


Animationen:

  • Gun Shot: Aa00710 (Für Barrel)
  • Rumble Shot: AA011FF000401
  • Blitz 8x: 4A120FF040408
  • UFO: 5a01000004000


Schuß IDs (1 = Laser On):

  • Waffe A Hauptschuß: 0x91 [0 1001 0001], Sekundärschuß: 0x95 [0 1001 0101]
  • Waffe B Hauptschuß: 0xA2 [0 1010 0010], Sekundärschuß: 0xA6 [0 1010 0110]

Game Code

Source code git hub [1]

Class reference [2]

Spielprinzip

Shooting-Gallery

  • Einzeln oder optional zu zweit auf maximale Punktzahl
  • Feste Zeitdauer, evtl. Bonus-Zeit schießbar
  • Nur leuchtende Ziele können getroffen werden
  • Je länger Ziel leuchtet, desto weniger Punkte, Ziel geht erst bei Treffer aus (Option)
  • Shotgun nach Barrel-Laden
  • Limitierte Feuerrate, ggf. erhöhbar durch drehen am Barrel


Optionitis

  • Video aus Gangansicht
  • galvoscanner [3]

Make Rhein Main 2016 - Location Bilder

Ultimedia

after countless fails ...

Fail.gif

... we installed all the cool stuff in the "tunnel"