collapse

* Links de Robótica

* Posts Recentes

Compras Aliexpress por dio123
[Ontem às 21:01]


É possivel construir automaticamente a pcb? - isis proteus por edeweld
[Ontem às 10:23]


Ligar 2 sensores na mesma porta de 5v por SerraCabo
[22 de Maio de 2017, 21:56]


BOMER (2017) por msr
[22 de Maio de 2017, 17:11]


Apagar E2PROM X28C64P-25 por LVirtual
[22 de Maio de 2017, 16:43]


Vídeo sobre construção de um suporte para uma câmara por TigPT
[22 de Maio de 2017, 10:11]


Fazer seceretária por Kristey
[22 de Maio de 2017, 08:54]


Número de bits por jm_araujo
[21 de Maio de 2017, 22:44]


Kit de condensadores que dá jeito ter por edeweld
[21 de Maio de 2017, 18:34]


Medir corrente 0.1A - 5A por beirao
[21 de Maio de 2017, 15:37]

Autor Tópico: Semáforo - Mais Um  (Lida 927 vezes)

0 Membros e 1 Visitante estão a ver este tópico.

Offline OxyGen

  • Mini Robot
  • *
  • Mensagens: 92
  • ET - UA
    • Curto.D ET Blog
Semáforo - Mais Um
« em: 12 de Maio de 2010, 10:09 »
Boas a todos....

Como alguns de vocês já sabem sou um pouco novo nestas andanças na programação usando o arduino. De facto só ontem é que dei inicio ao meu primeiro projecto. Para não variar fiz um semáforo porque pensei que fosse coisa simples.

Por acaso até não foi nada complicado e consegui configurar um semáforo simples logo nas primeiras tentativas.

Depois de ter tudo a funcionar, resolvi então colocar o famoso botão Pressione para obter verde. Mas não queria fazer isto de uma forma qualquer, não o queria fazer da forma como está neste fórum em que a luz para os carros está sempre verde e só muda quando carregas no botão.

O meu objectivo é colocar o semáforo sempre no seu ciclo normal, isto é, alterna entre vermelho e verde para os carros e para os peões, e depois se for accionado o botão apenas e só quando está verde para os carros e vermelho para os peões é que o botão deverá fazer alguma coisa... Só assim é que faz sentido...

Eis o que tentei:

Colocar uma verificação do botão no espaço de tempo em que o semáforo estava vermelho (para os peões). Mas para o fazer teoricamente haveria 2 hipóteses: Colocar uma espécie while(delay(1000)) mas o compilador não aceita, ou colocar uma simples função val=digitalRead(botao). Neste último caso seria tecnicamente impossível ele detectar alguma coisa, (a não ser que mantivéssemos o botão carregado durante algum tempo) uma vez que num processador de 16MIPS (milhões de instruções por segundo ) se carregássemos no botão quase de certeza que a fase de verificação já tinha passado.

Pensei então noutra coisa: Ligar o botão à linha de interrupção 0 (Pino 2 Digital) e configurar uma rotina de serviço à interrupção. Qual não é o meu espanto quando vou ler a documentação relativa à função attachInterrupt(): Não aceita delays(). Tentei então fazer uma chamada a uma função normal com delays(), mas também não funcionou.

Já agora uma pergunta sobre interrupts: quando a rotina de serviço à interrupção termina o programa salta para onde estava antes de se dar a interrupção certo?

Se alguém me pudesse ajudar eu agradecia....
PS: O meu projecto mais simples está na parte dos projectos concluídos.
OxyGen #