LCD Display flashes when DFPlayer is enabled in Code

Hey,
i have the following setup on an 2560 Mega Clone Board.
PIR Sensor
Blue LED
DFPlayer mini (clone) with 2W Speaker
i2c LCD Display (2x16)
RFID Reader(I think it was RC552 or something)

Everything standalone works, but as soon as i add my DFPlayer in Code, the LCD Display goes on and off, till the PIR detects some movement. Then it is stably on and only the LED Flashes as intended. After there is no movement, the LCD flashes again.

Oh, and also, my LCD is intended if (y=1) to show INAKTIV/DISARMED. Problem: It does that even when y=0.

In the following Config the Code works. I //'d all DFPlayer stuff, but i get the Issue with the Display here. I got 2 other versions of the Code with various Problems.

#include <SPI.h>
#include <MFRC522.h>
#include "Arduino.h"
#include "SoftwareSerial.h"
#include "DFRobotDFPlayerMini.h"
#include <Wire.h>
#include <LiquidCrystal_I2C.h> //importiert eine Bibliothek um das LCD simpel anzusteuern
#define SS_PIN 53
#define RST_PIN 5
MFRC522 mfrc522(SS_PIN, RST_PIN);

const int IR=24; //weist "IR" (für Infarot) den Wert "7" zu.
const int LED=12; //weist "LED" Den Wert "5" zu.
int Bewegung=0; //speichert vorrübergehend ob Bewegung erkannt wurde oder nicht.
int y=0;
LiquidCrystal_I2C lcd(0x3F, 16, 2);//legt den Typ des LCD's fest
SoftwareSerial mySoftwareSerial(10, 11); // Legt Pin 10 und 11 als RX/TX Ports am DFPlayer fest
DFRobotDFPlayerMini myDFPlayer;

void setup() 
{
lcd.init(); 
lcd.backlight(); //legt fest dass die LED Hintergrundbeleuchtung des LCD's nicht deaktiviert sein soll.
pinMode(IR, INPUT);//legt fest dass IR/ Pin 7 ein Input ist.
pinMode(LED, OUTPUT);//legt fest dass LED/ Pin 12 ein Output ist.
Serial.begin(9600);
SPI.begin();
mfrc522.PCD_Init();
lcd.setCursor(0, 0);
lcd.print("AKTIV"); 
lcd.setCursor(0, 1);
lcd.print("ARMED"); 
//myDFPlayer.volume(5);
}


void loop()
{
Bewegung=digitalRead(IR); 



if (y=1) // Wenn der Zahlencode 1031720 lautet...
{  
lcd.setCursor(0, 0);
lcd.print("INAKTIV"); 
lcd.setCursor(0, 1);
lcd.print("DISARMED"); 
digitalWrite(12, HIGH);
}

if (Bewegung == HIGH)
{
//y++;
digitalWrite(12, HIGH);
delay (500);
digitalWrite (12, LOW);
delay(500);
//myDFPlayer.play(1);
}
}

Welcome,

= is for assignment, use == for comparison

That works. Thanks! and what's about the main issue? I am trying to do some kind of alarm.

Also, after adding the RFID Stuff, the PIR won't work anymore.

#include <SPI.h>
#include <MFRC522.h>
#include "Arduino.h"
#include "SoftwareSerial.h"
#include "DFRobotDFPlayerMini.h"
#include <Wire.h>
#include <LiquidCrystal_I2C.h> //importiert eine Bibliothek um das LCD simpel anzusteuern
#define SS_PIN 53
#define RST_PIN 5
MFRC522 mfrc522(SS_PIN, RST_PIN);

const int IR=24; //weist "IR" (für Infarot) den Wert "7" zu.
const int LED=12; //weist "LED" Den Wert "5" zu.
int Bewegung=0; //speichert vorrübergehend ob Bewegung erkannt wurde oder nicht.
int y=0;
LiquidCrystal_I2C lcd(0x3F, 16, 2);//legt den Typ des LCD's fest
SoftwareSerial mySoftwareSerial(10, 11); // Legt Pin 10 und 11 als RX/TX Ports am DFPlayer fest
DFRobotDFPlayerMini myDFPlayer;

void setup() 
{
lcd.init(); 
lcd.backlight(); //legt fest dass die LED Hintergrundbeleuchtung des LCD's nicht deaktiviert sein soll.
pinMode(IR, INPUT);//legt fest dass IR/ Pin 7 ein Input ist.
pinMode(LED, OUTPUT);//legt fest dass LED/ Pin 12 ein Output ist.
Serial.begin(9600);
SPI.begin();
mfrc522.PCD_Init();
lcd.setCursor(0, 0);
lcd.print("AKTIV"); 
lcd.setCursor(0, 1);
lcd.print("ARMED"); 
//myDFPlayer.volume(5);
}


void loop()
{


if ( ! mfrc522.PICC_IsNewCardPresent())
{
return;
}

if ( ! mfrc522.PICC_ReadCardSerial())
{
return;
}

long code=0;

for (byte i = 0; i < mfrc522.uid.size; i++)
{
code=((code+mfrc522.uid.uidByte[i])*10);
}

Serial.print("Die Kartennummer lautet:");

Serial.println(code);

Bewegung=digitalRead(IR); 

if (code==1264240) // Wenn der Zahlencode 1031720 lautet...
{  
lcd.setCursor(0, 0);
lcd.print("INAKTIV"); 
lcd.setCursor(0, 1);
lcd.print("DISARMED"); 
digitalWrite(12, HIGH);
}

if (Bewegung == HIGH)
{
//y++;
digitalWrite(12, HIGH);
delay (500);
digitalWrite (12, LOW);
delay(500);
//myDFPlayer.play(1);
}
}

edit: without the RFID Part it works. Any Ideas???(i need to exclude the first line of my code.)

any ideas?

push

Your code exits loop if an RFID card isn't present so your PIR stuff never gets executed. Check for a card and do whatever you need with it, but don't return, let the rest of your code run too.

I didn't check this Post anymore, but i solved the Problem with RFID already. I just put the RFID Code last, the if (code=xxxxxxx) part in the middle, and the PIR Part first. The DFPlayer Problem is still existing, but, the Deadline is already over, so i changed the Code that an Piezo Speaker "replaces" The DFPlayer.

It works like this, without the DFPlayer, but it seems the DFPlayer is broken somehow, because it won't work with any code excepting the Library Examples. Even with code which worked before it won't work.

#include "Arduino.h"
#include "SoftwareSerial.h"
#include "DFRobotDFPlayerMini.h"
#include <SPI.h>
#include <MFRC522.h>
#include <Wire.h>
#include <LCD_I2C.h> //importiert eine Bibliothek um das LCD simpel anzusteuern
#define SS_PIN 53
#define RST_PIN 5
MFRC522 mfrc522(SS_PIN, RST_PIN);

const int IR=40; //weist "IR" (für Infarot) den Wert "40" zu.
const int LED=12; //weist "LED" den Wert "12" zu.
const int Pieper=7;// weist "Pieper" den Wert "7" zu.
int Bewegung=0; //speichert vorrübergehend ob eine Bewegung erkannt wurde oder nicht.
int y=0;//weist "y" den wert "0" zu.
LCD_I2C lcd(0x3F);//legt den Typ des LCD's fest
//SoftwareSerial mySoftwareSerial(10, 11); // Legt Pin 10 und 11 als RX/TX Ports am DFPlayer fest
//DFRobotDFPlayerMini myDFPlayer;

void setup() 
{
lcd.begin(); 
lcd.backlight(); //legt fest dass die LED Hintergrundbeleuchtung des LCD's nicht deaktiviert sein soll.
pinMode(IR, INPUT);//legt fest dass IR/ Pin 40 ein Input ist.
pinMode(LED, OUTPUT);//legt fest dass LED/ Pin 12 ein Output ist.
pinMode(Pieper, OUTPUT);//legt fest, dass Pieper/ Pin 7 ein Output ist.
//mySoftwareSerial.begin(9600);
SPI.begin();
mfrc522.PCD_Init();//aktiviert den RFID Reader/das RC-522 Modul
lcd.setCursor(0, 0);//setzt den Cursor des LCDs.
lcd.print("AKTIV"); // legt den Text fest welcher im LCD gezeigt werden soll.
lcd.setCursor(0, 1);//setzt den Cursor des LCDs
lcd.print("ARMED"); // legt den Text fest welcher im LCD gezeigt werden soll.
//myDFPlayer.volume(3);
}


void loop()
{




if (y==0)//wenn y==0, dann:
{

Bewegung=digitalRead(IR);//"Bewegung" wird mit dem Output des Bewegungsmelders gleichgesetzt.

  if (Bewegung == HIGH)//Wenn Bewegung erkannt wird, dann:
  {
  
  digitalWrite(12, HIGH);// lässt Strom durch Pin 12 fließen.
  digitalWrite(7, HIGH);// lässt Strom durch Pin 7 fließen.
  delay (500);
  digitalWrite (12, LOW);//beendet den Stromfluss durch Pin 12.
  digitalWrite (7, LOW);//beendet den Stromfluss durch Pin 7.
  delay(500);
  //myDFPlayer.play(1);
  }

}

if ( ! mfrc522.PICC_IsNewCardPresent())//Überprüftob ein RFID Tag nach PICC-Standart vorhanden ist.
{
return;
}

if ( ! mfrc522.PICC_ReadCardSerial())
{
return;
}

long code=0;//ermöglicht die Speicherung langer Zahlen.

for (byte i = 0; i < mfrc522.uid.size; i++)//Berechnet den Code des RFID Tags
{
code=((code+mfrc522.uid.uidByte[i])*10);
}

Serial.print("Die Kartennummer lautet:");

Serial.println(code);





if (code==1264240) // Wenn der Code 1254240 lautet, dann:
{  
lcd.setCursor(0, 0);//setzt den Cursor des LCDs
lcd.print("INAKTIV"); // legt den Text fest welcher im LCD gezeigt werden soll.
lcd.setCursor(0, 1);//setzt den Cursor des LCDs
lcd.print("DISARMED"); // legt den Text fest welcher im LCD gezeigt werden soll.
digitalWrite(12, HIGH);// lässt Strom durch Pin 12 fließen.
y++;// erhöht den wert "y" um 1.
}













}