SpaceInLasers: Unterschied zwischen den Versionen
Aus Hackerspace Ffm
(→Game Code Referenz) |
Tut (Diskussion | Beiträge) (→Serielle Kommandos) |
||
Zeile 47: | Zeile 47: | ||
* _b fragt Buttons und letzten Barrel-Count ab. Rückgabe AABB: AA Bitfeld für Buttons, 1 gedrückt, BB Barrelcount | * _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: | ||
+ | {| class="wikitable" border="1" cellpadding="4" cellspacing="0" style="background:#f9f9f9; border-collapse:collapse;" | ||
+ | ! Effekt !! NN = Animation number !! AA !! BB !! CC !! DD | ||
+ | |- | ||
+ | || Do nothing || 00 || - || - || - || - | ||
+ | |- | ||
Animationen: | Animationen: | ||
Zeile 53: | Zeile 60: | ||
* Blitz 8x: 4A120FF040408 | * Blitz 8x: 4A120FF040408 | ||
* UFO: 5a01000004000 | * UFO: 5a01000004000 | ||
+ | |||
Version vom 25. Januar 2016, 20:23 Uhr
Inhaltsverzeichnis
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 | - | - | - | - |