update sounds, killall aplay
This commit is contained in:
parent
2e5225bfac
commit
2e26e628df
128
game.js
128
game.js
|
@ -37,8 +37,8 @@ const statusLED = 40;
|
||||||
const failSwitch = 35;
|
const failSwitch = 35;
|
||||||
|
|
||||||
// warte auf spielstart wenn auf HIGH
|
// warte auf spielstart wenn auf HIGH
|
||||||
const startButton = 32;
|
//const startButton = 32;
|
||||||
const startButton_GPIO = 12;
|
//const startButton_GPIO = 12;
|
||||||
// beende spiel wenn auf HIGH
|
// beende spiel wenn auf HIGH
|
||||||
// const finishButton = 31;
|
// const finishButton = 31;
|
||||||
const finishButton = 22;
|
const finishButton = 22;
|
||||||
|
@ -48,15 +48,20 @@ const finishButton_GPIO = 25;
|
||||||
const failButton = 21;
|
const failButton = 21;
|
||||||
const failButton_GPIO = 9;
|
const failButton_GPIO = 9;
|
||||||
// wechsle kind/erwachen Modus + LED
|
// wechsle kind/erwachen Modus + LED
|
||||||
const toggleButton = 33;
|
//const toggleButton = 33;
|
||||||
const toggleButton_GPIO = 13;
|
//const toggleButton_GPIO = 13;
|
||||||
|
const startButton = 33;
|
||||||
|
const startButton_GPIO = 13;
|
||||||
|
|
||||||
// wird je nach modus gesetzt und abgespielt wenn start
|
// wird je nach modus gesetzt und abgespielt wenn start
|
||||||
const backgroundGrown = "jaws.wav";
|
const backgroundGrown = "jaws.wav";
|
||||||
const jeopardy = "jeopardy.wav";
|
const jeopardy = "jeopardy.wav";
|
||||||
|
const northsouth = "northsouth.wav";
|
||||||
const backgroundChild = "northsouth.wav";
|
const backgroundChild = "northsouth.wav";
|
||||||
|
const backgroundSounds = [ "jaws.wav", "jeopardy.wav", "northsouth.wav" ];
|
||||||
|
|
||||||
// wird zufallig zu zufaelligen momenten abgespielt (erw mode)
|
// wird zufallig zu zufaelligen momenten abgespielt (erw mode)
|
||||||
const erschreckSounds = [ "ziege.wav", "scream.wav", "laugh.wav", "cavallerie.wav", "gulp.wav" ];
|
const erschreckSounds = [ "ziege.wav", "scream.wav", "laugh.wav", "cavallerie.wav", "gulp.wav", "ziege.wav" ];
|
||||||
// wird nach fester zeit + random oder spaeter nach der besten zeit abgespielt (erw mode)
|
// wird nach fester zeit + random oder spaeter nach der besten zeit abgespielt (erw mode)
|
||||||
// const stresserSound = "sharks.wav";
|
// const stresserSound = "sharks.wav";
|
||||||
// wird bei fail abgespielt (zonk)
|
// wird bei fail abgespielt (zonk)
|
||||||
|
@ -67,6 +72,8 @@ const finishSound = "kidscheering.wav";
|
||||||
const GROWN=1;
|
const GROWN=1;
|
||||||
const CHILD=2;
|
const CHILD=2;
|
||||||
|
|
||||||
|
let failTimer;
|
||||||
|
let successTimer;
|
||||||
// LOW EDGE
|
// LOW EDGE
|
||||||
let preStart = true;
|
let preStart = true;
|
||||||
|
|
||||||
|
@ -159,9 +166,9 @@ function setup() {
|
||||||
gpio.setup(finishButton, gpio.DIR_IN, gpio.EDGE_FALLING, () => {
|
gpio.setup(finishButton, gpio.DIR_IN, gpio.EDGE_FALLING, () => {
|
||||||
exec(`raspi-gpio set ${finishButton_GPIO} pu`);
|
exec(`raspi-gpio set ${finishButton_GPIO} pu`);
|
||||||
});
|
});
|
||||||
gpio.setup(toggleButton, gpio.DIR_IN, gpio.EDGE_FALLING, () => {
|
//gpio.setup(toggleButton, gpio.DIR_IN, gpio.EDGE_FALLING, () => {
|
||||||
exec(`raspi-gpio set ${toggleButton_GPIO} pu`);
|
// exec(`raspi-gpio set ${toggleButton_GPIO} pu`);
|
||||||
});
|
//});
|
||||||
gpio.setup(startButton, gpio.DIR_IN, gpio.EDGE_BOTH, () => {
|
gpio.setup(startButton, gpio.DIR_IN, gpio.EDGE_BOTH, () => {
|
||||||
exec(`raspi-gpio set ${startButton_GPIO} pu`);
|
exec(`raspi-gpio set ${startButton_GPIO} pu`);
|
||||||
});
|
});
|
||||||
|
@ -184,9 +191,9 @@ function setup() {
|
||||||
case failButton:
|
case failButton:
|
||||||
fail(value);
|
fail(value);
|
||||||
break;
|
break;
|
||||||
case toggleButton:
|
//case toggleButton:
|
||||||
toggle(value);
|
// toggle(value);
|
||||||
break;
|
// break;
|
||||||
default:
|
default:
|
||||||
GlobalLog.warn('Alert! Unknown button change',channel);
|
GlobalLog.warn('Alert! Unknown button change',channel);
|
||||||
}
|
}
|
||||||
|
@ -207,13 +214,13 @@ function gameTimer() {
|
||||||
gpio.output(statusLED, GAME.led);
|
gpio.output(statusLED, GAME.led);
|
||||||
}
|
}
|
||||||
|
|
||||||
function failTimer() {
|
function failTimerFunc() {
|
||||||
GAME.led = !GAME.led;
|
GAME.led = !GAME.led;
|
||||||
gpio.output(statusLED, GAME.led);
|
gpio.output(statusLED, GAME.led);
|
||||||
gpio.output(childLED, GAME.led);
|
gpio.output(childLED, GAME.led);
|
||||||
gpio.output(erwLED, GAME.led);
|
gpio.output(erwLED, GAME.led);
|
||||||
}
|
}
|
||||||
function successTimer() {
|
function successTimerFunc() {
|
||||||
GAME.led = !GAME.led;
|
GAME.led = !GAME.led;
|
||||||
gpio.output(statusLED, GAME.led);
|
gpio.output(statusLED, GAME.led);
|
||||||
gpio.output(childLED, !GAME.led);
|
gpio.output(childLED, !GAME.led);
|
||||||
|
@ -225,61 +232,43 @@ function getRandomInt(max) {
|
||||||
}
|
}
|
||||||
|
|
||||||
function start(value) {
|
function start(value) {
|
||||||
if(preStart === false || isRunning) {
|
if(GAME.startplayer) GAME.startplayer.stop();
|
||||||
GlobalLog.note('Prestart detect.');
|
if(failTimer) failTimer = clearInterval(failTimer);
|
||||||
preStart = true;
|
if(successTimer) successTimer = clearInterval(successTimer);
|
||||||
if(GAME.startplayer) GAME.startplayer.stop();
|
if(GAME.countTimer) countTimer = clearInterval(GAME.countTimer)
|
||||||
if(GAME.failTimer) clearInterval(GAME.failTimer);
|
|
||||||
if(GAME.successTimer) clearInterval(GAME.successTimer);
|
exec(`killall aplay`);
|
||||||
if(GAME.countTimer) clearInterval(GAME.countTimer)
|
|
||||||
if(player) player.stop();
|
|
||||||
if(MODE === GROWN) {
|
|
||||||
gpio.output(childLED, false);
|
|
||||||
gpio.output(erwLED, true);
|
|
||||||
} else {
|
|
||||||
gpio.output(childLED, true);
|
|
||||||
gpio.output(erwLED, false);
|
|
||||||
}
|
|
||||||
if(preStart === false) return;
|
|
||||||
}
|
|
||||||
if(isRunning === true) {
|
if(isRunning === true) {
|
||||||
GlobalLog.note('Game reset.');
|
|
||||||
if(GAME.startplayer) GAME.startplayer.stop();
|
|
||||||
if(player) player.stop();
|
if(player) player.stop();
|
||||||
STATE = STATES.FINISH;
|
gpio.output(childLED, false);
|
||||||
clearInterval(GAME.countTimer)
|
gpio.output(erwLED, true);
|
||||||
preStart = false;
|
if(GAME.startplayer) GAME.startplayer.stop();
|
||||||
isRunning = false;
|
GlobalLog.note('Game reset.');
|
||||||
if(GAME.failTimer) clearInterval(GAME.failTimer);
|
}
|
||||||
if(GAME.successTimer) clearInterval(GAME.successTimer);
|
GAME = {
|
||||||
gpio.output(statusLED, true);
|
|
||||||
GAME = {
|
|
||||||
events: [],
|
events: [],
|
||||||
runTime: 0
|
runTime: 0
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if(GAME.failTimer) clearInterval(GAME.failTimer);
|
STATE = STATES.FINISH;
|
||||||
if(GAME.successTimer) clearInterval(GAME.successTimer);
|
|
||||||
if(MODE === GROWN) {
|
|
||||||
gpio.output(erwLED, true);
|
|
||||||
} else {
|
|
||||||
gpio.output(childLED, true);
|
|
||||||
}
|
|
||||||
|
|
||||||
GAME.runTime = 0;
|
|
||||||
|
|
||||||
if(STATE === STATES.FINISH || STATE === STATES.FAIL) {
|
if(STATE === STATES.FINISH || STATE === STATES.FAIL) {
|
||||||
STATE = STATES.STARTED;
|
STATE = STATES.STARTED;
|
||||||
// set all params for next game, then start counter and event timer
|
// set all params for next game, then start counter and event timer
|
||||||
if(MODE === GROWN) {
|
if(MODE === GROWN) {
|
||||||
if(getRandomInt(7) > 2) {
|
GAME.events.push({ sound: backgroundSounds[getRandomInt(3)], start: 1}); //, start: 15+getRandomInt(10) });
|
||||||
GAME.events.push({ sound: jeopardy, start: 1});
|
// if(getRandomInt(10) > 7) {
|
||||||
} else {
|
// GAME.events.push({ sound: jeopardy, start: 1});
|
||||||
GAME.events.push({ sound: backgroundGrown, start: 1});
|
// } else {
|
||||||
}
|
// if(getRandomInt(10) > 7) {
|
||||||
GAME.events.push({ sound: erschreckSounds[getRandomInt(5)], start: 15+getRandomInt(10) });
|
// GAME.events.push({ sound: backgroundGrown, start: 1});
|
||||||
GAME.events.push({ sound: erschreckSounds[getRandomInt(5)], start: 30+getRandomInt(10) });
|
// } else {
|
||||||
GAME.events.push({ sound: erschreckSounds[getRandomInt(5)], start: 50+getRandomInt(10) });
|
// GAME.events.push({ sound: northsouth, start: 1});
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
GAME.events.push({ sound: erschreckSounds[getRandomInt(6)], start: 15+getRandomInt(10) });
|
||||||
|
GAME.events.push({ sound: erschreckSounds[getRandomInt(6)], start: 30+getRandomInt(10) });
|
||||||
|
GAME.events.push({ sound: erschreckSounds[getRandomInt(6)], start: 50+getRandomInt(10) });
|
||||||
|
GAME.events.push({ sound: erschreckSounds[getRandomInt(6)], start: 70+getRandomInt(10) });
|
||||||
GAME.mode = GROWN;
|
GAME.mode = GROWN;
|
||||||
GAME.fail = failSound;
|
GAME.fail = failSound;
|
||||||
GAME.finish = finishSound;
|
GAME.finish = finishSound;
|
||||||
|
@ -312,7 +301,7 @@ function finish(value) {
|
||||||
playSound(GAME.finish);
|
playSound(GAME.finish);
|
||||||
STATE = STATES.FINISH;
|
STATE = STATES.FINISH;
|
||||||
clearInterval(GAME.countTimer)
|
clearInterval(GAME.countTimer)
|
||||||
GAME.successTimer = setInterval(failTimer, 600);
|
successTimer = setInterval(successTimerFunc, 800);
|
||||||
GlobalLog.note('Getting new image!')
|
GlobalLog.note('Getting new image!')
|
||||||
exec(`fswebcam -r 1024x768 /tmp/last.png`, (err) => {
|
exec(`fswebcam -r 1024x768 /tmp/last.png`, (err) => {
|
||||||
let rt = GAME.runTime;
|
let rt = GAME.runTime;
|
||||||
|
@ -325,7 +314,7 @@ function finish(value) {
|
||||||
if(MODE === GROWN) {
|
if(MODE === GROWN) {
|
||||||
if(GAME.runTime < best.grown) {
|
if(GAME.runTime < best.grown) {
|
||||||
best.grown = rt;
|
best.grown = rt;
|
||||||
msg = `Gewinner in nur ${rt} Sekunden!\nNeue Bestzeit bei den Erwachsenen!`;
|
msg = `Gewinner in nur ${rt} Sekunden!\nNeue Bestzeit!`;
|
||||||
fs.copyFile('/tmp/last.png', '/tmp/bestgrown.png', (err) => {});
|
fs.copyFile('/tmp/last.png', '/tmp/bestgrown.png', (err) => {});
|
||||||
} else {
|
} else {
|
||||||
msg = `Gewinner in nur ${rt} Sekunden!`;
|
msg = `Gewinner in nur ${rt} Sekunden!`;
|
||||||
|
@ -345,10 +334,6 @@ function finish(value) {
|
||||||
});
|
});
|
||||||
preStart = false;
|
preStart = false;
|
||||||
isRunning = false;
|
isRunning = false;
|
||||||
GAME = {
|
|
||||||
events: [],
|
|
||||||
runTime: 0
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
GlobalLog.warn('FINISH not in state', STATE);
|
GlobalLog.warn('FINISH not in state', STATE);
|
||||||
}
|
}
|
||||||
|
@ -358,19 +343,16 @@ function finish(value) {
|
||||||
function fail(value) {
|
function fail(value) {
|
||||||
if(STATE === STATES.STARTED) {
|
if(STATE === STATES.STARTED) {
|
||||||
GlobalLog.note('You failed after', GAME.runTime, 'seconds');
|
GlobalLog.note('You failed after', GAME.runTime, 'seconds');
|
||||||
GAME.startplayer.stop();
|
if(GAME.startplayer) GAME.startplayer.stop();
|
||||||
player.stop();
|
if(player) player.stop();
|
||||||
playSound(GAME.fail);
|
playSound(GAME.fail);
|
||||||
STATE = STATES.FAIL;
|
STATE = STATES.FAIL;
|
||||||
clearInterval(GAME.countTimer)
|
clearInterval(GAME.countTimer)
|
||||||
GAME.failTimer = setInterval(failTimer, 100);
|
failTimer = setInterval(failTimerFunc, 100);
|
||||||
GAME.events = [];
|
GAME.events = [];
|
||||||
preStart = false;
|
preStart = false;
|
||||||
isRunning = false;
|
isRunning = false;
|
||||||
GAME = {
|
exec(`sleep 2; killall aplay`);
|
||||||
events: [],
|
|
||||||
runTime: 0
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
GlobalLog.debug('FAIL not in state', STATE);
|
GlobalLog.debug('FAIL not in state', STATE);
|
||||||
}
|
}
|
||||||
|
@ -378,8 +360,8 @@ function fail(value) {
|
||||||
|
|
||||||
function toggle(value) {
|
function toggle(value) {
|
||||||
if(STATE === STATES.FINISH || STATE === STATES.FAIL) {
|
if(STATE === STATES.FINISH || STATE === STATES.FAIL) {
|
||||||
if(GAME.failTimer) clearInterval(GAME.failTimer);
|
if(failTimer) clearInterval(failTimer);
|
||||||
if(GAME.successTimer) clearInterval(GAME.successTimer);
|
if(successTimer) clearInterval(successTimer);
|
||||||
if(MODE === GROWN) {
|
if(MODE === GROWN) {
|
||||||
gpio.output(erwLED, true);
|
gpio.output(erwLED, true);
|
||||||
} else {
|
} else {
|
||||||
|
|
BIN
mp3/jeopardy.mp3
BIN
mp3/jeopardy.mp3
Binary file not shown.
Loading…
Reference in New Issue