Forum: Mikrocontroller und Digitale Elektronik Schrittmotor mit Ton


von Flo (Gast)


Angehängte Dateien:

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

: Verschoben durch User
von Max M. (jens2001)


Lesenswert?

Bist du noch frisch?
Jetzt sollen wir uns den Code aus deiner beklopten zip rauspulen?

von m.n. (Gast)


Lesenswert?

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.

von Max M. (jens2001)


Lesenswert?

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!

von Flo (Gast)


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
}

von Falk B. (falk)


Angehängte Dateien:

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.

: Bearbeitet durch User
von m.n. (Gast)


Lesenswert?

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.

von Max M. (jens2001)


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!!!

von Winfried J. (Firma: Nisch-Aufzüge) (winne) Benutzerseite


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

von Flo (Gast)


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

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
Noch kein Account? Hier anmelden.