Go Down

Topic: Problema com uma toggle switch (Read 1 time) previous topic - next topic

gcats

Dec 26, 2012, 10:50 pm Last Edit: Dec 26, 2012, 11:48 pm by gcats Reason: 1
preciso programar um input com isso

que vai ligar um led ou desligar ele.
esse é o programa que troca o estado do led

Code: [Select]

#define LED_PIN 5
#define TOOGLE_SWITCH_PIN 13

// switch stuff
int readingSwitch;
int previousSwitch = LOW;
boolean on = false;

void setup()
{
    pinMode(TOOGLE_SWITCH_PIN, INPUT);
   
    pinMode(LED_PIN, OUTPUT);
    digitalWrite(LED_PIN, LOW);
}

void loop()
{
   if (wasButtonPressed()) {
     switchRelayState();
   } else if (wasSwitchToggled()) {
     switchRelayState();
   }
}

void switchLedState() {
    if (on) {
      digitalWrite(LED_PIN, LOW);
      on = false;
    } else {
      digitalWrite(LED_PIN, HIGH);
      on = true;
    }
}

boolean wasSwitchToggled() {
  readingSwitch = digitalRead(TOOGLE_SWITCH_PIN);
  boolean toggled = false;
 
  if (readingSwitch != previousSwitch) {
    toggled = true;
  }

previousSwitch = readingSwitch;
return toggled;
}


esse é o jeito que a switch está ligada.



Quando a switch esta em aberto, ela fica trocando o estado do led muito rapido.
Nao sei se estou colocando o resistor pull-up corretamente, mas do outro jeito (conectado entre a switch e o pin4)
também acontece a mesma coisa.

Alguem por favor me ajude

Mortis

#1
Dec 27, 2012, 01:14 am Last Edit: Dec 27, 2012, 01:34 am by Mortis Reason: 1
Olá gcats,

Dê uma olhada nesse exemplo: http://arduino.cc/en/tutorial/button

Diga se entendeu e se resolveu seu problema ^^

Edit:

Sobre a condição if (wasButtonPressed()), não encontrei método com esse nome. ^^

Achei esse link que eu tinha guardado a bastante tempo atrás, valhe a pena dar uma olhada no pull up e pull down =)
http://www.roguescience.org/wordpress/building-a-midi-out-controller/part-3-add-a-switch/exercise-6/

Até

HugoPT

Quote
Quando a switch esta em aberto, ela fica trocando o estado do led muito rapido.

Isso acontece porque o pino está com o estado flutuando ou seja nao esta a 0 nem a 1 confirmado, ele apanha tudo que existe no "ar" e assim ele muda de estado rapido.Para isso deves fazer um pull-up.Podes fazer isso atravez dos pull-ups internos usando:
Code: [Select]
digitalWrite(TOOGLE_SWITCH_PIN, HIGH);
Outro problema que teras quando usas botoes é que ele gera picos rapidos quando comutas o botao.Procura por debouncing para perceberes o que acontece no botao para evitares que ele tambem comute varias vezes quando pressionado
Debian,Mint,Ubuntu
Arduino Mega 2560
Arduino Nano
Arduino Duemilanove
MAC OS Montain Lion
Raspberry PI Model B

bubulindo


Outro problema que teras quando usas botoes é que ele gera picos rapidos quando comutas o botao.Procura por debouncing para perceberes o que acontece no botao para evitares que ele tambem comute varias vezes quando pressionado


Nunca testei este tipo de interruptores quanto ao debounce, mas arriscaria dizer que são bem melhores pelo simples facto de não ter de haver o efeito mola no contacto. Mas nada como experimentar. :)
This... is a hobby.

Go Up