Probleme beim zusammenfügen 2er Codes
-
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.
-
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()
undloop()
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()
undvoid 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;
-
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.
-
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 vonVoid Voice
undVoid commands
rüber kopiert insSetup
undLoop
da ich diese genau so auch rauskopiert hatte.
Irgendwan war die die Ausgabe dann soweit dasserial.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
oderJQ6500
?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 jaserialObj.begin(9600)
aufgerufen. Ist dies die selbe serielle Schnittstelle wie beiSerial.begin(115200)
?
-
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
insSetup
und dieVoid commands
in denvoid loop
zusammengeführt.
unter anderem auch folgende menschliche Fehler mit eingebaut-
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.
-
Muss ich wohl irgendwann beim ablegen oder anheben des Voice Moduls den Switch von
I2C
aufUART
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!- Verbindung checken.
- 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
insSetup
und dieVoid commands
in denvoid 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 Namensetup_voice()
passender)
Du müsstest dann aber entweder die gesamte Funktionvoice
vorsetup
definieren oder aber zusätzlich die Deklarationvoid 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 wiechar
oderint
stehen).void
bedeutet aus dem englischen 'leer', d.h. daß es keinen Rückgabewert gibt (in Delphi wird dies z.B.procedure
genannt).