Stumm durch 3-Tastencombo trotz Absicherung Adminmenü-menü

Moin,

ich habe bei mir die die 5 Knöpfe DEV Version laufen mit Pololu als Power-Switch der an alle 5 knöpfe angeschlossen ist. Mit ist jetzt eine seltsames Verhalten aufgefallen was ich mir so nicht erklären kann. Im admin Menü habe ich das Admin-Menü abgesichert so dass es eigentlich nur noch mit Karte erreichbar ist. Wenn ich jetzt aber trotzdem alle drei Knöpfe zu gleich drücke (oder besser der Kleine das macht) geht die Musik aus und lässt sich nur durch erneutes auflegen der Musikkarte starten. Ich dachte man ist dann vielleicht doch im Admin gelandet bin. Aber es kommt keine Ansage und auch ein langes Drücken der Play/pause Taste nichts bewirken.

Habe ich da irgendwas übersehen? Oder kann man den 3-Knöpfeshortcut im Code auch ganz abschalten, sodass man nur noch mit Karte oder Direktanschluss ins Admin-menü kommt?

Danke

BG, jens

Hallo! Gleich mal vorweg: ich kenne den Code noch nicht so gut, um hier eine fundierte inhaltliche Aussage treffen zu können, was hier das gewünschte Verhalten wäre.

Es sieht für mich allerdings so aus, als würde tatsächlich das Drücken der 3 Tasten ausreichen um das MP3 zu pausieren und ins Admin-Menü zu wechseln.

Wenn du das generell bei dir unterbinden möchtest, kannst du in der Funktion loop() folgenden Block löschen:
// admin menu
if ((pauseButton.pressedFor(LONG_PRESS) || upButton.pressedFor(LONG_PRESS) ||
downButton.pressedFor(LONG_PRESS)) && pauseButton.isPressed() && upButton.isPressed() &&
downButton.isPressed()) {
mp3.pause();
do {
readButtons();
} while (pauseButton.isPressed() || upButton.isPressed() || downButton.isPressed());
readButtons();
adminMenu();
break;
}

Danke für deine Rückmeldung. Komisch ist halt nur, dasS ich aber auch nicht so „richtig“ im Admin-Menü zu sein Schein da ich nichts anwählen oder auch abrechnen kann. Es geht halt nur mit einer neuen Karte Dann weiter.

Kannst du vielleicht bei Gelegenheit die serielle Ausgabe hier reinstellen, die beim fehlerhaften Verhalten auftritt? Das würde die Analyse (und damit Absicherung gegen Randfälle) deutlich vereinfachen.

… und wenn du schon überlegst, die Firmware zu flashen, hast du den Arduino ja eh schon am Rechner … :slight_smile:

Welche 3 Tasten drückst du? Bei der 5-Button-Version muss man Laut/Leise/Play drücken, sofern man nicht die Pinbelegungen auch geändert hat.

Vielleicht bist du nur in Pause gelandet und musst einfach mit einem kurzen Druck auf Play wieder starten.

Ja ich drücke laut/leise/Play.
Dachte auch das es dann einfach nur wie ein Pause ist, aber ein nochmaliges Drücken der Pausetaste bewirkt nichts. Nur eine Karte

Ich versuche gerade die serielle Ausgabe mir anzuschauen um dann zu sehen was die 3-Tastenkombinationen bei mir bewirkt.

Die Ausgabe sehe ich soweit, aber da die Stromversorgung jetzt über den USB-Port geht und wohl intern am Arduino die Stromversorgung der Powerbank mit pololu-Switch dann nicht mehr genutzt wird sind alle Knöpfe dann auch ohne Funktion. Ist eine sinnvolle Sicherheitsmaßnahme aber für mich jetzt etwas hinderlich da ich die Verkabelung nicht auseinander rupfen will. Ist mir sonst nie aufgefallen da ich sonst alles über die serielle Ausgabe eingehen habe. Gibt es da einen Trick. Kann man eigentlich auch Tasten-combos in der seriellen aus/Eingabe eingeben? Obwohl ich das nicht glaube.
Hat jemand eine Idee?

Danke Beste Grüsse, jens

Hab jetzt doch die Anschlüsse kurz getrennt. Musste ja auch nur die Maße wieder direkt angeschlossen werden.

Hier die Ausgabe:

 _____         _____ _____ _____ _____
|_   _|___ ___|  |  |     |   | |     |
  | | | . |   |  |  |-   -| | | |  |  |
  |_| |___|_|_|_____|_____|_|___|_____|

TonUINO Version 2.1
created by Thorsten Voß and licensed under GNU/GPL.
Information and contribution at https://tonuino.de.

