collapse

* Posts Recentes

Amplificador - Rockboard HA 1 In-Ear por almamater
[Ontem às 19:13]


O que é isto ? por KammutierSpule
[26 de Março de 2024, 19:35]


Bateria - Portátil por almamater
[25 de Março de 2024, 22:14]


Emulador NES em ESP32 por dropes
[13 de Março de 2024, 21:19]


Escolher Osciloscópio por jm_araujo
[06 de Fevereiro de 2024, 23:07]


TP4056 - Dúvida por dropes
[31 de Janeiro de 2024, 14:13]


Leitura de dados por Porta Serie por jm_araujo
[22 de Janeiro de 2024, 14:00]


Distancia Cabo por jm_araujo
[08 de Janeiro de 2024, 16:30]


Meu novo robô por josecarlos
[06 de Janeiro de 2024, 16:46]


Laser Engraver - Alguém tem? por almamater
[16 de Dezembro de 2023, 14:23]

Autor Tópico: elevador com interruptores  (Lida 2445 vezes)

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

Offline andnobre

  • Mini Robot
  • *
  • Mensagens: 402
elevador com interruptores
« em: 05 de Junho de 2012, 18:58 »
boas a todos
estou com duvidas num esquema de um elevador comandado por um pic.
ja tenho o codigo feito e a funcionar mas e comando é feito pelo monitor do pc.
 o que eu queria era comandar por interruptores...
a duvida era??? eu tenho interruptores de pressao , sera que vai dar para colocar a funcionar com este tipo de interruptores?
ou eu ainda tenho de fazer mais codigo para este tipo de interruptores?
abraços

Offline senso

  • Global Moderator
  • Mini Robot
  • *****
  • Mensagens: 9.733
  • Helpdesk do sitio
Re: elevador com interruptores
« Responder #1 em: 05 de Junho de 2012, 19:11 »
É meter pull-ups nos pinos dos botões, e quando carregas nos botões eles ligam o pino á massa, precisas de meia duzia de linhas de código para ler e fazer debounce aos botões.
Avr fanboy

Offline Njay

  • Mini Robot
  • *
  • Mensagens: 3.598
    • Tróniquices
Re: elevador com interruptores
« Responder #2 em: 05 de Junho de 2012, 19:13 »
Só tens que ligar o interruptor a um pino e fazer debouncing em SW. O debouncing é uma "filtragem" na leitura do botão, porque no "instante" em que carregamos no botão ele "bounces", ou seja, "saltita", e o micro, como é muito rápido a ler, pode ver o botão a ser carregado e libertado umas quantas vezes. Uma forma simples de debouncing é, quando detectas que o botão foi carregado, esperas algum tempo (50 a 500ms) e voltas a ler, sendo o estado final do botão o resultado da última leitura. Portanto, numa espécie de pseudo-código, seria algo do género

bool  button_pressed = false

if (button == on)   // "button" é e leitura do botão através dum pino do micro
{
   delay(50)
   button_pressed = button
}

if (button_pressed)
{
    // código de botão carregado...
}

Offline senso

  • Global Moderator
  • Mini Robot
  • *****
  • Mensagens: 9.733
  • Helpdesk do sitio
Re: elevador com interruptores
« Responder #3 em: 05 de Junho de 2012, 19:16 »
Os botões que tenho, têm bouncing na casa dos 2-10ms, um delay de 10ms parece-me suficiente, se bem que usar delays para debouncing é chato por serem bloquantes..
Eu uso algo assim, que usa o milis como base de tempo:
Código: [Seleccione]
if(milis() - buttonsMilis > 10){ //debounce buttons, it works!
buttonsMilis = milis();

//read the 6 user interface buttons and debounce them (4 buttons + 2 buttons from the encoders)
btnNewState = BTNPIN & ((1<<BTN1)|(1<<BTN2)|(1<<BTN3)|(1<<BTN4));
pressedState = btnNewState & btnLastState;
btnLastState = btnNewState;
buttonState.btn1 = ((pressedState & (1<<BTN1))>>3);
buttonState.btn2 = ((pressedState & (1<<BTN2))>>2);
buttonState.btn3 = ((pressedState & (1<<BTN3))>>1);
buttonState.btn4 = (pressedState & (1<<BTN4));

//read the 4 pins that are used by the 2 rotary encoders
encNewState = ENCBTNPIN & ((1<<ENC1BTN)|(1<<ENC2BTN));
pressedState = encNewState & encLastState;
encLastState = encNewState;
buttonState.encV = ((pressedState & (1<<ENC1BTN))>>3);
buttonState.encI = (pressedState & (1<<ENC2BTN));
}
Avr fanboy

Offline andnobre

  • Mini Robot
  • *
  • Mensagens: 402
Re: elevador com interruptores
« Responder #4 em: 06 de Junho de 2012, 01:15 »
obrigado a todos