Liebes Forum, ich habe ein Problem mit zwei Codes. Und zwar geht es um eigenen Arduino Code bei dem ein Schrittmotor drehen und währenddessen Musik (001.mp3) in Dauerschleife abgespielt werden soll. Ich habe einen Audioshield und einen A4988 Treiber. Die beiden Codes (TON und SCHRITTMOTOR) Funktionieren auch einzeln auf dem Ardiuno aber wenn ich sie zusammenfüge laufen sie eben nicht mehr. Kann mir jemand helfen und mir die zwei Codes an der richtigen stelle zusammenfügen? Ich bin noch Anfänger und bekommen es einfach nicht gebacken :( vielen dank für eure Hilfe
:
Verschoben durch User
Bist du noch frisch? Jetzt sollen wir uns den Code aus deiner beklopten zip rauspulen?
Max Mustermann schrieb: > Jetzt sollen wir uns den Code aus deiner beklopten zip rauspulen? Nicht wir: DU! ;-) Geh mal davon aus, daß irgendein Timer für beide Funktionen verwendet wird und es garnicht zusammenspielen kann.
m.n. schrieb: > Geh mal davon aus, daß irgendein Timer für beide Funktionen verwendet > wird und es garnicht zusammenspielen kann. Ich binn mal davon ausgegangen das beide Funktionen "Arduino like" mit delay() laufen!
habe gehofft jemand öffnet meine VirenZIP ;D nein spass dachte das ist eleganter.... hier der code der zusammen passen sollte... TON: /*********************************************************************** ******* * Beispiel: simple * * Beschreibung: Dieses Beispiel zeigt die Ansteuerung der SD-Karte und * des MP3-Decoders. * Dabei wird die Datei "001.mp3" von der SD-Karte gelesen * und über den MP3-Decoder ausgegeben. ************************************************************************ ******/ #include <SD.h> #include <SPI.h> #include <AudioShield.h> /*********************************************************************** ******* * Funktionen ************************************************************************ ******/ void setup() { //Einrichten der LEDs pinMode(LED_BLUE, OUTPUT); pinMode(LED_RED, OUTPUT); //beide LEDs ausschalten LED_BLUE_OFF; LED_RED_OFF; //SD-Karte initialisieren //SD_CS als parameter übergeben, da hier ChipSelect anders belegt if( SD.begin( SD_CS ) == false ) { // Programm beenden, da keine SD-Karte vorhanden return; } //MP3-Decoder initialisieren VS1011.begin(); } void loop() { //Puffer für MP3-Decoder anlegen //MP3-Decoder erwartet Daten immer in 32 Byte Blöcken unsigned char buffer[32]; //Datei öffnen und abspielen if( File SoundFile = SD.open( "001.mp3", FILE_READ ) ) { //Blaue LED während dem Abspielen leuchten lassen LED_BLUE_ON; //Verstärker einschalten VS1011.UnsetMute(); //Datei bis zum Ende abspielen while( SoundFile.available() ) { //Puffer mit Daten aus der Datei füllen SoundFile.read( buffer, sizeof(buffer) ); //Daten aus Puffer an MP3-Decoder senden VS1011.Send32( buffer ); } //Internen Datenpuffer vom MP3-Decoder mit Nullen füllen //damit sicher alles im Puffer abgespielt wird und Puffer leer ist //MP3-Decoder besitzt 2048 Byte großen Datenpuffer VS1011.Send2048Zeros(); //Verstärker deaktivieren VS1011.SetMute(); //Blaue LED nach dem Abspielen ausschalten LED_BLUE_OFF; //Datei schliessen SoundFile.close(); } else { //Datei nicht gefunden //Rote LED für 2s leuchten lassen LED_RED_ON; delay( 2000 ); LED_RED_OFF; } } SCHRITTMOTOR: int x; void setup() { pinMode(6,OUTPUT); // Enable pinMode(5,OUTPUT); // Step pinMode(4,OUTPUT); // Dir digitalWrite(6,LOW); // Set Enable low } void loop() { digitalWrite(4,HIGH); // Set Dir high digitalWrite(5,HIGH); // Output high delayMicroseconds(500); // Wait 1/2 a ms digitalWrite(5,LOW); // Output low delayMicroseconds(500); // Wait 1/2 a ms }
@ Flo (Gast) >habe gehofft jemand öffnet meine VirenZIP ;D nein spass dachte das ist >eleganter.... hier der code der zusammen passen sollte... Da musst du wohl mal einen Schritt nach vorn machen. Gedanklich und progrmmiertechnisch. Diese Aufgabe verlangt nach Multitasking, aber das ist einfacher als es klingt. Man muss nur wissen wie es geht, wie immer. Siehe Anhang. Das ist nur ein erster VERSUCH! Ich kenne die Lib für den VS1011 auf dem Arduino NICHT! Aber ich kenne den VS1011. Wahrscheinlich wird es stottern, weil der Datenfluß nicht sinnvoll gesteuert wird. Man muss eine Funktion finden, welche das DREQ Signal des VS1011 abfragt und dann entsprechend erst Daten nachschieben. Die festen delayMicroseconds(500) sind natürlich auch eher unschön, sowas sollte man mittelfristig auf einen Timer umbauen. Vorerst sollte es aber reichen.
:
Bearbeitet durch User
Flo schrieb: > hier der code der zusammen passen sollte... Auweia - das sieht ja aus wie Buchstabensuppe vor dem Umrühren! Flo schrieb: > Ich bin noch Anfänger und bekommen es einfach nicht gebacken :( Das ist auch nichts für Anfänger. Nimm einen 2. Arduino; dann sollte es funktionieren.
Wie vermutet - delay() wohin das Auge schaut! Diese Arduinoleute gehören geteert und gefedert! Das erste was ein Programmieranfänger bei Arduino zu sehen bekommt ist wie man mit hilfe von delay() eine LED blinken lässt! Damit ist die Saat des Unheils doch gesäät. delay() hat in einem ordentlichen Programm nichts zu suchen!!!
Max Mustermann schrieb: > Wie vermutet - delay() wohin das Auge schaut! > > Diese Arduinoleute gehören geteert und gefedert! > Das erste was ein Programmieranfänger bei Arduino zu sehen bekommt ist > wie man mit hilfe von delay() eine LED blinken lässt! Damit ist die Saat > des Unheils doch gesäät. > > delay() hat in einem ordentlichen Programm nichts zu suchen!!! Doch im ersten beispiel, damit man sieht was es bewirkt und warum man zukünftig einen bogen darum machen sollte. Das zweite Beispiel sollte in die Timeslottechnik einführen noch lange bevor man über komplexe Systeme nachdenkt etwa Menueführung oder gar Multitasking. Namaste
danke für die zahlreichen nachrichten und Hilfe, ich schaue mal ob ich mit dem Codeschnipsel (danke @ Falk) was anfangen kann. komme erste nächste Woche dazu, werden dann berichten, nochmals vielen dank
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.