Schrittmotor mit Ton

Gast #3940341
Lesenswert?

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
Angehängte Dateien:
Gast #3940613
Lesenswert?

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
}
#3940636
Lesenswert?

@ 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.
Angehängte Dateien:
#3940695
Lesenswert?

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!!!
(Firma: Nisch-Aufzüge) Persönliche Seite #3940753
Lesenswert?

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
Gast #3941774
Lesenswert?

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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren