Probleme beim zusammenfügen 2er Codes



  • @Th69

    Danke für den hinweis, werde ich nachermal testen.



  • @Sense88 sagte in Probleme beim zusammenfügen 2er Codes:

    ab Zeile 843 klappt es nicht.

    Sorry, das ist keine Fehlermeldung. Was klappt da nicht?

    Du gehst ja nicht zum Arzt und sagt "Aua" und bekommst darauf eine Diagnose. Werde genauer in deiner Aussage!


    Es soll bei Aktivierung des DFRobot 2301Q Voice Regonition modul und Z.B Zeile 933 .-> open Mask wenn man dies sagt, mit dem Wake Word der Helm sich öffnen.
    hierbei werden die Servos (MG90S) angesprochen und die Verbauten LED´s ausgeschaltet.

    Sorry, dieser Satz kein Deutsch.

    Bekommst du bei deiner commands() Funktion evt. keine CmdID 5 rein?

    Oder möchtest du sobald eine CmdID 5 reinkommt, den Helm öffnen?

    Ich bin verwirrt.



  • @Quiche-Lorraine

    Ich möchte, bei:
    CmdID 5 -> sich der Helm öffnet, LED aus
    CmdID 6 -> sich der Helm schließt, LED an
    CmdID 7 -> sich die LED einschalten.
    CmdID 8 -> sich die LED ausschalten.
    usw...

    Das VoiceModul wir angelernt unabhängig vom Rest und dem Codeund ; ist gemacht in dem Das Modul mit Spannung versorgt wird und man den einlernprozess startet.
    Im Standad ist das Hi Robot - dies aktiviert das VoiceModul.
    dann habe ich dem Modul beigebracht "Open Mask" dies ist der Erste Slot und ist ID5 , nächster Befehl "Close Mask" wäre ID 6 usw. dies habe ich aus dem Datenblatt vom Gerät
    Klappt soweit auch auch alles, denn wenn ich nur den Sketch hole wo es sich um das reine VoiceModul handelt klappt es.

    Ich glaube ich Probier mal den Ansatz von @Th69, ich kann mich daran erinnern das im Original Code ein
    setup() und loop()
    drin war.

    Im Sketch1 Code (der mit einem Schalter betätigt wird) waren diese schon vorhanden, da die Fehlermeldung kam habe ich diese umbenannt void voice() und void commands().

    Ich Probiere mal die Void Voice in die Bestehende Void Setup zu integrieren wo auch schon der Serial.begin(115200) aufgerufen wird, dieser wäre sonst auch doppelt im Code.



  • @Sense88 sagte in Probleme beim zusammenfügen 2er Codes:

    CmdID 5 -> sich der Helm öffnet, LED aus

    Erkläre mir mal bitte was der folgende Code macht:

    case 5: // open mask
          Servo1.write(170);
          Servo2.write(20);
          digitalWrite(RIGHT_EYE_PIN, LOW);
          delay(500);
          break;
    


  • @Quiche-Lorraine

    Also, Das Voice Modul hat von mir den Sprachbefehl "open mask" beigebracht bekommen und gibt diesen mit dem Wert 5 (wird vom Modul vergben) aus.

    Wenn also das Modul die 5 Ausgibt,
    werden
    A: die 2 verbauten Servos angesteuert auf die Positionen 170 und 20, weil der eine um 180 gedreht ist. Deswegen laufen diese auf anderen Werten und nicht gleich. Diese müssen aber noch final eingestellt werden.
    B: Zeitgleich werden die LEDs die an Pin 3 hängen ausgeschaltet.
    C: delay soll eine Wartezeit dastellen
    D : der Break beendet die ausgabe von Wert 5



  • @Sense88 sagte in Probleme beim zusammenfügen 2er Codes:

    Also, Das Voice Modul hat von mir den Sprachbefehl "open mask" beigebracht bekommen und gibt diesen mit dem Wert 5 (wird vom Modul vergben) aus.

    Funktioniert das Ganze auch? Heißt, manche doch mal für die DEBUG Variante eine serielle Ausgabe, sofern möglich. Wenn du z.B. dann "open mask" sagst, wird dann "Open Mask" seriell ausgegeben.



  • @Quiche-Lorraine

    hi, hab gestern noch ein wenig probiert und der frust hat gewonnen 😕

    Es scheint als ob das Voice Modul nicht initialisiert wird, da in der seriellen ausgabe nix kommt. Sonder nur serial.print(F("Initializing Iron Man Servo version: ")); Serial.println(VERSION); vom ersten Code
    Hatte mich an @Th69 vorschlag gemacht;
    die Codestellen von Void Voice und Void commands rüber kopiert ins Setup und Loop da ich diese genau so auch rauskopiert hatte.
    Irgendwan war die die Ausgabe dann soweit das serial.print(F("Initializing Iron Man Servo version: ")); Serial.println(VERSION)
    Communication with device failed, please check connection
    erschien aber der Button keine funktion mehr hatte und Voice immern noch nicht klappte, da es schon spät war, der Tag eh gelaufe und der Frust da war hab ich was anderes Probiert aber nun bekomm ich`s nicht wieder in den
    Communication with device failed, please check connection zustand.... sitz gefühlt jede freie minute dran.

    Muss jetzt erst mal schauen, wie ich das wieder hinbekomme



  • Welchen Wert hat denn MP3_TYPE: DFPLAYER oder JQ6500?

    Und was passiert, wenn du zuerst das Voice-Modul initialisiert?

    Evtl. kommen sich aber beide Module in die Quere, was die interne Kommunikation betrifft.

    PS: In der Funktion init_player() in Zeile 217 sowie 272 wird ja serialObj.begin(9600) aufgerufen. Ist dies die selbe serielle Schnittstelle wie bei Serial.begin(115200)?



  • @Th69

    So die Nacht ging es endlich weiter.

    Der Code läuft soweit.
    Der Button als auch die Sprachbefehle laufen.
    Wenn man mal ne Nacht drüber schläft, bewikt es wunder...
    Habe dasVoid Voice ins Setup und die Void commands in den void loop zusammengeführt.
    unter anderem auch folgende menschliche Fehler mit eingebaut 😃

    1. Hatte den sketch nur Compiliert und nicht geladen und dadurch sich wohl auch die meldung im Seriell Monitor nicht aktualisiert, dadurch hab ich immer sachen geändert deren wirkung nicht gezeigt wurden.

    2. Muss ich wohl irgendwann beim ablegen oder anheben des Voice Moduls den Switch von I2C auf UART gelegt haben 😕

    Was aktuell noch nicht klappt, ist jetzt der DFPlayermini.
    Habe hierfür nen extra sketch geschrieben zum Testen der Sounds aber es kommt nichts.
    Seriell bekomme ich nur folgendes:
    DFPlayer Mini Test startet
    DFPlayer Fehler!

    1. Verbindung checken.
    2. SD Karte drin?

    Es leuchtet aber auch nichts am modul selbst auch kein boot zeichen. Spannung liegt an, Pins / Verkablung inkl. wiederstände geprüft. SD Karte lässt sich am PC abspielen.
    Habe mal einen 2ten zum testen geordert, vll liegt es ja am Modul



  • Gut, daß es jetzt funktioniert.

    Habe das Void Voice ins Setup und die Void commands in den void loop zusammengeführt.

    Du meinst, du hast den Code der Funktionenblöcke in die Hauptfunktionen hineinkopiert?
    Du solltest, wie du es auch bei den anderen Funktionen gemacht hast, einfach diese dort aufrufen: voice(); (bzw. ich fände den Namen setup_voice() passender)
    Du müsstest dann aber entweder die gesamte Funktion voice vor setup definieren oder aber zusätzlich die Deklaration void voice(); hinzufügen, damit der Name der Funktion bekannt gemacht wird.

    PS:
    Noch zur Wortwahl bzgl. void: dies gibt nur den Rückgabetyp einer Funktion an (dort kann auch ein anderer Typ wie char oder int stehen). void bedeutet aus dem englischen 'leer', d.h. daß es keinen Rückgabewert gibt (in Delphi wird dies z.B. procedure genannt).


Anmelden zum Antworten