mirror of
https://github.com/xfjx/TonUINO.git
synced 2025-09-02 20:42:52 +02:00
adds box lock
This commit is contained in:
@@ -32,21 +32,27 @@
|
|||||||
If a TSOP38238 is connected to pin 5, you can also use an ir remote to remote
|
If a TSOP38238 is connected to pin 5, you can also use an ir remote to remote
|
||||||
control TonUINO. There are code mappings for the silver apple remote below, but you can
|
control TonUINO. There are code mappings for the silver apple remote below, but you can
|
||||||
change them to other codes to match different remotes. This feature can be disabled by
|
change them to other codes to match different remotes. This feature can be disabled by
|
||||||
commenting a define below, to save some memory. The actions are as follows:
|
commenting a define below, to save some memory.
|
||||||
|
|
||||||
|
There is one function currently only available with the ir remote - box lock.
|
||||||
|
When TonUINO is locked, the buttons on TonUINO as well as the nfc reader are disabled
|
||||||
|
until TonUINO is unlocked again. Playback continues while TonUINO is locked.
|
||||||
|
|
||||||
During playback:
|
During playback:
|
||||||
play+pause / center - toggle playback
|
center - toggle box lock
|
||||||
|
play+pause - toggle playback
|
||||||
up / down - volume up / down
|
up / down - volume up / down
|
||||||
left / right - previous / next track during album mode, next track during party mode
|
left / right - previous / next track during album mode, next track during party mode
|
||||||
|
|
||||||
During idle:
|
During idle:
|
||||||
|
center - toggle box lock
|
||||||
menu - enter erase nfc tag mode
|
menu - enter erase nfc tag mode
|
||||||
|
|
||||||
During erase nfc tag mode:
|
During erase nfc tag mode:
|
||||||
menu - cancel
|
menu - cancel
|
||||||
|
|
||||||
During nfc tag setup mode:
|
During nfc tag setup mode:
|
||||||
play+pause / center - confirm
|
play+pause - confirm
|
||||||
up / right - next option
|
up / right - next option
|
||||||
down / left - previous option
|
down / left - previous option
|
||||||
menu - cancel
|
menu - cancel
|
||||||
@@ -116,7 +122,11 @@ const uint8_t msgEraseTag = 111; // 09
|
|||||||
const uint8_t msgEraseTagConfirm = 112; // 10
|
const uint8_t msgEraseTagConfirm = 112; // 10
|
||||||
const uint8_t msgEraseTagError = 115; // 11
|
const uint8_t msgEraseTagError = 115; // 11
|
||||||
const uint8_t msgCancel = 113; // 12
|
const uint8_t msgCancel = 113; // 12
|
||||||
const uint8_t msgCount = 12; // used to calculate the total ammount of tracks on the sd card
|
const uint8_t msgLocked = 116; // 13
|
||||||
|
const uint8_t msgUnLocked = 117; // 14
|
||||||
|
const uint8_t msgAdLocked = 1; // 15
|
||||||
|
const uint8_t msgAdUnLocked = 2; // 16
|
||||||
|
const uint8_t msgCount = 16; // used to calculate the total ammount of tracks on the sd card
|
||||||
|
|
||||||
// define code mappings for silver apple tv 2 ir remote
|
// define code mappings for silver apple tv 2 ir remote
|
||||||
const uint16_t ir1ButtonUp = 0x5057;
|
const uint16_t ir1ButtonUp = 0x5057;
|
||||||
@@ -161,6 +171,7 @@ uint8_t playTrack = 1;
|
|||||||
uint16_t totalTrackCount = 0;
|
uint16_t totalTrackCount = 0;
|
||||||
uint16_t folderTrackCount = 0;
|
uint16_t folderTrackCount = 0;
|
||||||
bool initNfcTagPlayback = false;
|
bool initNfcTagPlayback = false;
|
||||||
|
bool isLocked = false;
|
||||||
|
|
||||||
// ############################################################### no configuration below this line ###############################################################
|
// ############################################################### no configuration below this line ###############################################################
|
||||||
|
|
||||||
@@ -581,9 +592,9 @@ void loop() {
|
|||||||
uint8_t inputEvent = checkInput();
|
uint8_t inputEvent = checkInput();
|
||||||
bool isPlaying = !digitalRead(mp3BusyPin);
|
bool isPlaying = !digitalRead(mp3BusyPin);
|
||||||
|
|
||||||
// ######################################################
|
// ################################################################################
|
||||||
// # main code block, if nfc tag is detected do something
|
// # main code block, if nfc tag is detected and TonUINO is not locked do something
|
||||||
if (mfrc522.PICC_IsNewCardPresent() && mfrc522.PICC_ReadCardSerial()) {
|
if (mfrc522.PICC_IsNewCardPresent() && mfrc522.PICC_ReadCardSerial() && !isLocked) {
|
||||||
Serial.println(F("nfc | tag detected"));
|
Serial.println(F("nfc | tag detected"));
|
||||||
nfcTag = readNfcTagData();
|
nfcTag = readNfcTagData();
|
||||||
// ##############################
|
// ##############################
|
||||||
@@ -680,7 +691,7 @@ void loop() {
|
|||||||
do {
|
do {
|
||||||
uint8_t inputEvent = checkInput();
|
uint8_t inputEvent = checkInput();
|
||||||
// button 1 (middle) single push or ir remote play+pause / center: confirm selected folder
|
// button 1 (middle) single push or ir remote play+pause / center: confirm selected folder
|
||||||
if (inputEvent == B1P || inputEvent == IRP || inputEvent == IRC) {
|
if (inputEvent == B1P || inputEvent == IRP) {
|
||||||
if (nfcTag.assignedFolder == 0) {
|
if (nfcTag.assignedFolder == 0) {
|
||||||
Serial.println(F("sys | no folder selected"));
|
Serial.println(F("sys | no folder selected"));
|
||||||
continue;
|
continue;
|
||||||
@@ -732,7 +743,7 @@ void loop() {
|
|||||||
do {
|
do {
|
||||||
uint8_t inputEvent = checkInput();
|
uint8_t inputEvent = checkInput();
|
||||||
// button 1 (middle) single push or ir remote play+pause / center: confirm selected playback mode
|
// button 1 (middle) single push or ir remote play+pause / center: confirm selected playback mode
|
||||||
if (inputEvent == B1P || inputEvent == IRP || inputEvent == IRC) {
|
if (inputEvent == B1P || inputEvent == IRP) {
|
||||||
if (nfcTag.playbackMode == 0) {
|
if (nfcTag.playbackMode == 0) {
|
||||||
Serial.println(F("sys | no playback mode selected"));
|
Serial.println(F("sys | no playback mode selected"));
|
||||||
continue;
|
continue;
|
||||||
@@ -855,7 +866,6 @@ void loop() {
|
|||||||
|
|
||||||
// nfc tag is unknown but not blank, ignore
|
// nfc tag is unknown but not blank, ignore
|
||||||
else Serial.println(F("nfc | tag is not one of ours"));
|
else Serial.println(F("nfc | tag is not one of ours"));
|
||||||
|
|
||||||
}
|
}
|
||||||
// # end - nfc tag is successfully read
|
// # end - nfc tag is successfully read
|
||||||
// ####################################
|
// ####################################
|
||||||
@@ -871,8 +881,39 @@ void loop() {
|
|||||||
|
|
||||||
// ##################################################################################
|
// ##################################################################################
|
||||||
// # handle button and ir remote events during playback or while waiting for nfc tags
|
// # handle button and ir remote events during playback or while waiting for nfc tags
|
||||||
// button 1 (middle) single push or ir remote play+pause / center: toggle playback
|
// ir remote center: toggle box lock
|
||||||
if (inputEvent == B1P || inputEvent == IRP || inputEvent == IRC) {
|
if (inputEvent == IRC) {
|
||||||
|
// TonUINO is currently playing: toggle box lock, play lock message from advert folder, resume playback
|
||||||
|
if (isPlaying) {
|
||||||
|
if (!isLocked) {
|
||||||
|
Serial.println(F("sys | box locked"));
|
||||||
|
isLocked = true;
|
||||||
|
mp3.playAdvertisement(msgAdLocked);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
Serial.println(F("sys | box unlocked"));
|
||||||
|
isLocked = false;
|
||||||
|
mp3.playAdvertisement(msgAdUnLocked);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// TonUINO is currently idle: toggle box lock and play lock message from mp3 folder
|
||||||
|
else {
|
||||||
|
if (!isLocked) {
|
||||||
|
Serial.println(F("sys | box locked"));
|
||||||
|
isLocked = true;
|
||||||
|
initNfcTagPlayback = false;
|
||||||
|
mp3.playMp3FolderTrack(msgLocked);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
Serial.println(F("sys | box unlocked"));
|
||||||
|
isLocked = false;
|
||||||
|
initNfcTagPlayback = false;
|
||||||
|
mp3.playMp3FolderTrack(msgUnLocked);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// button 1 (middle) single push or ir remote play+pause: toggle playback
|
||||||
|
else if ((inputEvent == B1P && !isLocked) || inputEvent == IRP) {
|
||||||
if (isPlaying) {
|
if (isPlaying) {
|
||||||
Serial.println(F("sys | pause"));
|
Serial.println(F("sys | pause"));
|
||||||
mp3.pause();
|
mp3.pause();
|
||||||
@@ -883,7 +924,7 @@ void loop() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
// button 2 (right) single push or ir remote up: increase volume
|
// button 2 (right) single push or ir remote up: increase volume
|
||||||
else if ((inputEvent == B2P || inputEvent == IRU) && isPlaying) {
|
else if (((inputEvent == B2P && !isLocked) || inputEvent == IRU) && isPlaying) {
|
||||||
uint8_t mp3CurrentVolume = mp3.getVolume();
|
uint8_t mp3CurrentVolume = mp3.getVolume();
|
||||||
|
|
||||||
if (mp3CurrentVolume < mp3MaxVolume) {
|
if (mp3CurrentVolume < mp3MaxVolume) {
|
||||||
@@ -897,7 +938,7 @@ void loop() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
// button 3 (left) single push or ir remote down: decrease volume
|
// button 3 (left) single push or ir remote down: decrease volume
|
||||||
else if ((inputEvent == B3P || inputEvent == IRD) && isPlaying) {
|
else if (((inputEvent == B3P && !isLocked) || inputEvent == IRD) && isPlaying) {
|
||||||
uint8_t mp3CurrentVolume = mp3.getVolume();
|
uint8_t mp3CurrentVolume = mp3.getVolume();
|
||||||
|
|
||||||
if (mp3CurrentVolume > 0) {
|
if (mp3CurrentVolume > 0) {
|
||||||
@@ -911,21 +952,21 @@ void loop() {
|
|||||||
else Serial.println(F("sys | mute"));
|
else Serial.println(F("sys | mute"));
|
||||||
}
|
}
|
||||||
// button 2 (right) single hold or ir remote right, only during album and party mode while playing: next track
|
// button 2 (right) single hold or ir remote right, only during album and party mode while playing: next track
|
||||||
else if ((inputEvent == B2H || inputEvent == IRR) && (nfcTag.playbackMode == 2 || nfcTag.playbackMode == 3) && isPlaying) {
|
else if (((inputEvent == B2H && !isLocked) || inputEvent == IRR) && (nfcTag.playbackMode == 2 || nfcTag.playbackMode == 3) && isPlaying) {
|
||||||
Serial.println(F("sys | next track"));
|
Serial.println(F("sys | next track"));
|
||||||
// bloody hack: decrease volume 1 step because it got increased before due to single button push action
|
// bloody hack: decrease volume 1 step because it got increased before due to single button push action
|
||||||
if (inputEvent == B2H) mp3.decreaseVolume();
|
if (inputEvent == B2H) mp3.decreaseVolume();
|
||||||
playNextTrack(random(65536), true, true);
|
playNextTrack(random(65536), true, true);
|
||||||
}
|
}
|
||||||
// button 3 (left) single hold or ir remote left, only during album mode while playing: previous track
|
// button 3 (left) single hold or ir remote left, only during album mode while playing: previous track
|
||||||
else if ((inputEvent == B3H || inputEvent == IRL) && nfcTag.playbackMode == 2 && isPlaying) {
|
else if (((inputEvent == B3H && !isLocked) || inputEvent == IRL) && nfcTag.playbackMode == 2 && isPlaying) {
|
||||||
Serial.println(F("sys | previous track"));
|
Serial.println(F("sys | previous track"));
|
||||||
// bloody hack: increase volume 1 step because it got decreased before due to single button push action
|
// bloody hack: increase volume 1 step because it got decreased before due to single button push action
|
||||||
if (inputEvent == B3H) mp3.increaseVolume();
|
if (inputEvent == B3H) mp3.increaseVolume();
|
||||||
playNextTrack(random(65536), false, true);
|
playNextTrack(random(65536), false, true);
|
||||||
}
|
}
|
||||||
// button 2 (right) & button 3 (left) multi hold for 2 sec or ir remote menu, only while not playing: erase nfc tag
|
// button 2 (right) & button 3 (left) multi hold for 2 sec or ir remote menu, only while not playing: erase nfc tag
|
||||||
else if ((inputEvent == B23H || inputEvent == IRM) && !isPlaying) {
|
else if (((inputEvent == B23H && !isLocked) || inputEvent == IRM) && !isPlaying) {
|
||||||
initNfcTagPlayback = false;
|
initNfcTagPlayback = false;
|
||||||
uint8_t writeNfcTagStatus = 0;
|
uint8_t writeNfcTagStatus = 0;
|
||||||
Serial.println(F("sys | waiting for tag to erase"));
|
Serial.println(F("sys | waiting for tag to erase"));
|
||||||
|
Reference in New Issue
Block a user