Hallo, ich will einen Türgong mit den WTV Modul realisieren. Leider habe ich überhaupt keinen Plan wie ich das mit einem AVR hinbekomme. Deshalb der diskrete Aufbau. Der Wunsch war, das über die Start/Stop Taste die Melodie abgespielt wird. Gleichzeitig soll eine Led impulsartig blinken, die Werte gelten für die cmos Variante des 555 (Hab kein Symbol für die cmos Variante.) Um das zu steuern habe ich mir die Schaltung ausgedacht. Soweit funktioniert das ganze, ich kann aber nur den Startimpuls für das Soundmodul erzeugen, ich habe keine Idee woher ich ein 2. Impuls herbekomme, am Ende des Sounds, bzw. hier - nach einer festen Zeit. Der 4017 "verlängert" die Periodendauer auf 50sec (R+C Werte in der Zeichnung stimmen nicht überein.) Die Transistorstufe als Pegelwandler habe ich erstmal nur so eingezeichnet, z.Z. ist ein Gatter vom 4093 dran. Die Resettaste vom Modul will ich nicht bedienen, weil dann immer wieder zum ersten Titel zurückgesprungen wird. Der "Key A" wird später ein Optokoppler. Das Soundmodul ist nicht eingezeichnet. Mein Halbwissen reicht leider nicht mehr. Vielen Dank, wenn sich jemand die Mühe macht. Anbei die Schaltung VG carlo
> Leider habe ich überhaupt keinen Plan wie ich das mit einem AVR > hinbekomme. Hast du mal gesucht nach „Arduino wtv020 doorbell“. Da gibt es zahlreiche fertige Anleitungen, sogar Videos. > Deshalb der diskrete Aufbau. > über die Start/Stop Taste > Gleichzeitig soll eine Led impulsartig blinken > Ich habe keine Idee woher ich ein 2. Impuls herbekomme > Der 4017 "verlängert" die Periodendauer Du siehst, mit reinem diskreten Aufbau wird das kompliziert. Ich würde sogar behaupten, dass du dich besser etwas in Arduino einarbeitest (ist wirklich leicht), die Zeit wäre meiner Meinung nach besser investiert.
Du magst ja Recht haben, mich hätte es trotzdem interessiert, na vielleicht kann ja noch jemand ein Idee einstellen. Das Doorbell Prijekt habe ich auch gefunden und war überrascht, wie einfach es aufgebaut ist. Deshalb: Hab schonmal vor 3 Jahren mit AVR anfangen wollem. hatte mir bei Radig einen Programmer gekauft, das warst dann aber schon. Seit ein paar Stunden versuche ich es nochmal...und komme mit der usb dll nicht weiter. Gerät wird mittlerweile erkannt, aber trotzdem wird die dll nicht gefunden... Werde mal einen neuen Thread aufmachen.
:
Bearbeitet durch User
Bernd Z. schrieb: > Hab schonmal vor 3 Jahren mit AVR anfangen wollem. hatte mir bei Radig > einen Programmer gekauft, das warst dann aber schon. Ich rede ja auch von Arduino. Ist zwar oft auch AVR, gegenüber der Direktprogrammierung aber doch noch deutlich einfacher. Für fast alles gibt es LIBs. Als Beispiel(!) fallen mir die intelligenten LEDs wie WS2812 ein: Direkt in C erfordert das schon einiges an Erfahrung, per Arduino ist die erste Inbetriebnahme ein Zweizeiler bzw. das Abändern eines Beispiels, das bei der Lib immer dabei ist. Für WTV020 habe ich es nicht geprüft, aber auch da sollte es fertige LIBs geben. Was meinst du mit usb dll? Einen Programmer brauchst du bei Arduino nicht, der ist quasi mit drin. Arduino installieren, USB anstöpseln, COM Port ermitteln und einstellen, Beispiel laden, los gehts. Du hast anscheinend ja gute Kenntnisse in der Elektronik, daher wirst du Arduino recht schnell lieben lernen. Es ist selbst unter erfahrenen Programmierern oft in der Anwendung, weil man in Windeseile mal eben schnell Logic, SPI etc. realisieren kann.
:
Bearbeitet durch User
Konkret spreche ich von einem Arduino Nano, den gibt es als Clone für ca. 1,50€ - allerdings mit Lieferzeit. Du bekommst auch per Prime einen für 5€, der ist dann übermorgen da, falls du in D wohnst. Bei einem Clone kann es zwei Minimalhürden bei der Inbetriebnahme geben, die ich hier nenne: 1. Statt des teuren FTDI USB-Serill Wandler ist meist ein CH340 verbaut, der kann das gleiche, benötigt aber einen anderen Treiber. Sehr leicht installierbar. Windows 10 kennt den schon so ohne Treiber-Download. 2. Meist muss man in den Einstellungen „old bootloader“ wählen, das wars. Mit einem Original-Arduino ist es tatsächlich Plug-and-Play, aber wie gesagt, es ist recht einfach. Wir werden Dir hier helfen.
Klingt gut, also bischen was habe ich schon... ISP Programmer von Radig... UNO Board, ich nehme an das man den Programmieren kann, hat aber einen 6-poligen ISP Anschluß, Programmer hat einen 10 poligen Anschluß... Dann noch ein mit 28pol. Fassung, sicher gleiche Verwendung wie der UNO. Muss noch der Chip drauf....hab ich noch nicht. Fehlen auch noch paar Bauteile, auf der LP steht was von 1x 10kOhm, aber drin ist ein 1kOhm, hab ihn noch nicht verlötet. Welcher muss rein? So wie ich das sehe, scheint der UNO vollkommen ausreichend für den Anfang.
Klingt gut, also bischen was habe ich schon... ISP Programmer von Radig...(3) UNO Board, ich nehme an das man den Programmieren kann, hat aber einen 6-poligen ISP Anschluß, Programmer hat einen 10 poligen Anschluß...(1) Dann noch ein mit 28pol. Fassung, sicher gleiche Verwendung wie der UNO. Muss noch der Chip drauf....hab ich noch nicht. Fehlen auch noch paar Bauteile, auf der LP steht was von 1x 10kOhm, aber drin ist ein 1kOhm, hab ihn noch nicht verlötet. Welcher muss rein? (2) So wie ich das sehe, scheint der UNO vollkommen ausreichend für den Anfang.
Irgendwie bist du noch völlig falsch unterwegs. Bei einem Arduino brauchst du keinen Programmer und keinen 28pol. Sockel. Der 6Pin ist nur für den Fall, dass man den Bootloader tauschen will. Das kommt aber normalerweise nie vor. Bei Arduino kannst du deinen Programmer vergessen, den brauchst du nicht. Auch nicht dessen Software oder Compiler. Der UNO geht, allerdings ist der relativ groß und der bleibt in der Schaltung. Daher hatte ich einen Nano vorgeschlagen, der ist besser integrierbar und auch Steckbrett-fähig. Also, aus dem Bild braucht du nur 1., alles Andere kann in den Schrank. Schau dir noch einmal Videos zum Thema „Arduino Erste Schritte“ an, dann dürfte vieles klarer werden, hier ein Mehrteiler in Deutsch: https://youtu.be/0wAY3DYihyg
:
Bearbeitet durch User
Ok, hab mir die ersten 4 Videos angesehen, verstehe jetzt was Du meinst. Aber irgendwo kann man den Programmer doch verwenden, oder? Bei dem WTV020 Modul habe ich nur für WTV020-SD16 Einträge gefunden,muss mal probieren ob das Modul einen Laut gibt. Meines ist ein WTV020M01 , soweit ich das richtig gefunden habe, liegt der Unterschied nur im Soundformat. Wobei ich für meine Anwendung nur die Start Stop Taste brauche, Reset nur wenn sich das Modul aufhängt. Außerdem noch Play - next was dann nach z.B. 5 Melodien wieder auf den Anfang springt. Mal sehen ob ich es heute abend noch zusammenstecken kann.
:
Bearbeitet durch User
Bin jetzt beim WTV020M1 Modul, hab "WTV020SD16P-master" in den Arduino eingebunden, von http://forum.arduino.cc/index.php/topic,117009.0.html hab ich den code eingebunden Ist für das SD16 Modul, hab ich aber nicht... =================================== /* Example: Control a WTV020-SD-16P module to play voices from an Arduino board. Created by Diego J. Arevalo, August 6th, 2012. Released into the public domain. */ #include <Wtv020sd16p.h> int resetPin = 2; // The pin number of the reset pin. int clockPin = 3; // The pin number of the clock pin. int dataPin = 4; // The pin number of the data pin. int busyPin = 5; // The pin number of the busy pin. /* Create an instance of the Wtv020sd16p class. 1st parameter: Reset pin number. 2nd parameter: Clock pin number. 3rd parameter: Data pin number. 4th parameter: Busy pin number. */ Wtv020sd16p wtv020sd16p(resetPin,clockPin,dataPin,busyPin); void setup() { //Initializes the module. wtv020sd16p.reset(); } void loop() { //Plays synchronously an audio file. Busy pin is used for this method. wtv020sd16p.playVoice(0); //Plays asynchronously an audio file. wtv020sd16p.asyncPlayVoice(1); //Plays audio file number 1 during 2 seconds. delay(5000); //Pauses audio file number 1 during 2 seconds. wtv020sd16p.pauseVoice(); delay(5000); //Resumes audio file number 1 during 2 seconds. wtv020sd16p.pauseVoice(); delay(5000); //Stops current audio file playing. wtv020sd16p.stopVoice(); //Plays synchronously an audio file. Busy pin is used for this method. wtv020sd16p.asyncPlayVoice(2); delay(2000); //Mutes audio file number 2 during 2 seconds. wtv020sd16p.mute(); delay(2000); //Unmutes audio file number 2 during 2 seconds. wtv020sd16p.unmute(); delay(2000); //Stops current audio file playing. wtv020sd16p.stopVoice(); } =============================== Hochladen kommt Fehlermeldung: Arduino: 1.8.8 (Windows 10), Board: "Arduino/Genuino Uno" WTV020sd16_erster:22:1: error: 'Wtv020sd16p' does not name a type Wtv020sd16p wtv020sd16p(resetPin,clockPin,dataPin,busyPin); ^ ...\Arduino\WTV020sd16_erster\WTV020sd16_erster.ino: In function 'void setup()': WTV020sd16_erster:26:2: error: 'wtv020sd16p' was not declared in this scope wtv020sd16p.reset(); ^ ...\Arduino\WTV020sd16_erster\WTV020sd16_erster.ino: In function 'void loop()': WTV020sd16_erster:31:2: error: 'wtv020sd16p' was not declared in this scope wtv020sd16p.playVoice(0); ^ exit status 1 'Wtv020sd16p' does not name a type
:
Bearbeitet durch User
Als absoluter Neuling will ich ein WTV020M01 zum laufen bringen. Einzeln aufgebaut funktioniert alles. Jetzt soll der Arduino das Modul steuern. Genaugenommen brauche ich nur die Play/Stop/Next/Reset Funktion für einen Türgong. Die lib ist im Programm eingebunden, ein Testsketch habe ich hochgeladen, das kommt allerdings eine fehlermeldung. Hab mit 2 Varianten probiert, beide haben unterschiedliche Fehlermeldungen. Hier die Erste Variante: (Auszug) ================= /* Example: Control a WTV020-SD-16P module to play voices from an Arduino board. Created by Diego J. Arevalo, August 6th, 2012. Released into the public domain. */ #include <WTV020SD16P.h> int resetPin = 2; // The pin number of the reset pin. int clockPin = 3; // The pin number of the clock pin. int dataPin = 4; // The pin number of the data pin. int busyPin = 5; // The pin number of the busy pin. Wtv020sd16p wtv020sd16p(resetPin,clockPin,dataPin,busyPin); . . . ================= Die letzte Zeile wird angemeckert: 'Wtv020sd16p' does not name a type Zweite Variante: ================= #include <WTV020SD16P.h> int clockPin = 3; // The pin number of the clock pin. int dataPin = 4; // The pin number of the data pin. int busyPin = 5; // The pin number of the busy pin. /* Create an instance of the Wtv020sd16p class. 1nd parameter: Clock pin number. 2rd parameter: Data pin number. 3th parameter: Busy pin number. */ WTV020SD16P wtv020sd16p(clockPin,dataPin,busyPin); void setup() { wtv020sd16p.setVolume(7); } Fehlermeldung: Arduino: 1.8.8 (Windows 10), Board: "Arduino/Genuino Uno" ...\ccdVKZYW.ltrans0.ltrans.o: In function `main': ...\Arduino\hardware\arduino\avr\cores\arduino/main.cpp:46: undefined reference to `loop' collect2.exe: error: ld returned 1 exit status exit status 1 Fehler beim Kompilieren für das Board Arduino/Genuino Uno. Im Arduino Forum war beschrieben,das die 2. Variante gelaufen ist. https://forum.arduino.cc/index.php?topic=468617.0 Deshalb hab ich das kopiert... Verdrahtung nochmal geprüft, sollte stimmen. Zwar verstehe ich nicht warum die Start/Stop Taste nicht belegt wird... Vielleicht ist es auch ein ganz einfacher fehler das ich beim Einbinden twas falsch gemacht, wie schon gesagt Neuling, bis auf die 4 Grundkurse hat ich noch nichts mit Arduino gemacht.
Du hast vermutlich die verlinkte Lib nicht eingebunden. Das Verzeichnis
aus dem ZIP muss in den Installationsordner Arduino, Unterordner
Libraries. Dann Arduino neu starten und du findest das Beispiel schon
direkt unter Datei/Beispiele.
>Aber irgendwo kann man den Programmer doch verwenden, oder?
Ja, aber nicht für Arduino.
Warum fängst Du für jedes Unterproblem immer einen neuen Thread an? Hier gelöst: Beitrag "Re: WTV020 Start - Stop - ohne AVR"
Doch, ist eingetragen bei den "Beigetragenen Bibliotheken" Wenn ich aber in den Biblotheksverwalter gehe finde ich keinen Eintrag der mit "WTV" beginnt Hab noch einen neuen Thread aufgemacht zu dem Thema oder ist das nicht so sinnvoll?
...weil es ja jetzt nicht mehr um "ohne AVR" geht. Du meinst, ich sollte im alten weiterschreiben? Gut dann lösche ich das wieder... Geht nix löschen, hab wohl keine Berechtigung
:
Bearbeitet durch User
Bernd Z. schrieb: > Doch, ist eingetragen bei den "Beigetragenen Bibliotheken" Hast du unter Beispiele einen Eintrag mit WTV...? Falls nicht ist die Bibliothek nicht richtig eingebunden. Ich habe das gestern auch kurz gemacht, allerdings durch direktes Reinkopieren ins das Verzeichnis. Hat auf Anhieb compiliert.
Nein, in den Beispielen sehe ich es nicht. Hatte in die Libraries auch direkt kopiert. Im Ordner Examples sind aber nur fertige *.ino drin... In den Bibliotheken sind die Examples mit drin, in der von mir benutzten sind keine drin. Muss mir vielleicht eine andere Bibliothek laden. Hab jetzt mal mit einem DHT probiert und dabei ist mir das aufgefallen. Hab die DHT kopiert und auch in den beispielen ist jetzt ein DHT Eintrag. Mit dem DHT klappe es, also liegt es am fehlenden Beispiel in meiner Lib Bin begeistert... Welche WTV020 Lib hast Du benutzt?
:
Bearbeitet durch User
Beim hochladen der WTV Beispieldatei kommt wieder die gleiche Fehlermeldung "exit status 1 Wtv020sd16p.h: No such file or directory" Benutze ich den Sketch kommt die Fehlermeldung beim Hochladen nicht, dort ist der Eintrag "#include <WTV020SD16P.h>" groß geschrieben, in der Beispieldatei nicht. Ok, sketch seperat erstellt und 8 ad4 Titel drauf, dabei den vormals 20 Titel Eintrag auf 8 reduziert, ============== Serial.println("Playing from 0 to 8..."); // Play the AD4-files from "0000.AD4" to "0020.AD4". // All of my files have/had a duration below 5 seconds. // ATTENTION: Files have to start with number "0000" and // must be continuously! for(int i = 0; i < 9; i++) ============== ich höre aber nichts :-( ohne den Arduino funktioniert es mit dem abspielen... Wenn ich den Reset Pin am Modul abklemme funktioniert per Hand Ich habe laut einem Schaltbild: Modul Pin - Arduino 1 4 7 5 10 6 15 7 Offenbar muss ich anderes anschließen: Connections: Module pin 1 --> arduino pin 2 (reset) module pin 7 --> arduino pin 3 (clock) module pin 10 --> arduino pin 4 (data) module pin 15 --> arduino pin 5 (busy) ============== Sound geht jetzt, springt nn zum nächsten Titel...
:
Bearbeitet durch User
Die Library geht von einem wtv020 Modul aus, dass für "two line serial mode" konfiguriert mode, also auf Befehle von einem Steuergerät wie deinem arduino wartet. Mit großer Wahrscheinlichkeit jedoch hast du ein Modul erwischt, dass im "mp3 player mode" konfiguriert wurde. Dann sind Eingänge wie clock oder data anders belegt (z.b. ändern Sie die Lautstärke, wenn du dort einen Taster anschließt). Das hat zwar alles überhaupt nichts mit dem Problem zu tun, dass die Bibliothek noch nicht eingebunden wird. Wenn du dies jedoch bisher nicht zweifelsfrei abgeklärt hast, würde ich dir empfehlen zuerst den Modus deines Moduls herauszufinden, bevor du weiter mit einer Library kämpfst, die später gar nicht anwendbar ist. Du findest alles im entsprechenden Datenblatt (letzte Seiten mit den schaltungsbeispielen für die unterschiedlichen Modi). Ingo
Das mit der lib konnte ich klären, ich hatte es weiter oben beschrieben. Am Ende lag es auch noch an den falschen Verbindungen zum Arduino...
Na also, geht doch voran! Was ich dir noch wärmstens empfehlen kann, wäre ein Logic Analyzer. Die sog. Saleae Clones gibt es für <10€, mit der freien Software Sigrok kann man sehr einfach Signalverläufe von bis zu 8 Signalen verfolgen, auch über längere Zeiträume. Das hilft bei der Fehlersuche ungemein, nicht nur für dieses Projekt. Dabei können auch Bussysteme wie Seriell, SPI, I2C usw. decodiert werden und die Inhalte in „Klartext“ ausgegeben werden.
Ja stimmt,...die Clone vom Analyser funktionieren auch ganz gut? Würde bei Ali mal schauen. Für die Schaltung muss nun noch der Taster rein, und die Schleife für das Abspielen umgestrickt werden, damit auch nur ein Titel spielt und beim nächsten Drücken der Taste der nächste. Die LED die dann "blitzen" soll mass ebenfalls noch rein, aber sie soll nur 30-60 sec lang blitzen. Geht diese Länge überhaupt zu realisieren?
Die vorgestellten Beispiele finde ich für meinen Einsatz viel zu kompliziert. Warum kann ich nicht einfach sagen: wenn Taste start gedrückt spiele song 1 (signal wird an Play Pin9 geschickt nach 60 sec nochmal signal in Pin9, damit der Song wieder anhält, falls er zu lang ist dann signal an next, damit der nächste Titel aufgerufen wird Das ganze dann in einer Schleife von 10 Titeln, am ende nochmal ein Signal an reset und fertig das ganze Hab hier einen code mit Taster offenbar: (hier aus dem Forum) ================== #include <WTV020SD16P.h> const int resetPin= 2; const int clockPin= 3; const int dataPin= 4; const int busyPin= 5; int buttonPin = 12; int button= 0; Wtv020sd16p wtv020sd16p (resetPin, clockPin, dataPin, busyPin); void setup() { wtv020sd16p.reset (); pinMode (buttonPin, INPUT); } void loop() { button = digitalRead (buttonPin); if (button == HIGH) { wtv020sd16p.playVoice (4[/code]); delay(2000); } }] =================== Die 4.Zeile von unten: wtv020sd16p.playVoice (4[/code]); wird mit Fehler angemeckert: expected primary-expression before '/' token Was fehlt indem sketch
:
Bearbeitet durch User
Hab die Fehler zwar beseitigen können, der sketch scheint aber nicht geeignet zu sein. Ob es jetzt das macht wofür es gedacht war kann ich nicht sagen.
nach ewigen strg-c und strg-v komme ich nicht weiter. Wenn ich das Modul nur mit den "play" und "next" Tasten steuern will wird nach "next" gleich der nächste Titel abgespielt. 2x drücken der play taste hält den Titel an, aber wenn ich jetzt "next" auslöse geht der nächste ong weiter. Mit einer loop funktioniert es zwar, aber da werden ja alle Titel hintereinander abgespielt. Ich weis nicht wie ich die Schleife im sketch und mit einem Taster unterbrechen soll, auch nicht wie ich das ganze per Taste starte...bin so langsam am Ende... Hier mal meine Zusammenstückelungen ========================== // playPin => pin 9 WTV // nextPin => pin 13 WTV // prevPin => pin 12 WTV // PIN_WTV_RESET => pin 1 WTV // PIN_WTV_DATA => pin 6 WTV // PIN_WTV_BUSY => pin 15 WTV #include <WTV020SD16P.h> #define DELAY_RESET 1000 // nur reset und busy verwendet, mass aber alle deklarieren #define PIN_WTV_RESET 2 #define PIN_WTV_CLOCK 3 #define PIN_WTV_DATA 4 #define PIN_WTV_BUSY 5 // Create an object of the "driver". Wtv020sd16p wtv020sd16p(PIN_WTV_RESET, PIN_WTV_CLOCK, PIN_WTV_DATA, PIN_WTV_BUSY); int playPin = 12; int nextPin = 13; void setup() { pinMode(playPin, OUTPUT); pinMode(nextPin, OUTPUT); Serial.begin(9600); wtv020sd16p.reset(); } void loop() { // for(int i = 0; i < 9; i++) { digitalWrite(playPin, HIGH); delay(500); // digitalWrite(nextPin, HIGH); delay(500); wtv020sd16p.playVoice(0); // digitalWrite(playPin, LOW); wtv020sd16p.stopVoice(); delay(15000); digitalWrite(playPin, LOW); delay(500); wtv020sd16p.playVoice(1); // digitalWrite(playPin, LOW); wtv020sd16p.stopVoice(); delay(15000); wtv020sd16p.playVoice(4); // digitalWrite(playPin, LOW); wtv020sd16p.stopVoice(); delay(15000); // wtv020sd16p.stopVoice(); digitalWrite(nextPin, LOW); delay(100); // wtv020sd16p.stopVoice(); } } ============= ich rufe Titel 0, 1 und 4 auf
:
Bearbeitet durch User
Das Problem ist hier ein wenig, dass ein paar Details fehlen: - Welches Modul hast du genau? Es gibt da ja nach Aussage verschiedene Ausführungen. Wie funktioniert dein Modul. Was muss man ansteuern? - Man müsste aus deinem Schaltplan und dem Text Reverse Engineering machen, um herauszufinden was du genau machen willst. Das wird kaum jemand machen. Dir ist klar, was du willst, dem Leser nicht. - Wenn du mehrere Vorgänge parallel hast (Taster abfragen, Signal State Machine und LED blinken) bietet sich das in einzelnen Unterfunktionen an, die jeweils eine eigene State Machine abbilden. Das geht mit Hilfe von switch/case Stukturen. Klingt kompliziert, ist es aber nicht. Jedes Unterprogramm wird so geschrieben, dass es Abfragen macht um ggf. in einem neuen State zu springen. Jedes Unterprogramm wird schnellstmöglich wieder verlassen, damit alle anderen Unterprogramme im gleichen Zeittakt aufgerufen werden können. Also du kommst (hier) am besten weiter, wenn du etwas mehr beschreibst. Vielleicht kannst du eine Signalabfolge darstellen/skizzieren.
Beschreibung Eine Klingeltaste ist die Gesamtsteuerung Taste gedrückt = kurzer Impuls Start 1.song (das WTV Modul braucht ein LOW zum auslösen der jeweiligen Funktionen) und LED = High, blinkend Länge des Song: delay 30sec nach Ablauf springt zum nächsten Titel und wartet auf erneute Eingabe. Taste gedrückt = kurzer Impuls Start 2.song und LED = High, blinkend Länge des Song: delay 30sec nach Ablauf springt zum nächsten Titel und wartet auf erneute Eingabe. ↑ Das hier oben soll die loop sein ================= Bei der direkten Steuerung des Modul wird beim drücken der „next“ Taste sofort der nächste song abgespielt, den reset Eingang (WTV020) kann ich hier nicht verwenden, weil dann immer nur der 1.song abgespielt wird. Die beiden Befehle: wtv020sd16p.playVoice(1); wtv020sd16p.stopVoice(); könnte ich verwenden, es gibt keinen „next“ Befehl für das Modul In der Datei WTV020SD16P.cpp aus dem lib Verzeichnis ist noch folgendes beschrieben/definiert void Wtv020sd16p::playVoice(int voiceNumber){ sendCommand(voiceNumber); Also könnte man durch Aufruf der voiceNumber den nächsten Titel aufrufen aber erst abspielen wenn Taste nochmal gedrückt wurde. Insgesamt wollte ich 10 Titel verwenden, danach wird wieder der 1.song abgespielt Ich verwende das WTV020 M01 – spielt *.ad4 das WTV020sd16 Modul spielt *.mp3. Das Dateiformat der songs muss 0000.ad4 0001.ad4 usw. sein. Der Rest ist gleich. Ich weis nicht wie ich es beschreiben soll: entweder ich steuere das Modul rein Hardware technisch, also so, wie es meine Schaltung ganz am Anfang machen sollte, dabei werden die Arduino Pin als Ausgänge definiert und schalten dann das Modul oder reine Softwaresteuerung durch Arduino. Aber das Problem ist wie schon benannt, das Betätigen der Next Taste am WTV spielt den neuen Titel sofort ab., deswegen scheint die Steuerung über die 4 Anschlüsse 1,7,10,15 die bessere Variante Einziger Input ist ein Taster, und zusatzlicher output ist eine LED Im Gesamtschaltbild ist ein SD20 (20Pin) Modul, da sind die Anschlüsse anders. Richtiger Anschlüss siehe Anhang
:
Bearbeitet durch User
Vorbildich! Damit kann man arbeiten. Ich werde versuchen, heute Abend mal einen ersten Vorschlag einzustellen.
Doch nicht ganz klar, dein Anschlussbild "falsch_hier_richtig" stiftet Verwirrung. Schließe bitte die Pins wie folgt an WTV Pin 1 an Arduino Pin 4 WTV Pin 7 an Arduino Pin 5 WTV Pin 10 an Arduino Pin 6 WTV Pin 15 an Arduino Pin 7 Sonst keine weiteren Digitalsignale, nur noch Power und GND Das Programm wie folgt testen, damit sollte das Programm je 5sec die Sounds in der Reihenfolge 1, 4, 2, 3 spielen, ohne Wenn und Aber. Geht das soweit? Dann machen wir weiter. Deine obigen Ansätze sehen so aus, als ob du serielle Modulansteuerung per SPI und Tastenansteuerung miteinander vermischen willst. Das geht natürlich nicht. Der SPI-Treiber auf dem Arduino soll ja dafür sorgen, dass du jeden Sound gezielt starten und stoppen kannst. Also nicht mehr mit NEXT oder START rumspielen... #include <WTV020SD16P.h> #define PIN_WTV_RESET 4 #define PIN_WTV_CLOCK 5 #define PIN_WTV_DATA 6 #define PIN_WTV_BUSY 7 // Create an object of the "driver". Wtv020sd16p wtv020sd16p(PIN_WTV_RESET, PIN_WTV_CLOCK, PIN_WTV_DATA, PIN_WTV_BUSY); void setup() { wtv020sd16p.reset(); } void loop() { wtv020sd16p.playVoice(1); delay(5000); wtv020sd16p.playVoice(4); delay(5000); wtv020sd16p.playVoice(2); delay(5000); wtv020sd16p.playVoice(3); delay(5000); }
Ändere die Loop-Funktion bitte wie folgt, da das obige Kommando auf Abschluss der Ausgabe wartet. Wir wollen nur starten. void loop() { wtv020sd16p.asyncPlayVoice(1); delay(5000); wtv020sd16p.asyncPlayVoice(4); delay(5000); wtv020sd16p.asyncPlayVoice(2); delay(5000); wtv020sd16p.asyncPlayVoice(3); delay(5000); wtv020sd16p.stopVoice(); delay(5000); } Jetzt sollte es so sein, dass jeder Sound exakt 5sec gespielt wird, Inder Reihenfolge 1, 4, 2, 3. Dann sollte 5sec Pause folgen und dann sollte das Spiel von vorne losgehen. Prüfst Du das mal?
Ja, hab ich diesmal gleich richtig angeschlossen, Im 1. Beispiel werden die Titel jeweils bis zum Ende gespielt, im letzten Beispiel jeweils für 5sec, wie Du beschrieben hast. und von vorn wieder los...
Ich probiere mich seit paar Tagen an den sketches, So richtig steige ich nicht durch... Eine LED soll 1 sec blinken für insgesamt 6sec, nachdem ein Taster kurz gedrückt wurde. Wo muss ich die 1 sec blinken einbauen? ===================== int LED=6; int taster=7; int tasterstatus=0; void setup() { pinMode(LED, OUTPUT); //Der Pin mit der LED (Pin 6) ist jetzt ein Ausgang. pinMode(taster, INPUT); //Pin mit dem Taster (Pin 7) ist jetzt ein Eingang. // INPUT_PULLUP ersetzt den Widerstand } void loop() { tasterstatus=digitalRead(taster); //Hier wird der Pin7 ausgelesen if (tasterstatus == LOW) // Wenn der taster gedrückt ist (Das //Spannungssignal ist low).. { //Programmabschnitt des IF-Befehls öffnen. digitalWrite(LED, HIGH); delay(6000); digitalWrite(LED, LOW); } else { digitalWrite(LED, LOW); // ...soll die LED aus sein. } }
Der Logikanylyser ist auch angekommen. Bei Verwendung des sketchs: ////////////////////////////////////////////////////// // // LED per PWM nach oben und unten dimmen // ////////////////////////////////////////////////////// int REDLED = 9; // hier befindet sich eine LED int brightness = 0; // mit dieser Helligkeit int fadeAmount = 5; // Grad der Helligkeitsänderung void setup() { pinMode(REDLED, OUTPUT); } void loop() { // Helligkeit für LED setzen: analogWrite(REDLED, brightness); // heller oder dunkler je nach Vorzeichen von fadeAmount: brightness = brightness + fadeAmount; // Am Rand des Helligkeitsspektrums kehren // wir die Veränderung der Helligkeit um if (brightness == 0 || brightness == 255) { fadeAmount = -fadeAmount ; } delay(20); // etwas Pause lassen } =========== bring er einen framing error, anylysiert wird pin9 mit 4MS/s andere Einstellung meckert "Saleae Logic" an. Die Analyzers Einstellung ist: Async Serial
Hier ein Programmvorschlag für dein eigentliches Problem: Es ist nicht nach allen Regeln der Kunst, sollte aber einen Eindruck vermitteln, wie man parallele Tätigkeiten in ein Programmablauf bekommt. #include <Wtv020sd16p.h> #define LED_OUT 12 #define TASTER 13 #define TIME_LED_FLASH 20 // Blinkgeschwindigkeit in 10ms Schritten #define TIME_SOUND 3000 // Soundzeit in 10ms Schritten int resetPin = 4; // The pin number of the reset pin. int clockPin = 5; // The pin number of the clock pin. int dataPin = 6; // The pin number of the data pin. int busyPin = 7; // The pin number of the busy pin. Wtv020sd16p wtv020sd16p(resetPin,clockPin,dataPin,busyPin); // ------------------------------------------------------------------------ ---------------------------------- void setup() { pinMode (LED_OUT, OUTPUT); pinMode (TASTER, INPUT_PULLUP); // Pullup für Optokoppler/Taster Eingang aktivieren wtv020sd16p.reset(); } // ------------------------------------------------------------------------ ---------------------------------- // "led_flasher" wird im 10ms Takt aufgerufen, per "mode" lässt sich Zustand 0:AUS oder 1:BLINKEN festlegen void led_flasher (uint8_t mode) { static uint8_t counter, state; if (mode == 0) { state = 0; counter = 0; // Zaehler zurücksetzen digitalWrite(LED_OUT, 0); // LED aus } else { counter++; if (counter >= TIME_LED_FLASH) // Flashzeit hochzaehlen { counter = 0; state ^= 1; // nach abgelaufener Zeit Zähler rücksetzen und Ausgang toggle digitalWrite(LED_OUT, state); } } } // ------------------------------------------------------------------------ ---------------------------------- // "handler" wird alle 10ms aufgerufen, hier wird die Taste ausgewertet, Sounds gestartet und die LED bedient void handler (void) { static uint8_t state; static uint16_t counter; switch (state) { case 0 : // Warten auf Taster default : { counter = 0; if (digitalRead(TASTER) == 0) { wtv020sd16p.asyncPlayVoice(1); // Wenn Tastendruck erkannt Sound 1 starten und nächster Schritt state = 1; } } break; case 1 : // Sound spielt, LED blinken lassen { led_flasher(1); // LED blinkt counter++; if (counter >= TIME_SOUND) // Soundzeit abgelaufen { wtv020sd16p.stopVoice(); // Soundausgabe stoppen led_flasher(0); // LED aus state++; // nächster Step } } break; case 2 : { counter = 0; if (digitalRead(TASTER) == 0) // wieder warten auf Tastendruck { wtv020sd16p.asyncPlayVoice(2); // Sound 2 starten state++; } } break; case 3 : { led_flasher(1); // wieder LED blinken lassen counter++; if (counter >= TIME_SOUND) { wtv020sd16p.stopVoice(); // nach Zeit Sound stop led_flasher(0); state = 0; // wieder zu Schritt 0 } } break; } } // ------------------------------------------------------------------------ ---------------------------------- void loop() { static uint32_t timer_compare; if (millis() >= (timer_compare+10)) // 10ms vergangen? { timer_compare = millis(); // neuen Zeitpunkt merken handler(); // handler() wird alle 10ms 1x aufgerufen } }
Bzgl. des Logic-Analyzers. Du stellst einen Decoder "Async" für Channel 0 ein, das bedeutet, man möchte eine serielle UART-Schnittstelle an Channel 0 decodieren. Darum geht es in diesem Fall aber nicht. Wenn Du nur reine Digitalsignale anaylsieren willst brauchst du keinen Decoder. In diesem Projekt könntest Du schauen, wie die Befehle per SPI an den WTV übertragen werden. Zu diesem Zweck brauchst Du hier zwei Kanäle, CLK an Pin 7 und DATA an Pin 10. Der zuständige Decoder muss dann auf SPI eingestellt werden. Beschäftige dich etwas damit und schaue vielleicht ein paar Videos oder sonstige Tutorials, dann bekommst du schnell mehr Klarheit.
:
Bearbeitet durch User
Das funktioniert perfekt, danke. Wie hätte ich darauf kommen sollen?
warum ist uint8_t und uint16_t benutzt? Hätte für LED und Taste uint8_t gereicht oder hat das einen anderen Hintergrund?
Bernd Z. schrieb: > Das funktioniert perfekt, danke. Gern geschehen. > Wie hätte ich darauf kommen sollen? Ohne Programmiererfahrung schwierig. Aber vielleicht bist du jetzt ja angefixt und machst einfach noch mehr mit Arduino und Co. Starte mit den einfachen Sachen und lerne dabei, Schritt für Schritt Bernd Z. schrieb: > warum ist uint8_t und uint16_t benutzt? Man soll möglichst immer die native Datenbreite des Prozessors nehmen, die kann er am besten verarbeiten. „state“ kann nur maximal 3 annehmen, da reicht die native Datenbreite des AVRs mit 8bit vollkommen. Für „counter“ kann der Wert bis zu 3000 annehmen, da reicht 8bit nicht. Also nimmt man 16bit. Bei einem ARM Prozessor mit 32bit kann man in aller Ruhe alles mit 32bit machen, der Prozessor mag das lieber als 8bit irgendwo herauszulösen. Mit 32bit stößt man seltener an Zahlengrenzen. 32bit würden hingegen einen AVR schon mehr beschäftigen. Schöner Leistungskiller für beide Prozessoren sind Fließkommazahlen, wenn die CPU nicht eine extra Einheit dafür hat. In dieser Anwendung ist das aber alles total egal, auch der AVR langweilt, sich hier zu ca. 99%.
Übrigens sieht dein neues Bild vom Logic Analyzer noch nicht richtig aus. Ich würde erwarten, dass man bei CLOCK die 16(?) Bits des Steuerwortes sieht, an DATA die zugehörigen Daten. CLOCK ist an Pin 7 des WTV, DATA an Pin 10.
Bernd Z. schrieb: > Wie hätte ich darauf kommen sollen? Bin den Thread gerade nochmal durchgegangen, ich war bei dem Vorschlag der Verwendung eines Arduinos etwas zu optimistisch. Das Starten und Stoppen von Sounds ist banal einfach und wäre wirklich nur ein Wenigzeiler geworden. Etwas kompliziert wurde es durch die Forderung einer parallel blinkenden LED. Wenn ich drüber nachdenke wäre es vielleicht im ersten Ansatz noch einfacher...
Der folgende Ansatz bringt das gleiche Ergebnis und ist vielleicht für den Anfänger leichter zu verstehen. Dafür bietet es aber kaum Möglichkeiten für weitere parallele Aktionen. Außerdem weißt Du jetzt schon, wie eine state machine funktioniert. #include <Wtv020sd16p.h> #define LED_OUT 12 #define TASTER 13 #define TIME_LED_FLASH 20 // Blinkgeschwindigkeit in 10ms Schritten #define TIME_SOUND 3000 // Soundzeit in 10ms Schritten int resetPin = 4; // The pin number of the reset pin. int clockPin = 5; // The pin number of the clock pin. int dataPin = 6; // The pin number of the data pin. int busyPin = 7; // The pin number of the busy pin. Wtv020sd16p wtv020sd16p(resetPin,clockPin,dataPin,busyPin); // ------------------------------------------------------------------------ ---------------------------------- void setup() { pinMode (LED_OUT, OUTPUT); pinMode (TASTER, INPUT_PULLUP); // Pullup für Optokoppler/Taster Eingang aktivieren wtv020sd16p.reset(); } void loop() { uint8_t x, y; for (x=1; x<=2; x++) { while (digitalRead(TASTER)); // Warten auf Taster=0 wtv020sd16p.asyncPlayVoice(x); // Sound x starten for (y=0; y<(TIME_SOUND/TIME_LED_FLASH); y++) // Schleife zum LED blinken { digitalWrite(LED_OUT, !digitalRead(LED_OUT)); // alle "TIME_LED_FLASH" ms den Ausgang toggeln delay(TIME_LED_FLASH); } wtv020sd16p.stopVoice(); // Ausgabe beenden digitalWrite(LED_OUT, 0); // LED loeschen } }
Harald schrieb: > Übrigens sieht dein neues Bild vom Logic Analyzer noch nicht richtig > aus. Ich würde erwarten, dass man bei CLOCK die 16(?) Bits des > Steuerwortes sieht, an DATA die zugehörigen Daten. Ja, hast Recht, vielleicht habe ich auch nicht richtig gezoomt... und nur den "blauen" Teil gesehen.
:
Bearbeitet durch User
Harald schrieb: > Der folgende Ansatz bringt das gleiche Ergebnis und ist vielleicht für > den Anfänger leichter zu verstehen. Bei "uint" hatte ich nicht verstanden, warum 8bit nicht reichen, aber jetzt verstanden. Ja, ein bischen einfacher schon. ▲ Funktioniert genauso..... für mich einfacher die Anzahl der Titel zu erhöhen :-) Bei der ersteren Variante suchte ich vergeblich nach einer Möglichkeit das Tastverhältnis der LED zu ändern. "state ^= 1;" ? Ich nehme mal an Uno kennt Standard=50% deshalb fehlt das, richtig? Im 2. zwar gefunden "digitalWrite(LED_OUT, !digitalRead(LED_OUT)" ist auch die 50% Einstellung : out=1 out=0 - oder?
"if....state" verstehe ich so, das ich z.B. 1x klick Taste 1.LED an, 2x klick 2.LED an, also ein CD4017.
Noch eine letzte Frage: (TIME_SOUND/TIME_LED_FLASH) ist tatsächlich eine Division? Die Variablen zu nutzen, ist natürlich viel intellgenter, als eine Zahl einzutragen.
Bernd Z. schrieb: > "if....state" verstehe ich so, das ich z.B. 1x klick Taste 1.LED > an, 2x > klick 2.LED an, also ein CD4017. Nur ist die Variable dann das PIN am Uno :-( Da könnte ich ein Schieberegister nehmen....dann bleibt es seriell
:
Bearbeitet durch User
Bernd Z. schrieb: > Noch eine letzte Frage: > (TIME_SOUND/TIME_LED_FLASH) ist tatsächlich eine Division? > Die Variablen zu nutzen, ist natürlich viel intellgenter, als eine Zahl > einzutragen. Das ist eine Division, allerdings schon zu Compilierzeit. D.h. im übertragenen Programm ist dann das Ergebnis der Division der beiden Konstanten verwendet, es wird nicht zur Laufzeit dividiert.
Bernd Z. schrieb: > Bernd Z. schrieb: >> "if....state" verstehe ich so, das ich z.B. 1x klick Taste 1.LED >> an, 2x >> klick 2.LED an, also ein CD4017. > > Nur ist die Variable dann das PIN am Uno :-( > Da könnte ich ein Schieberegister nehmen....dann bleibt es seriell Ich kann dir leider nicht folgen, führe mal etwas aus was du möchtest.
So wäre die Änderung mit variablem LED Tastverhältnis #define TIME_LED_ON 20 // LED ein Zeit in ms #define TIME_LED_OFF 80 // LED aus Zeit in ms #define TIME_SOUND 3000 // Soundzeit in 10ms Schritten for (y=0; y<(TIME_SOUND/(TIME_LED_ON+TIME_LED_OFF); y++) { digitalWrite(LED_OUT, 1); delay(TIME_LED_ON); digitalWrite(LED_OUT, 0); delay(TIME_LED_OFF); }
Korrektur define TIME_LED_ON 2 // LED ein Zeit in 10ms #define TIME_LED_OFF 8 // LED aus Zeit in 10ms #define TIME_SOUND 3000 // Soundzeit in 10ms Schritten for (y=0; y<(TIME_SOUND/(TIME_LED_ON+TIME_LED_OFF); y++) { digitalWrite(LED_OUT, 1); delay(TIME_LED_ON*10); digitalWrite(LED_OUT, 0); delay(TIME_LED_OFF*10); }
Das war eine Überlegung wie "if...state" funktioniert. Ich bezog mich auf Deinen 1.code ========================= if (mode == 0) { state = 0; counter = 0; digitalWrite(LED_OUT, 0); } else { counter++; if (counter >= TIME_LED_FLASH) { counter = 0; state ^= 1; digitalWrite(LED_OUT, state); ========================= war natürlich nicht korrekt meine Schreibweise "if...state"
:
Bearbeitet durch User
Ja ne, das war mir schon klar. Ich bezog mich auf: >> klick 2.LED an, also ein CD4017. >> Nur ist die Variable dann das PIN am Uno :-( >> Da könnte ich ein Schieberegister nehmen
Wenn ich das mit dem uno machen würde, müsste ich an je einen Ausgang eine LED hängen, die Ausgabe wäre parallel, ein 4017 würde am Eingang seriell arbeiten und jeweils seine Ausgänge schalten.
Carlo0109 schrieb: > Wenn ich das mit dem uno machen würde, müsste ich an je einen > Ausgang > eine LED hängen, die Ausgabe wäre parallel, ein 4017 würde am Eingang > seriell arbeiten und jeweils seine Ausgänge schalten. Ich verstehe leider immer noch nicht, worauf Du hinaus möchtest. Wir haben ein Programm für den WTV gebaut, du sprichst von 4017, LEDs und paralleler Ausgabe. Grübel...
Ich hatte den Gedanken wofür man die Befehle noch verwenden könnte, hat nix mit WTV zu tun...
Nach all den Zeilen würde ich gerne als Resümee noch wissen, ob Dir die Lösung per Software/Arduino gefallen hat oder ob du es doch lieber in Hardware umgesetzt hättest.
Ja, natürlich, hätte mich schon noch gemeldet, musste paar dringende Dinge erledigen. Ich möchte das nicht mehr in Hardware umsetzen, die Softwarelösung ist einfach genial! Bin schon am zusammensuchen der anderen Bauteile, ich hatte ganz weit vorher eine Lösung mit einem U880 :-) da hat aber der benutzer einen Kurzschluß verursacht und ich habe keinen Schaltplan mehr. Einen EProm hatte ich noch uns eine pcb. Seit mehreren Jahren suchte ich einen Ersatz dafür, weil das was es auf dem Markt gibt, mir nicht gefällt. Ich bin total inspiriert, auch andere Sachen zu machen, wie Du es schon eingangs sagtest, einmal Blut geleckt.... Die Hardwarelösung hätte so ausgesehen: allein die zu verlötenden Drähte... der WTV fehlt da noch.. Bin gerade beim Einrichten des Nano, muss den Treiber noch suchen, aber Du hattest oben ja schon geschrieben worauf ich achten muss. Zwischendurch hab ich noch paar Sensoren etc. gekauft:-)
So geht erstmal mit dem Nano, aber das Blamken strtet sofort der Sound viel später und er springt zum nächsten Titel. Aktuell hält er nicht mehr an. Muss geute abend nochmal ne Fehlersuche machen.
In der Verdrahtung hab ich keine Fehler gefunden. Aufnahme vom Analyser. Hab gerade mal nachgesehen, mein Uno hat auch einen CH340G drauf, auf dem Nano steht nichts drauf, auf dem serial Chip.
:
Bearbeitet durch User
Bernd Z. schrieb: > steht nichts drauf, auf dem serial Chip. SO16 dürfte CH340 sein, die FTDI gibt es in vielen anderen Bauformen aber nicht in SO16. Ansonsten VID/PID im Geräte-Manager unter Eigenschaften/Details/Hardware-IDs nachsehen und googeln.
SOT16 hat er auch, hab nochmal einen neuen Nano bestellt, bei einem anderen Anbieter. Sollte Montag ankommen.
Der Nano scheint einen Treffer zu haben, hab einen anderen sketch probiert. Der funktioniert auch nicht. Sketch hat am Eingang einen Piezo und soll auf "Klopfen" reagieren. Beim Nano "läuft" die Spannung am Eingang hoch und wieder runter, die LED geht nicht an. Er schwingt sozusagen, Kondensatoren über Ub brachten auch nichts. Schaltung sh. Anhang Sketch hier: =================== int piezoPin = 0; // Analog-Pin=A0 für den Piezo-Sensor int ledPin = 12; // Ausgangspin für die LED int wert = 0; // Aktuell gemessener Wert // Aktuelle Status der LED (wechselt bei Piezo-Klopfzeichen) int ledStatus = LOW; int schwelle = 5; void setup() { pinMode(ledPin, OUTPUT); // Pin 12 für die LED als Ausgangspin setzen Serial.begin(9600); } void loop() { wert = analogRead(piezoPin); // Eingangswert an A0 lesen // Liegt der Wert über dem oben definierten Schwellenwert? Dann Ereignis auslösen if (wert >= schwelle) { ledStatus = !ledStatus; // Status der LED umkehren (1/0 = ein/aus) delay(100); digitalWrite(ledPin, ledStatus); // Pin 12 auf den Status setzen } //else //digitalWrite(ledPin, LOW); Serial.println(wert); // Der Piezo braucht einige Zeit, um sich wieder zu beruhigen, daher 200ms warten. delay(200); } //der sketch reagiert "empfindlicher" //dafür schaltet LED erst beim nächsten "Klopf" wieder aus ===================
:
Bearbeitet durch User
Bin wieder zurück, der Nano ist erst gestern angekommen. Gleiches Problem wie vorher, sketch geht mit dem Nano nicht richtig. Hochladen mit den Einstellungen sh. Anhang funktioniert. Jetzt weis ich nicht mehr weiter, müsste einen Uno verbauen, damit hat es ja funktioniert. Da ich auf dem Uno Board auch einen CH340 habe, kann es am Treiber eigentlich nicht liegen.
:
Bearbeitet durch User
Auf dem neuen Nano ist ein FTDI Chip drauf, wird vom System auch erkannt
Gestern habe ich versucht den 1. Nano mit neuem Bootloader zu flshen, dabei habe ich wahrscheinlich den Uno der eigentlich als Programmiergerät war, geflasht. Nun läuft der Uno genauso (nicht) wie der Nano, also startet allein und spielt alle ausgewählten Titel ab, ohne das er auf die Starttaste reagiert. Aber da scheint ja irgendwas mit den Bootloader, den ich drauf gemacht habe nicht zu passen.
Bitte mal den Arduino UNO/Nano Schaltplan checken, an Pin 13 hängt eine LED, die den PIN gegen Masse zieht. Also verwende für den Tastereingang einen anderen Pin, z.B. D8.
Ich hab die LED an 12 und den Taster an 13. Hab nun die Schaltung soweit fast fertig verdrahtet. Stecke ich jetzt den Nano drauf, der vorher ging, geht es wieder nicht. Uno funktioniert immer noch. Dann hab ich den sketch nochmal draufgespielt, geht es wieder. Kann es sein das der Nano etwas "vergisst"? Was mir auch noch aufgefallen ist, das Modul startet nicht immer am Anfang. Ein 100nF am Reset des Moduls geht nicht, dafür ist der Reset Impuls vom Nano zu kurz. Vielleicht müsste der WTV am Anfang einen längeren Reset bekommen.
Es ist ganz kurios, betreibe ich den Nano mit MTV über die USB Buchse geht es, mit seperaten 8V an Vin geht es nach dem abstecken nicht mehr. (USB entfernt) Wieder zurück auf USB, geht es wieder.
Aktuell muss ich wohl einen Uno nehmen, der geht sowohl an USB als auch externe Versorgung. Der Nano spinnt, ich kann es nicht erklären was der macht. Habe zwischenzeitlich nochmal die erste Variante draufgespielt, da sieht man den Reset am WTV, aber wirklich sicher geht es mit dem Nano nicht.
Hier 2 Bilder vom Analyser. Hab zuerst mit USB Kabel und dann mit externer Ub, in beiden Fällen der Nano, ja er ging gerade mal wieder.
Es scheint das WTV Modul zu sein. Wenn ich es abklemme, läuft der Nano und der Analyser hat auch das passende Bild. Nano hängt an Vin. Nun tausche ich mal das WTV Modul, allein betrieben funktioniert es ohne Fehler.
Muss mich wohl nach einem anderen Sound Modul umsehen. Oder die Uno Variante machen, die geht nach wie vor - warum auch immer
Irgendwie scheinst du meinen Beitrag bzgl. Pin 13 nicht gelesen zu haben...
Doch hab ich, hab aber nicht umgesteckt bzw. Darauf geändert. Ich nahm an das es ein Hinweis auf einen Verbindungsfehler ist. Aber offenbar meinst du das ich es um Stecken MUSS. Komme erst nächste Woche dazu.
Pin 13 ist intern im Arduino Modul an eine LED angeschlossen, die den Pin gegen Masse zieht. Zusätzlich kann es sein, dass verschiedene Bootloader diese LED unterschiedlich handhaben, ich bin kein Arduino-Experte. Daher die Unterschiede. D8 ist hingegen immer frei.
Hallo Harald, ich kam erst jetzt wieder dazu.... Hab den Anschluß in die 8 geändert, es funktioniert wie es soll. Jetzt ist die SD karte kaputt gegangen und eine neue bis 1GB habe ich leider kurzfristig nicht ranbekommen. Der WTV "verträgt" nur bis 1GB. Hab nur noch ab 8GB. Habe mich deswegen mit dem DFPlayer beschäftigt. Nach mehreren Stunden habe ich es mit Deinem sketch auch hinbekommen. Für Dich sicher nur eine 10 min Kaffeepause, aber bei mir dauert es eben länger. Der Vorteil des DFPlayer liegt zum einem an der geringeren Außenbeschaltung aber viel wesentlicher erscheint mir, das ich damit die mp3 direkt verwenden kann, er meckert auch keine Stereo Aufnahmen an. Außerdem spare ich mir die Pegelwandlung. Beim WTV geht nur das ad4 Format. Eine einfache Lautstärke Einstellung geht ebenfalls viel besser mit dem DFPlayer. Nun hat es den Stand, das auch andere es nutzen könnten. Im Anhang mal ein Bild vom Aufbau. Die 1W LED hängt natürlich nicht direkt am Anschluß des Nano :-) Kannst bitte nochmal über den den sketch schauen.. eine Zeile habe ich aus einer anderen Anwendung verwendet, allerdings brauche ich offenbar nur den Aufruf als Start, denn wenn die Zeile fehlte ging es nicht. Die Zeile bezieht sich wohl eher auf die serielle Textausgabe auf das Display. -> "...if (!myDFPlayer.begin(mySoftwareSerial..." Also ohne Deinen sketch hätte ich das auch nicht mal einfach umstellen können, danke nochmal. ...................... #include "SoftwareSerial.h" #include "DFRobotDFPlayerMini.h" #define LED_OUT 12 #define TASTER 8 #define TIME_LED_FLASH 400 // Blinkgeschwindigkeit in 10ms Schritteno #define TIME_SOUND 8000 // Soundzeit in 10ms Schritten //#define DFPLAYER_EQ_NORMAL 0 #define DFPLAYER_EQ_POP 1 //#define DFPLAYER_EQ_ROCK 2 //#define DFPLAYER_EQ_JAZZ 3 //#define DFPLAYER_EQ_CLASSIC 4 //#define DFPLAYER_EQ_BASS 5 #define DFPLAYER_DEVICE_SD 2 SoftwareSerial mySoftwareSerial(10, 11); // RX, TX DFRobotDFPlayerMini myDFPlayer; // -------------------------------------------------------- void setup() { pinMode (LED_OUT, OUTPUT); pinMode (TASTER, INPUT); // INPUT_PULLUP für Optokoppler/Taster Eingang aktivieren myDFPlayer.reset(); //myDFPlayer.play(1); //myDFPlayer.next(); mySoftwareSerial.begin(9600); if (!myDFPlayer.begin(mySoftwareSerial, false)) { //start softwareSerial to communicate with mp3. while(true){ delay(0); // Code to compatible with ESP8266 watch dog. } } myDFPlayer.volume(20); //Set volume value. From 0 to 30 } .....................
:
Bearbeitet durch User
Tja, keine Ahnung, kenne das Produkt DFPlayer nicht. Allerdings spuckt Google das hier aus, mache es doch so https://www.dfrobot.com/wiki/index.php/DFPlayer_Mini_SKU:DFR0299 Die While-Schleife macht meiner Meinung nach keinen Sinn.
Na der ist so ähnlich wie der WTV.... Ja die Schleife macht auch keinen Sinn, im sketch muss sowas wie "myDFPlayer.begin" rein, das fehlte bei vielen Beispielen. Kenne die genaue Schreibweise nicht, deshalb hab ich es gelassen. Hab aber auch noch nich hinreichend getestet. Das WTV Modul kommt noch zum Einsatz, hab noch einen Interessenten der einen Gong haben will.
Harald A. schrieb: > https://www.dfrobot.com/wiki/index.php/DFPlayer_Mini_SKU:DFR0299 Ja, hab ich verwendet...
nochmal ne kurze Rückmeldung... WTV funktioniert auch problemlos mit dem sketch, war wirklich nur der "falsche" Ausgang
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.