Duel Mode for Nerf and Airsoft Target[:de]Duell Modus für Nerf und Softair Zielscheibe

After the prototype of the „Nerf and Airsoft target“ was extensively tested, additional functions had to follow. A duel mode was needed.

 

Constructor of the game class:

Challenge:

The „hardware“ should remain. A switch between normal and duel mode should be possible without an app or website.

Class „game“:

In order to be able to extend the project, I first created a class „game“. Here all common methods and properties should be deposited.

Since the Pi is firmly soldered to the hardware, I have also implemented the pin assignment / GPIO control without variables.

Constructor der game Klasse:

Here, the first GPIO 18 is set to PWM (Pulse Width Modulation) mode and initialized. It took a very, very long time until I found out how to implement the control of a servo with PHP or via the shell. Thank goodness I finally found something.

Matching this, there is a public function moveServo for the servo control:

Here the servo can be put in the appropriate position. In the case „Off“, the servo is switched off.

The ledGreen and ledRed functions turn the corresponding LED on or off.

The next setTarget function sets up the target and then returns the servo to its original position

ShowError flashes the red LED depending on the mode

The actual script

When starting, it will start directly into the normal mode (after integration and initialization of the class).

The script currently consists of 2 functions

Normal mode: normal shooter

The goal is up and can be shot over. After a hit, the goal re-establishes.

From line 15 it is checked whether the game mode should be changed. If the target is raised and immediately (within 2 seconds) overturned again then the script switches to duel mode.

Duel Mode: DuelShooter

In duel mode, the goal is first. After a random break between 6 – and 33 (rand (10,55)) seconds, the goal is up.
During the next 5 seconds the target must be shot over. If the target was hit within this time, the green LED lights up for another 4 seconds – Sagittarius has won.
If the target was not hit, the red LED lights up for 4 seconds. The target must be knocked over by hand for a new duel.

The game mode can be changed here as follows. If you have shot over the target within the time the green lamp lights up, if you now set the target by hand, the mode switches over.

Change mode

normalShooter ==> DuelShooter:
Move the target within 2 seconds after setting up automatically

duellShooter ==> normalShooter:
Override target within time (player has won) and then re-deploy within 3 sec after switching on the green led.

Integration in autostart.sh

So that the script starts automatically I have it built into the /home/pi/autostart.sh

Next expansion stage

Online Mode – Game Control and Results Report by Telegram App![:de]Nachdem der Prototyp der „Nerf und Softair Zielscheibe“ ausgiebig getestet wurde mussten nun weitere Funktionen folgen. Ein Duell Modus musste her.

Herausforderung:

Die „Hardware“ soll so bleiben. Eine Umschaltung zwischen Normal und Duell Modus soll ohne App oder Website möglich sein.

Klasse „game“:

Um das Ganze ausbaufähig zu programmieren habe ich als erstes eine Klasse „game“ erstellt. Hier sollen alle gemeinsamen Methoden und Eigenschaften hinterlegt sein:

Da der Pi fest mit der Hardware verlötet ist habe ich auch die Pinbelegung/GPIO-Ansteuerung ohne Variablen implementiert.

Constructor der game Klasse:

Hier wird als erstes GPIO 18 in den PWM (Pulse Width Modulation) Modus gesetzt und initialisiert. Es hat sehr, sehr lange gedauert bis ich herausgefunden habe wie ich die Steuerung eines Servo mit PHP bzw. über die shell realisieren konnte. Goolge sei Dank bin ich irgendwann fündig geworden.

Passend dazu gibt es eine public function moveServo für die Servo Steuerung:

Hier kann der Servo in die entsprechende Postion gebracht werden. Im case „Off“ wird der Servo ausgeschaltet.

Die Funktionen ledGreen und ledRed schalten die entsprechenden LED an oder aus.

Die nächste Funktion setTarget richtet das Ziel auf und fährt den Servo dann in die Ausgangsstellung zurrück

Mit showError wird für je nach Modus die rote LED zum blinken gebracht

Das eigentliche Script

Beim starten wird direkt in den Normalen Modus gestartet (nach einbinden und Initialisieren der Klasse).

Das Script besteht aktuell aus 2 Funktionen

Normaler Modus: normalShooter

Das Ziel richtet sich auf und kann umgeschossen werden. Nach einem Treffer richtet sich das Ziel wieder auf.

Ab Zeile 15 wird geprüft ob der Spielmodus gewechselt werden soll. Wenn die Zielscheibe aufgerichtet wird und sofort (innerhalb 2 Sekunden) wieder umgeworfen wird dann wechselt das Script in den Duellmodus.

Duell Modus: duellShooter

Im Duell Modus liegt das Ziel zuerst. Nach einer zufälligen Pause zwischen 6 – und 33 (rand(10,55)) Sekunden richtet sich das Ziel auf.
Während der folgenden 5 Sekunden muss nun das Ziel umgeschossen werden. Wurde das Ziel innerhalb dieser Zeit getroffen leuchtet für weitere 4 Sekunden die grüne LED – Schütze hat gewonnen.
Wurde das Ziel nicht getroffen leuchtet für 4 Sekunden die Rote LED. Das Ziel muss für ein neues Duell von Hand umgestoßen werden. 

Der Spielmodus kann hier wie folgt gewechselt werden. Hat man das Ziel innerhalb der Zeit umgeschossen leuchtet die grüne Lampe, wenn man nun das Ziel von Hand wieder aufstellt schaltet der Modus um.

Modus Wechsel

normalShooter ==> duellShooter:
Ziel nach dem automatischen Aufstellen innerhalb von 2 sec wieder umlegen

duellShooter ==> normalShooter:
Ziel innerhalb der Zeit umschießen (Spieler hat gewonnen) und dann innerhalb von 3 sec nach Einschalten der grünen Led wieder aufstellen.

Einbindung in autostart.sh

Damit das Skript automatisch startet habe ich es noch in die /home/pi/autostart.sh eingebaut

Nächste Ausbaustufe

Online Modus – Spielsteuerung und Ergebnismeldung per Telegram App!