=== loadSettingsFromFlash()
Version: 2
Maximal Volume: 30
Minimal Volume: 1
Initial Volume: 16
EQ: 1
Locked: 0
Sleep Timer: 15
Inverted Volume Buttons: 1
Admin Menu locked: 1
Admin Menu Pin: 3100
=== setstandbyTimer()
900053
Firmware Version: 0x92 = v2.0
=== playShortCut()
3
Shortcut not configured!
Card UID: 05 F6 F0 28
PICC type: MIFARE 1KB
Authenticating Classic using key A...
Reading data from block 4 ...
Data on Card :
 13 37 B3 47 02 16 04 09 CD 00 00 00 00 00 00 00

22
22
== playFolder()
=== disablestandby()
11 Dateien in Ordner 22
Einzel Modus -> eine Datei aus dem Odrdner abspielen
=== disablestandby()
=== adminMenu()
=== playShortCut()
0
Shortcut not configured!

Hier habe ich jetzt wie sonst üblich die Pausetaste länger gedrückt um eigentlich das Admin-Menü zu verlassen. Leider passiert nix. erst wenn man eine Kate drauflegt.

Jemand eine idee ?

Danke

Habe gerade mal ein wenig rumprobiert. Bei mir tritt der gleiche Fehler auf.

Ich dachte es liegt am mp3.Pause zu Beginn in void adminmenu(…).
Das auszukommentieren half nicht aber wenn kurz darunter ein mp3.start(); ergänzt wird funktioniert es bei mir.

void adminMenu(bool fromCard = false) {
  disablestandbyTimer();
  mp3.pause();
  Serial.println(F("=== adminMenu()"));
  knownCard = false;
  if (fromCard == false) {
    // Admin menu has been locked - it still can be trigged via admin card
    if (mySettings.adminMenuLocked == 1) {
      mp3.start();  //DAS HIER MUSS ERGÄNZT WERDEN
      return;
    }

keine Ahnung ob das bei anderen Absicherungen auch ergänzt werden müsste.

Vielleicht kann mir jetzt noch irgendwer erklären warum das funktioniert :shushing_face:

Edit: Ich war zu voreilig. Es wird mit mp3.start() nur der aktuelle Track zu Ende gespielt aber dann endet die Wiedergabe trotzdem.

Ja ist mir auch gerade erst aufgefallen.
Jemand noch eine Idee das Problem wird ja bei allen gestehen.

Danke

Das Problem wird sein, das knownCard, vor der Abfrage ob das Adminmenü „fromCard“ geöffnet wurde, auf false gesetzt wird.
Das sollte man darunter setzen.

Kann das am Smartphone gerade nur schlecht machen.

knownCard muss vor den anderen Absicherungsvarianten auf false gesetzt werden. Habe das jetzt für mich so korrigiert:

void adminMenu(bool fromCard = false) {
  disablestandbyTimer();
  Serial.println(F("=== adminMenu()"));
  if (fromCard == false) {
    // Admin menu has been locked - it still can be trigged via admin card
    if (mySettings.adminMenuLocked == 1) {
      mp3.start();
      return;
    }
    else {
      knownCard = false;
      // Pin check
      if (mySettings.adminMenuLocked == 2) {
        uint8_t pin[4];
        mp3.playMp3FolderTrack(991);
        if (askCode(pin) == true) {
          if (checkTwo(pin, mySettings.adminMenuPin) == false) {
            return;
          }
        }
        else {
          return;
        }
      }
      // Match check
      else if (mySettings.adminMenuLocked == 3) {
        uint8_t a = random(10, 20);
        uint8_t b = random(1, 10);
        uint8_t c;
        mp3.playMp3FolderTrack(992);
        waitForTrackToFinish();
        mp3.playMp3FolderTrack(a);

        if (random(1, 3) == 2) {
          // a + b
          c = a + b;
          waitForTrackToFinish();
          mp3.playMp3FolderTrack(993);
        }
        else {
          // a - b
          b = random(1, a);
          c = a - b;
          waitForTrackToFinish();
          mp3.playMp3FolderTrack(994);
        }
        waitForTrackToFinish();
        mp3.playMp3FolderTrack(b);
        Serial.println(c);
        uint8_t temp = voiceMenu(255, 0, 0, false);
        if (temp != c) {
          return;
        }
      }
    }
  }
  knownCard = false;
  int subMenu = voiceMenu(12, 900, 900, false, false, 0, true);

Wer das nicht selbst einfügen will, kann diese Version hier herunterladen.

3 „Gefällt mir“

Den Fehler hatte ich noch gar nicht festgestellt Ich habe das mal so übernommen. Kann bestätigen dass es funktioniert. Danke !!!

Es geht auch einfacher statt:

if (mySettings.adminMenuLocked == 1) {
      mp3.start();
      return;
    }

muss man

if (mySettings.adminMenuLocked == 1) {
      knownCard = true;
      mp3.start();
      return;
    }

verwenden

Dort ist natürlich auch die neue Variante

1 „Gefällt mir“