Pages: [1]   Go Down
Author Topic: Problema com uma toggle switch  (Read 1247 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 28
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

preciso programar um input com isso

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

Code:
#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
« Last Edit: December 26, 2012, 05:48:35 pm by gcats » Logged

Offline Offline
God Member
*****
Karma: 12
Posts: 510
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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é
« Last Edit: December 26, 2012, 07:34:00 pm by Mortis » Logged

Portugal
Offline Offline
Edison Member
*
Karma: 37
Posts: 1593
Pretending you know everything then you will learn nothing.
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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:
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
Logged

Debian,Mint,Ubuntu
Arduino Mega 2560
Arduino Nano
Arduino Duemilanove
MAC OS Montain Lion
Raspberry PI Model B


'round the world...
Offline Offline
Faraday Member
**
Karma: 42
Posts: 3287
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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. smiley
Logged

Eu não sou o teu criado. Se respondo no fórum é para ajudar todos mediante a minha disponibilidade e disposição. Responder por mensagem pessoal iria contra o propósito do fórum e por isso evito-o.
Se realmente pretendes que eu te ajude por mensagem pessoal, então podemos chegar a um acordo e contrato onde me pagas pela ajuda que eu fornecer e poderás então definir os termos de confidencialidade do meu serviço. De forma contrária toda e qualquer ajuda que eu der tem de ser visível a todos os participantes do fórum (será boa ideia, veres o significado da palavra fórum).
Nota também que eu não me responsabilizo por parvoíces escritas neste espaço pelo que se vais seguir algo dito por mim, entende que o farás por tua conta e risco.

Dito isto, mensagens pessoais só se forem pessoais, ou seja, se já interagimos de alguma forma no passado ou se me pretendes convidar para uma churrascada com cerveja (paga por ti, obviamente).

Pages: [1]   Go Up
Jump to: