src/Lock-Module-Source.ino hinzugefügt

This commit is contained in:
Rsclub2_2 2024-03-23 17:36:41 +01:00
parent ef7ec4c1d0
commit 360897bda9

159
src/Lock-Module-Source.ino Normal file
View File

@ -0,0 +1,159 @@
#include "Arduino.h"
#include "SoftwareSerial.h"
#include "DFRobotDFPlayerMini.h"
SoftwareSerial mySoftwareSerial(4, 5);
DFRobotDFPlayerMini myDFPlayer;
const int mosfetPin = 12;
const int buttonSoundPin = 10; //button to change open sound
const int buttonClosedCheck = 9; //button to check, if door is closed
const int sendPin = 3; //sends to Pin 71
const int receivePin = 2; //receives from Pin 69
byte tracknumber = 1;
bool alreadyPushed = false; //was the "change sound"-button already pushed?
unsigned long timerWarningSound = 0; //timer for warning sounds
bool setMillisWarningSound = false;
int timeUntilWarningFinal = 20000; //warning- or "remember-to-close-door"-sound after 20sek (20000ms)
int timeUntilWarning = timeUntilWarningFinal; //variable to decrease time between warning sounds
byte warningSoundPlayed = 0; //gets inc when warning sound was played (to limit amount of warnings)
unsigned long timerLockOpen = 0; //how long before lock gets closed again
boolean openFunctionTriggered = false; //was the funtion open already called?
bool open = false; //gets triggered with interrupt from other arduino
void isrPin2Receive() {
static unsigned long lastReceiveTime = 0;
if (millis() - lastReceiveTime >= 50) {
if (digitalRead(receivePin) == 1) {
open = true;
}
lastReceiveTime = millis();
}
}
void OpenLock() {
myDFPlayer.volume(30);
myDFPlayer.play(tracknumber);
if (tracknumber == 3) {
delay(8000);
}
//OPEN LOCK digitalWrite(mosfetPin, HIGH);
asm volatile(
"sbi %0, %1 \n\t" // sets Bit in PORTB to HIGH
:
: "I"(_SFR_IO_ADDR(PORTB)), "I"(PORTB4));
}
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
mySoftwareSerial.begin(9600);
if (!myDFPlayer.begin(mySoftwareSerial)) {
while (true) {
delay(0);
}
}
myDFPlayer.volume(30); // max volume is 30
pinMode(mosfetPin, OUTPUT);
pinMode(buttonSoundPin, INPUT_PULLUP);
pinMode(buttonClosedCheck, INPUT_PULLUP);
pinMode(sendPin, OUTPUT);
pinMode(receivePin, INPUT);
attachInterrupt(digitalPinToInterrupt(receivePin), isrPin2Receive, RISING);
}
void loop() {
// put your main code here, to run repeatedly
//change the sound when opening the door with the push of a button
if (digitalRead(buttonSoundPin) == 0) {
//default sound --> serious sound
if (tracknumber == 1 && alreadyPushed == false) {
tracknumber = 4;
myDFPlayer.volume(20);
myDFPlayer.play(tracknumber);
alreadyPushed = true;
}
//serious sound --> zelda sound
if (tracknumber == 4 && alreadyPushed == false) {
tracknumber = 3;
myDFPlayer.volume(20);
myDFPlayer.play(tracknumber);
alreadyPushed = true;
}
//zelda sound --> default sound
if (tracknumber == 3 && alreadyPushed == false) {
tracknumber = 1;
myDFPlayer.volume(20);
myDFPlayer.play(tracknumber);
alreadyPushed = true;
}
}
//prevents weird behaviour when changing sounds
if (digitalRead(buttonSoundPin) == 1) {
alreadyPushed = false;
}
//DOOR CLOSED: resets warningSoundsPlayed and sends low to other microcontroller
if (digitalRead(buttonClosedCheck) == 0) {
warningSoundPlayed = 0;
digitalWrite(sendPin, LOW);
timeUntilWarning = timeUntilWarningFinal;
setMillisWarningSound = false;
}
//DOOR NOT CLOSED
if (digitalRead(buttonClosedCheck) == 1) {
digitalWrite(sendPin, HIGH);
if (warningSoundPlayed < 3) {
if (setMillisWarningSound == false) {
timerWarningSound = millis();
setMillisWarningSound = true;
}
if (millis() - timerWarningSound >= timeUntilWarning) {
myDFPlayer.volume(20);
myDFPlayer.play(2);
setMillisWarningSound = false;
warningSoundPlayed = warningSoundPlayed + 1;
if (timeUntilWarning > 20000) {
timeUntilWarning = timeUntilWarning - 15000;
}
}
}
}
//OPENS LOCK
if (open == true) {
if (openFunctionTriggered == false) {
OpenLock();
openFunctionTriggered = true;
timerLockOpen = millis();
}
if (millis() - timerLockOpen >= 8000) {
timerLockOpen = millis();
//CLOSE LOCK digitalWrite(mosfetPin, LOW);
asm volatile(
"cbi %0, %1 \n\t" // sets Bit in PORTB to LOW
:
: "I"(_SFR_IO_ADDR(PORTB)), "I"(PORTB4));
open = false;
openFunctionTriggered = false;
}
}
}