Boa tarde amigos...

Estou precisando implementar uma melhoria no código e não estou conseguindo, então estou postando este tópico para receber orientações/dicas para tentar solucionar esta necessidade.

Segue abaixo uma breve explicação da minha necessidade:

->Tenho uma aplicação na qual estou usando o teclado keypad... e para PARAR o sistema eu já criei uma rotina usando o asm volatile(" jmp 0" ); através de um botão do teclado.

-> Agora eu gostaria de adicionar uma SENHA para PARAR o sistema.

--> O sistema está "rodando/funcionando" eu precisaria apertar num botão, que vai pedir a senha, então ao ser informada na sequência executaria a rotina de PARAR.

Tenho a impressão que precisaria de ser algo como Processamento paralelo; dois fluxo de execução funcionando independente, mas pesquisando ainda não consegui achar a solução.

Ficarei agradecido por orientações/dicas que me leve a mais este aprendizado/conhecimento, e que poderá servir para tantas outras pessoas...

Exibições: 297

Responder esta

Respostas a este tópico

Boa tarde RCB,

existem diversas maneiras de fazer o que você precisa.

Mas para  ajuda-lo, precisamos saber onde está o problema, e para isto precisamos conhecer seu projeto.

Precisamos saber qual ucontrolador está usando.

Por exemplo, dependendo do caso podemos usar interrupt, mas os pinos de inteerupt estão sendo usado, ou não.

ou pode usar TaskScheduler.

Se for ESP32 pode usar um núcleo para cada tarefa, etc etc.

RV mineirin

podes usar funções baseadas no tempo, usando millis chamando as sub rotinas pelo tempo e tratando todas funções por igual

como o Sr RV disse, teriamos que ver o programa e esquema para te ajudar com isto.

Bom dia amigos

Adicionando informações...

Para facilitar a compreensão, de ambas as partes eu teria que elaborar um sketch de exemplo só com o essencial da questão, pois o meu sketch já tem 129628 bytes.

Mas entes de elaborar o sketch de exemplo veremos se de fato há a possibilidade de fazer o que estou imaginando, pois  já estou estudando a função de interrupção (attachInterrupt) e estou percebendo que não me ofereceria o que preciso.

Minha necessidade e:

1) - Tenho um sistema está "rodando/funcionando" (vamos imaginar um LED piscando com um delay(1000);

2) - Preciso alterar o delay(1000); para delay(2000); sem parar o sistema

3) - Para alterar quero inserir uma senha para liberar o acesso (já tenho a rotina da senha funcionando)

4) - Após inserir a senha informar o novo delay(2000);

5) - O sistema volta a funcionar com o novo tempo de delay(2000); 

A perguntas:

1) - A função interrupção pode oferecer um delay/tempo para estas interações externas (exibir tela LCD, informar valores, etc)?

2) - Se a função interrupção não oferecer esta possibilidade, e como o Atmega2560 não é Dual core, qual seria uma outra alternativa?

nem sempre, questão core não influencia, a questão é tratar as rotinas de forma que não seja necessario usar delay, por favor poste o codigo para auxiliar, eu posso fazer corretamente oque quer se postar o codigo Sr RCB

Olá, RuyterCB!

Talvez seja uma boa idéia olhar https://www.arduino.cc/reference/en/libraries/arduino-fsm/.

Finite State Machines podem ser utilizadas para implementar vários processos rodando concorrentemente, sem a desvantagem da complexidade dos RTOSes ( Real Time Operating Systems ).

Complementando:

Na página https://jonblack.me/blog/2015/arduino-multitasking-using-finite-sta... tem uma explicação que acho pode se enquadrar no teu caso.

Boa noite amigos

Segue em anexo o Sketch exemplo que preparei para facilitar a compreensão  da minha necessidade (TECLADO KEYPAD 4x4 + MENU + SENHA)

No topo do Sketch comentei as informações (acho que ficou mais prático):

- Funcionamento

- Ligações

- Necessidade

Estudei a função interrupção mas ainda não consegui visualizar uma possibilidade.

Seria muito interessante essa rotina de solicitar senha para desativar qualquer coisa que tivesse sendo executada sem paralisação total. Uma pequena pausa enquanto digita a senha talvez seria aceita, caso a senha estivesse errada o sistema voltaria ao seu funcionamento normal.

Vamos ver se conseguimos, estou tentando... 

Já aconteceu em alguns post meus que eu mesmo consegui e postei a solução, mas desta vez acho que não conseguirei...

Sketch em Anexo

TecladoMenuSenha.zip

o Sr pretende fazer a alteração do delay intervalor, sem que o delay() atrapalhe a digitação ?, oque voce chama na função execução ?

// Sua funcao pode ficar assim toda vez que for alterado o valor do intervalo, somente era mudar o tempo que irar permitir a execuxao true dentro do if()

void execucao(){ 
   static unsigned long time = millis(); // Tempo , pode ser cirado no global, irar armazenar o ultimo valo de millis();
      if(millis() - time > intervalo){ // compara o tempo atual, com a ultima execucao
        // a função vai ser chamada a cada x tempo definido por intervalo definido
        // sua função vai aqui
        
        Serial.print("Passou: );
        Serial.print(millis() - time );
        Serial.println(" mS");
        Serial.print("Valor do delay digitado: ");
        Serial.println(intervalo);

        // e termina aqui
        time = millis();
     }
}

Olá mendigo Rasteiro

A ideia é acrescentar a nova funcionalidade... Uma senha para parar a execução da função principal

Como está ao apertar a tecla Cancelar(C) a execução da função principal para normalmente

A sugestão seria ao apertar Cancelar(C) tivesse a possibilidade de inserir uma senha para confirmar o desligamento.

criar uma boolean para verificar se a senha é verdadeira ou falsa pode fazer isso ?

Programador sempre acorda de madrugada pensando no problema, e comigo não é diferente.

Nesta madrugada tive uma daquelas ideias... vou testa-la. Kkkk

Boa tarde amigos

A madrugada de programador não foi diferente... acordei pensando no problema... 

Coloquei a "mão na massa" e saiu uma solução... não tão boa, mas saiu.

Vamos aguardar para ver se aparecem melhores soluções, talvez está sirva para demonstrar melhor qual é a minha necessidade.

A explicação da solução está descrita em uma nova ABA criada com o nome: solucao

Sketch em Anexo

TecladoMenuSenha.zip

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço