Hallo Community
Ich versuche gerade ein kleines Projekt zu realisieren, stehe nun jedoch vor einem Problem.
Dieses kann ich leider mit meinem momentanen Wissensstand nicht lösen
Das Projekt ist eine Halloween Deko, diese wird über einen PIR aktiviert.
Die gewünschte Funktion wäre LED und Musik einschalten und nach Ablauf des PIR timer (ca. 70-80sec) wieder ausschalten.
Die LEDs sowie der TFPlayer sind soweit verkabelt und programmiert jedoch auf jeweils einem separaten Arduino Nano.
Nun möchte ich natürlich nur einen nutzen und müsste die Codes zusammenfügen und zwar so dass sie
die oben genannten Funktion haben.
Folgende Codes werden verwendet, diese habe ich mir zusammengewürfelt. Ich bin noch am lernen, bitte um Verständnis wenn diese nicht perfekt sind.
#include "Arduino.h"
#include "SoftwareSerial.h"
// Define connection pins:
#define pirPin 2
// Create variables:
int val = 0;
bool motionState = false; // We start with no motion detected.
int ledPin1 = 5;
int ledPin2 = 6;
int ledPin3 = 7;
void setup() {
pinMode(pirPin, INPUT);
pinMode(ledPin1, OUTPUT);
pinMode(ledPin2, OUTPUT);
pinMode(ledPin3, OUTPUT);
// Begin serial communication at a baud rate of 9600:
Serial.begin(9600);
}
void loop() {
// Read out the pirPin and store as val:
val = digitalRead(pirPin);
// If motion is detected (pirPin = HIGH), do the following:
if (val == HIGH)
analogWrite(ledPin1, random(120)+135);
analogWrite(ledPin2, random(120)+135);
analogWrite(ledPin3, random(120)+135);
delay(random(100));
// Change the motion state to true (motion detected):
if (motionState == false) {
Serial.println("Motion detected!");
motionState = true;
}
// If no motion is detected (pirPin = LOW), do the following:
else {
analogWrite(ledPin1, LOW);
analogWrite(ledPin2, LOW);
analogWrite(ledPin3, LOW);
delay(random(100));
// Change the motion state to false (no motion):
if (motionState == true) {
Serial.println("Motion ended!");
motionState = false;
}
}
}
#include "Arduino.h"
#include "SoftwareSerial.h"
#include "DFRobotDFPlayerMini.h"
SoftwareSerial mySoftwareSerial(10, 11); // RX, TX
DFRobotDFPlayerMini myDFPlayer;
void printDetail(uint8_t type, int value);
void setup()
{
mySoftwareSerial.begin(9600);
Serial.begin(115200);
Serial.println();
Serial.println(F("DFRobot DFPlayer Mini Demo"));
Serial.println(F("Initializing DFPlayer ... (May take 3~5 seconds)"));
if (!myDFPlayer.begin(mySoftwareSerial)) { //Use softwareSerial to communicate with mp3.
Serial.println(F("Unable to begin:"));
Serial.println(F("1.Please recheck the connection!"));
Serial.println(F("2.Please insert the SD card!"));
while(true);
}
Serial.println(F("DFPlayer Mini online."));
myDFPlayer.volume(17); //Set volume value. From 0 to 30
myDFPlayer.play(1); //Play the first mp3
myDFPlayer.EQ(DFPLAYER_EQ_ROCK);
myDFPlayer.randomAll();
}
void loop()
{
static unsigned long timer = millis();
if (millis() - timer > 3000) {
timer = millis();
//myDFPlayer.next(); //Play next mp3 every 3 second.
}
if (myDFPlayer.available()) {
printDetail(myDFPlayer.readType(), myDFPlayer.read()); //Print the detail message from DFPlayer to handle different errors and states.
}
}
void printDetail(uint8_t type, int value){
switch (type) {
case TimeOut:
Serial.println(F("Time Out!"));
break;
case WrongStack:
Serial.println(F("Stack Wrong!"));
break;
case DFPlayerCardInserted:
Serial.println(F("Card Inserted!"));
break;
case DFPlayerCardRemoved:
Serial.println(F("Card Removed!"));
break;
case DFPlayerCardOnline:
Serial.println(F("Card Online!"));
break;
case DFPlayerPlayFinished:
Serial.print(F("Number:"));
Serial.print(value);
Serial.println(F(" Play Finished!"));
break;
case DFPlayerError:
Serial.print(F("DFPlayerError:"));
switch (value) {
case Busy:
Serial.println(F("Card not found"));
break;
case Sleeping:
Serial.println(F("Sleeping"));
break;
case SerialWrongStack:
Serial.println(F("Get Wrong Stack"));
break;
case CheckSumNotMatch:
Serial.println(F("Check Sum Not Match"));
break;
case FileIndexOut:
Serial.println(F("File Index Out of Bound"));
break;
case FileMismatch:
Serial.println(F("Cannot Find File"));
break;
case Advertise:
Serial.println(F("In Advertise"));
break;
default:
break;
}
break;
default:
break;
}
}
Alle Versuche die Codes zusammenzufügen sink kläglich gescheitert. Hier der Code, bis zum void loop habe ich es geschafft ohne Fehler, doch hier komme ich ohne Frust nicht weiter da jeder Versuch mit diversen Fehlern quittiert wird >:(
#include "Arduino.h"
#include "SoftwareSerial.h"
#include "DFRobotDFPlayerMini.h"
SoftwareSerial mySoftwareSerial(10, 11); // RX, TX
DFRobotDFPlayerMini myDFPlayer;
void printDetail(uint8_t type, int value);
// Define connection pins:
#define pirPin 2
// Create variables:
int val = 0;
bool motionState = false; // We start with no motion detected.
int ledPin1 = 5;
int ledPin2 = 6;
int ledPin3 = 7;
void setup() {
mySoftwareSerial.begin(9600);
Serial.begin(115200);
Serial.println();
Serial.println(F("DFRobot DFPlayer Mini Demo"));
Serial.println(F("Initializing DFPlayer ... (May take 3~5 seconds)"));
if (!myDFPlayer.begin(mySoftwareSerial)) { //Use softwareSerial to communicate with mp3.
Serial.println(F("Unable to begin:"));
Serial.println(F("1.Please recheck the connection!"));
Serial.println(F("2.Please insert the SD card!"));
while(true);
}
Serial.println(F("DFPlayer Mini online."));
myDFPlayer.volume(17); //Set volume value. From 0 to 30
myDFPlayer.play(1); //Play the first mp3
myDFPlayer.EQ(DFPLAYER_EQ_ROCK);
myDFPlayer.randomAll();
pinMode(pirPin, INPUT);
pinMode(ledPin1, OUTPUT);
pinMode(ledPin2, OUTPUT);
pinMode(ledPin3, OUTPUT);
// Begin serial communication at a baud rate of 9600:
Serial.begin(9600);
}
void loop() {
// Read out the pirPin and store as val:
val = digitalRead(pirPin);
// If motion is detected (pirPin = HIGH), do the following:
if (val == HIGH)
analogWrite(ledPin1, random(120)+135);
analogWrite(ledPin2, random(120)+135);
analogWrite(ledPin3, random(120)+135);
delay(random(100));
// Change the motion state to true (motion detected):
if (motionState == false) {
Serial.println("Motion detected!");
motionState = true;
}
// If no motion is detected (pirPin = LOW), do the following:
else {
analogWrite(ledPin1, LOW);
analogWrite(ledPin2, LOW);
analogWrite(ledPin3, LOW);
delay(random(100));
// Change the motion state to false (no motion):
if (motionState == true) {
Serial.println("Motion ended!");
motionState = false;
}
}
}
Werden die Serial Prints eigentlich für die library benötigt? Da ich den Monitor sowie kein Display nutze wären sie für mich eigentlich überflüssig.
Danke schonmal für eure Unterstützung
Gruss Enzo