// ---------------------------------------- // LÓGICA DO SIMULADOR DE RCP (RITMO E PRESSÃO) // ---------------------------------------- var rcpAtivo = false; var rcpCompressaoCount = 0; var rcpTemposCliques = []; // Guarda os últimos cliques para calcular média móvel var rcpTimerReset; function iniciarSimuladorRCP() { document.getElementById('emergencias').classList.add('hidden'); document.getElementById('telaSimuladorRCP').classList.remove('hidden'); resetarRCP(); } function fecharSimuladorRCP() { document.getElementById('telaSimuladorRCP').classList.add('hidden'); document.getElementById('emergencias').classList.remove('hidden'); resetarRCP(); } function resetarRCP() { rcpAtivo = true; rcpCompressaoCount = 0; rcpTemposCliques = []; clearTimeout(rcpTimerReset); atualizarPainelRCP(0, 'Aguardando Início...', 'feedback-neutro'); document.getElementById('rcpContador').innerText = '0'; document.getElementById('rcpBarraProgresso').style.width = '0%'; } function rcpAcaoPressionar() { if (!rcpAtivo) return; // Efeito visual forçado para mobile/touch document.getElementById('btnCompressao').classList.add('pressionado'); // Lógica de Contagem de Ciclo (Até 30) rcpCompressaoCount++; if(rcpCompressaoCount > 30) { rcpCompressaoCount = 1; // Reseta para o próximo ciclo } document.getElementById('rcpContador').innerText = rcpCompressaoCount; document.getElementById('rcpBarraProgresso').style.width = (rcpCompressaoCount / 30) * 100 + '%'; // Lógica de Cálculo de BPM var agora = Date.now(); rcpTemposCliques.push(agora); // Mantém apenas os últimos 5 cliques para calcular uma média responsiva if(rcpTemposCliques.length > 5) { rcpTemposCliques.shift(); } if(rcpTemposCliques.length > 1) { // Calcula o tempo médio entre os últimos cliques var tempoTotal = rcpTemposCliques[rcpTemposCliques.length - 1] - rcpTemposCliques[0]; var mediaIntervalo = tempoTotal / (rcpTemposCliques.length - 1); // Converte milissegundos para BPM (Batimentos Por Minuto) var bpmAtual = Math.round(60000 / mediaIntervalo); avaliarDesempenhoRCP(bpmAtual); } else { // Primeiro clique atualizarPainelRCP('---', 'Continue...', 'feedback-neutro'); } // Se parar de clicar por 2 segundos, zera o BPM clearTimeout(rcpTimerReset); rcpTimerReset = setTimeout(function() { rcpTemposCliques = []; atualizarPainelRCP(0, 'Parada Identificada!', 'feedback-lento'); }, 2000); } function rcpAcaoSoltar() { document.getElementById('btnCompressao').classList.remove('pressionado'); } function avaliarDesempenhoRCP(bpm) { var caixaFeedback = ''; var msgFeedback = ''; if (bpm < 100) { caixaFeedback = 'feedback-lento'; msgFeedback = 'MUITO LENTO! ACELERE '; } else if (bpm > 120) { caixaFeedback = 'feedback-rapido'; msgFeedback = 'MUITO RÁPIDO! CALMA '; } else { caixaFeedback = 'feedback-perfeito'; msgFeedback = ' RITMO PERFEITO!'; } atualizarPainelRCP(bpm, msgFeedback, caixaFeedback); } function atualizarPainelRCP(bpm, mensagem, classeCor) { document.getElementById('rcpBpmValor').innerText = bpm; var box = document.getElementById('rcpFeedbackBox'); box.innerHTML = mensagem; box.className = ''; // Limpa classes box.classList.add(classeCor); }