2 Sketche kombinieren?

Hallo,
ich habe da ein Problem.

Ich bekomme 2 Sketche alleine jeweils zum laufen.
Möchte aber nun das der Bewegungsmelder nicht nur die LED zum leuchten bringt sondern auch noch einen Sound abspielt.
Der erste Sketch ist ja ganz simpel.

void setup() {
  pinMode(3,INPUT);
  pinMode(4,OUTPUT);
}

void loop() {
  if (digitalRead(3) == HIGH) {
    digitalWrite(4, HIGH);
    delay(500);
    digitalWrite(4, LOW);   
  }
}

aber ich weiß nicht wie ich den zweiten integriere das er auch bei Pin 3 High den Sound abspielt.

#include <TMRpcm.h>
#include <SPI.h>
#include <SD.h>
#define CHIP_SELECT_PIN  4
#define SPEAKER_PIN      9
TMRpcm tmrpcm;
 
void setup( ) {
  tmrpcm.speakerPin = SPEAKER_PIN;
  Serial.begin( 9600 );
  while ( !Serial ) /*mt*/ ;
  if ( !SD.begin( CHIP_SELECT_PIN ) )
    Serial.println( "SD fail" );
  else {
    tmrpcm.play( "snakec16.wav" );
    delay( 5 );
  }
}
 
void loop( ) {
}

hier sieht man wie es angeschlossen ist in den Sketch.

Kann mir vielleicht jemand einen Tipp geben wie ich das Kombiniere?

Grüße und danke im voraus.

Thomas

Naja, so schwer sollte es nicht sein....

(0. delay ersetzen durch nicht blockierendes Element- Nachtwächter)

  1. die Einbindung der Libs und der Variablen zusammen führen.

  2. die Setups zusammenführen

  3. die Loops zusammenführen

  4. die Unterfunktionen zusammenführen

  5. dann noch sicher stellen, dass sich dann Variablen nicht doppeln...

MaHa76:
Naja, so schwer sollte es nicht sein....

(0. delay ersetzen durch nicht blockierendes Element- Nachtwächter)

  1. die Einbindung der Libs und der Variablen zusammen führen.

  2. die Setups zusammenführen

  3. die Loops zusammenführen

  4. die Unterfunktionen zusammenführen

  5. dann noch sicher stellen, dass sich dann Variablen nicht doppeln...

Bin leider noch totaler anfänger was das angeht.

Denke das ist so nicht der richtige ansatz oder?

#include <TMRpcm.h>
#include <SPI.h>
#include <SD.h>
#define CHIP_SELECT_PIN  4
#define SPEAKER_PIN      9
TMRpcm tmrpcm;
 
void setup( ) {
  pinMode(3,INPUT);
  pinMode(2,OUTPUT);
  tmrpcm.speakerPin = SPEAKER_PIN;

 
  }

 
void loop( ) {
   if (digitalRead(3) == HIGH) {
    digitalWrite(2, HIGH);!SD.begin( CHIP_SELECT_PIN );
   }
     else {
    tmrpcm.play( "tardis.wav" );
    delay(16000);
    digitalWrite(2, LOW);   
}
}

Der Weg von MaHa76 ist schon der Richtige.
Diese Zeile

digitalWrite(2, HIGH);!SD.begin( CHIP_SELECT_PIN );

sieht komisch aus.

Gruß Tommy

die soll bewirken das wenn Pin 2 High schaltet auch gleichzeitig der Sound der SD Karte abgespielt wird.

Wenn ich wüßte wie es richtig auszusehen hat dann würde ich ja nicht fragen.
Sorry

DM1RTZ:
die soll bewirken das wenn Pin 2 High schaltet auch gleichzeitig der Sound der SD Karte abgespielt wird.

Wenn ich wüßte wie es richtig auszusehen hat dann würde ich ja nicht fragen.
Sorry

Dann musst du noch eine "if-Abfrage " dazu einsetzen.
In der if-Abfrage setzt du deine Anweisung, die deine SD-Karte startet.
Allerdings ist das digitalWrite dann falsch, das muss digitalRead heißen.

Und ein wenig Grundlagen lernen, sollte auch helfen.
Diese Anweisungen sind alles prima in der IDE in Beispielen vorhanden.

Probier mal:

#include <TMRpcm.h>
#include <SPI.h>
#include <SD.h>
#define CHIP_SELECT_PIN  4
#define SPEAKER_PIN      9
TMRpcm tmrpcm;
 
void setup( ) {
  pinMode(3,INPUT);
  pinMode(4,OUTPUT);
  tmrpcm.speakerPin = SPEAKER_PIN;
  Serial.begin( 9600 );
  while ( !Serial ) /*mt*/ ;
  if ( !SD.begin( CHIP_SELECT_PIN ) )
    Serial.println( "SD fail" );
}
 
void loop( ) {
  if (digitalRead(3) == HIGH) {
    digitalWrite(4, HIGH);
    tmrpcm.play( "snakec16.wav" );
    delay(16000);
    digitalWrite(4, LOW);   
  }
}

Gruß Tommy

Danke
Teste ich mal

Tommy56:
Probier mal:

#include <TMRpcm.h>

#include <SPI.h>
#include <SD.h>
#define CHIP_SELECT_PIN  4
#define SPEAKER_PIN      9
TMRpcm tmrpcm;

void setup( ) {
  pinMode(3,INPUT);
  pinMode(4,OUTPUT);
  tmrpcm.speakerPin = SPEAKER_PIN;
  Serial.begin( 9600 );
  while ( !Serial ) /mt/ ;
  if ( !SD.begin( CHIP_SELECT_PIN ) )
    Serial.println( "SD fail" );
}

void loop( ) {
  if (digitalRead(3) == HIGH) {
    digitalWrite(4, HIGH);
    tmrpcm.play( "snakec16.wav" );
    delay(16000);
    digitalWrite(4, LOW); 
  }
}




Gruß Tommy

Funktioniert.
Besten Dank.

Jetzt muss ich nur noch rausfinden warum der Blöde lautsprecher knackt die ganze Zeit über

1 Like

DM1RTZ:
Jetzt muss ich nur noch rausfinden warum der Blöde lautsprecher knackt die ganze Zeit über

Weil der Aufbau nicht unbedingt für gute Qualität spricht.
Da solltest du besser einen echten MP3-Player verwenden.

ist nen argument.
Geht aber nur um einen Ton von Paar Sekunden.

Werde mal bisschen testen noch. Vielleicht bekomme ich es reduziert. das reicht schon

In dem oben gezeigten Schaltplan fehlt noch ein RC-Glied zur Glättung der Ausgabe. Ohne bekommt der Lautsprecher ein PWM-Signal, was einfach bescheiden klingt. Man müsste etwas experimentieren um die Wellenform einigermaßen geglättet zu bekommen.