src/Lock-Module-Source.ino hinzugefügt
This commit is contained in:
parent
ef7ec4c1d0
commit
360897bda9
159
src/Lock-Module-Source.ino
Normal file
159
src/Lock-Module-Source.ino
Normal 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;
|
||||
}
|
||||
}
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user