Boa Tarde,  estou com seguinte problema , esse semáforo inteligente tem 2 semáforo  sA (semáforo A) e

SB (semáforo B) com dois BOTÕES, ele funciona normalmente com tempo de 4 segundos,  quando seguro clicado  em qualquer um do botão ele da um tempo de 8 segundo, porém se continuar com botão segurado ele passa os 8 segundo , da amarelo e vermelho e volta de novo para verde no mesmo semáforo em que o botão esta segurado , eu queria que fosse assim, quando pressionado o botão de um determinado semáforo ele daria os 8 segundo de tempo só que quando passa-se o tempo ele muda-se para o outro semáforo  e vice - versa .

SEGUE EM ANEXO

O código de como eu programei e foto dos circuitos 

Exibições: 126

Anexos

Responder esta

Respostas a este tópico

Se entendi vc quer que conte somente o momento de pressionar (transição de 0 pra 1) e não o tempo todo pressionado.

Se for isso vc pode fazer usando 2 variáveis.

Uma que é a leitura direta do botão e outra que é a leitura anterior do botão.

Aih no seu if() vc coloca se (botão não estava pressionado e agora está).

Algo assim.

Ou coloque de um jeito mais facil de entender esse trecho:

"ele daria os 8 segundo de tempo só que quando passa-se o tempo ele muda-se para o outro semáforo  e vice - versa"

bom dia Luiz.

      Mais um Sistema facilmente implementado com uma "Máquina de Estados". Isso mesmo: o Sistema por vc descrito, é um caso típico de uso de uma "Máquina de Estados" (assim como são 99,9% dos casos de implementações sequenciais que aparecem aqui no Garagem). Então vamos lá:

      Fiz a implementação do seu Sistema, usando uma "Máquina de Estados". O "Diagrama de Estados" é mostrado na figura a seguir (para "zoom" clique na imagem ou abra em outra guia do seu navegador):

      Pelo diagrama, observe como é trivial e simples o funcionamento da "Máquina de Estados". E veja Luiz: o código que implementei segue rigorosamente este diagrama. Ou seja, cria-se o "Diagrama de Estados" e analisando este, verifica-se se ele atende completamente a necessidade de funcionamento do Sistema. Uma vez que isto é constatado, então basta seguir-se rigorosamente o "Diagrama de Estados" na implementação do código. Mas se é constatada alguma falha no funcionamento do "Diagrama de Estados", basta analisar e corrigir a falha (é muito mais fácil de fazer isso olhando para o diagrama, já que é uma forma gráfica e portanto muito mais facilmente entendida por nós "seres humanos", do que buscar erros de lógica no código em um editor).

    Outro detalhe muito importante:  uma vez criado o "Diagrama de Estados", na implementação da "Máquina de Estados" (o código) basta tratar individualmente todas as ocorrências (tecnicamente chamadas de "eventos"). Algumas destas ocorrências serão "eventos assíncronos", que significa que podem ocorrer a qualquer instante, como por exemplo acionamentos de botões. Já acionamentos de saídas, como por exemplo LEDs, Displays, etc, são acionamentos "síncronos", pois sempre ocorrem em consequência de uma mudança de estado ou da ocorrência de um evento.

     Geralmente esta parte de tratamento de eventos é a parte realmente "chata" da implementação, pois exige mais análise e atenção. Mas com alguma prática acaba-se "tirando de letra" isso.

       Há uma outra vantagem no processo: com o "Diagrama de Estados", é possível ter-se uma visão geral de como seu Sistema irá funcionar, ou seja, de como sua "Máquina" irá funcionar (e isto nem sempre é possível "olhando-se" apenas o código em um editor).

      Mas então, funcionou ou não a implementação? Para testar, fiz também a implementação do hardware no Proteus, e vc pode ver isso na figura a seguir:

      Respondendo: funcionou exatamente como esperado.

      No final deste post, vc encontrará anexado, o código implementado para o Arduino, o "Diagrama de Estados" (formato Visio e PDF), e o arquivo do Hardware para simulação no Proteus (juntamente com a respectiva biblioteca para o Arduino).

     Caso vc queira ver outras "Máquinas de Estados" que implementei aqui para o pessoal do Garagem, e assim aprender mais sobre a técnica, veja os links a seguir:

link 1:   Maquina 1 - Garagem

link 2:   Maquina 2 - Garagem

      Observação importante:  no seu Hardware simulado, você não colocou resistores para os LEDs. Na simulação, isto não vai esquentar circuitos nem tem risco de "queimar" algo (Arduino e LEDs). Mas se vc for montar na prática, coloque os resistores limitadores de corrente para os LEDs, conforme mostro na figura anterior (do Proteus). Isto é absolutamente necessário para que seu Sistema funcione adequadamente, e sem riscos.

      Quaisquer dúvidas, post aqui que esclarecemos pra você.

     Abrçs,

     Elcids

Anexos

Muito Obrigado ficou muito bom gostei de mais!!

RSS

Destaques

Registre-se no
Lab de Garagem
Clicando aqui

Convide um
amigo para fazer
parte

curso gratis de arduino

© 2018   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço