Galera, é o seguinte, não conheço muito bem programação, sou eletricista e estou tentando aprender algo neste vasto mundo do arduino.

E o seguinte: Ao apertar o botão 3 do controle remoto, gostaria de ascender uma lampada. mas com o mesmo botão 3 gostaria de apaga-la.

tentei este codigo abaixo com um contador.(pensei que iria funcionar) mas ascende e apaga apenas 1 unica vez, e depois não funciona mais.

Quando o botão 3 for acionado liga a luz, quando ele for acionado pela segunda vez, zera o contador e consequentemente apaga a luz, mas so funciona uma vez.

case 50184255: // botão 3 liga luz da sala
    countsala++;
    delay(500);
    digitalWrite(luzsala,HIGH);
    if (countsala == 2){
      countsala == 0;
    digitalWrite(luzsala,LOW);  
       }
       break;

alguem teria outra solução para este meu problema?

obrigado

Exibições: 15544

Responder esta

Respostas a este tópico

Crie uma variável global chamada ligadoSala:

int ligadoSala=0;

Em seguida, mude o case:

case 50184255: // botão 3 liga luz da sala
    ligadoSala = !ligadoSala;

    digitalWrite(luzsala,ligadoSala);

    break;

É isso.

Mauro Assis, obrigado pela ajuda amigo, testei e funcionou perfeitamente. obrigado pela atenção, vivendo e aprendendo. Abraços

Vou só copiar e colar a resposta que coloquei no outro tópido IGUAL a este que vc mesmo criou:

Acabei de testar esse código aqui, e funcionou normalmente.

countsala++;
delay(500);
if (countsala == 1){
    digitalWrite(luzsala,HIGH);
}
else if (countsala == 2){
    countsala = 0;
    digitalWrite(luzsala,LOW);  
}

Lembrando que existem outras maneiras de se escrever essa mesma lógica.

Amigo, obrigado pela ajudaa!!! Cinsegui fazer funcionar aqui sim com o seu codigo. Obrigado pela ajuda. E criei utro topico igual pois no titulo da discussão eu coloquei apenas ajuda urgente no outro. e nesse descrevi o problema. obrigado pela atenção.

Show! "Tamo aê"

A soluçao do Mauro é mais polida (melhor).

Mas so pra entender pq seu codigo nao funciona, usamos "=" para atribuir um valor a uma variavel e "==" para comparar uma variavel com outra.

Assim na linha:

      countsala == 0;
o correto seria:

      countsala = 0;
   

Acho que é isso... 

Sim sim! Tbm prefiro como o Mauro escreveu. Na lógica que coloquei, apenas usei a mesma lógica que ele já havia postado e alterei. Mas deixei seguindo a mesma linha de raciocínio do autor do post.

Mas, concordo, a lógica do Mauro é mais polida. Variáveis booleanas nesse caso é melhor. (0/1 - True/False)

Seria até ao invés de int ligadoSala=0; usar boolean ligadoSala=False; ou zero.

=)

Mas é isso ai. As duas funcionam!

Abraços!!!!

Pegando uma carona nesse post..

Teria como fazer o seguinte: 

Eu tenho um alarme, fiz com um LDR e um feixe de luz direcionado a ele, quando alguem passa corta o feixe e o led acende..  Gostaria de deixar esse sensor desligado somente qndo o cara aperta a tecla do botao esse sensor e ativado. e o led permanece ligado ate o cara apertar novamente o botao e desligar o led.

Posta o seu código aí que a gente altera de cá.

Usando a ideia do controle remoto fiz o seguinte

if( irrecv.decode(&results))
{
long int decCode = results.value;
switch (results.value)
{
case 183834855:
PIRstate = analogRead(5);
Serial.println(PIRstate);
if (PIRstate <20) { // PIR sensor detected movement
digitalWrite(LED,HIGH);
}
else {
digitalWrite(LED,LOW);
}
break;
case 183871575 :
analogWrite(LED,LOW);
break;

}
irrecv.resume();

Pegando so codigo do LRD o led inicialmente fica aceso qndo a luminosidade aumenta ele apaga.

Coloquei o case e ele inicialmente fica apagado, qndo aperto a tecla ele acende, porem qndo a luminosidade aumenta ele nao apaga. Ele nao fica imprimindo os valores do LRD no serial.

boa tarde a todos,  alguem pode me ajudar ?

estou com o mesmo problema mais com uma relaybord, segue codigo

#include <RelayBoard.h>

#define data    6
#define strobe  4
#define clock   2
#define numberboards 1
RelayBoard relay(data, strobe, clock, numberboards);

#define blp01      A0  
#define blp02      A1  
#define blp03      A2  
#define bcena01    A3
#define bcena02    A4
#define bcena03    A5


boolean blp01status;
boolean blp02status;
boolean blp03status;
boolean bcena01status;
boolean bcena02status;
boolean bcena03status;

int blp01statuslamp = 0;
int blp02statuslamp = 0;
int blp03statuslamp = 0;
int bcena01statuslamp = 0;
int bcena02statuslamp = 0;
int bcena03statuslamp = 0;


void setup()
{
  delay(1000);
 
  pinMode(blp01,    INPUT);   
  pinMode(blp02,    INPUT);
  pinMode(blp03,    INPUT);
  pinMode(bcena01,  INPUT);
  pinMode(bcena02,  INPUT);
  pinMode(bcena03,  INPUT);
 
  digitalWrite(blp01,  HIGH);  // Aciona o pull-up interno
  digitalWrite(blp02,  HIGH);  // dos botões
  digitalWrite(blp03,    HIGH);
  digitalWrite(bcena01,  HIGH);
  digitalWrite(bcena02,  HIGH);
  digitalWrite(bcena03,  HIGH);
     
     
}

void loop(){
 
      
       
 blp01status = digitalRead(blp01);
 blp02status = digitalRead(blp02);
 blp03status = digitalRead(blp03);
 bcena01status = digitalRead(bcena01);
 bcena02status = digitalRead(bcena02);
 bcena03status = digitalRead(bcena03);
   


 if(blp01status == LOW)
   blp01statuslamp++;

  if(blp01statuslamp == 1) {     

    relay.set(0,0,1);  
    delay(50);
    relay.go();
    

     
    if(blp01status == LOW)
    
 
    
    
    if(bcena03status == LOW){
      bcena03statuslamp++;
    }
      if(bcena03statuslamp == 1){
       relay.set(0,0,0);
       relay.set(0,1,0);
       relay.set(0,2,0);
       relay.set(0,3,0);
       relay.set(0,4,0);
       relay.set(0,5,0);
       relay.set(0,6,0);
       relay.set(0,7,0);
       relay.set(0,8,0);
       delay(50);
       relay.go();
       
    }
    
     if(bcena01status == LOW){
       relay.set(0,0,1);
       relay.set(0,1,1);
       relay.set(0,2,1);
       relay.set(0,3,1);
       relay.set(0,4,1);
       relay.set(0,5,1);
       relay.set(0,6,1);
       relay.set(0,7,1);
       relay.set(0,8,1);
       delay(50);
       relay.go();
       
    }
    
    if(bcena02 == LOW){
      delay(50);
       relay.set(0,0,1);
       relay.set(0,5,1);
       relay.set(0,8,1);
       relay.set(0,7,1);
       relay.set(0,6,1);
              delay(50);
       relay.go();
    
    }
  }
}

Boa tarde Galera, eu tb gostaria de fazer algo pareciso, mas gostaria que cada aperto do botão fizesse uma função diferente, colocando até 4 funções no mesmo botão, aguém pode me ajudar? o código q fiz ja faz a mudança dos blocos, porém eu preciso que cada bloco fique fazendo o loop, segue o código logo abaixo, abraços.

int led1 = 10;
int led2 = 9;
int button1 = 3;
int cont=0,flag=1,led=10;
void setup(){
pinMode(led, OUTPUT);
pinMode(led1, OUTPUT);
pinMode(led2, OUTPUT);
pinMode(button1, INPUT);
}
void loop() {
int state1 = digitalRead(button1);
if(state1==1){
verificaBotao();
}
}
void verificaBotao(){
cont = cont +1;
switch (cont){
case 1:pisca(1);
break;
case 2:pisca(2);
break;
case 3:pisca(3);
break;
case 4://quarta apertada
cont=0;
break;

}
}

void pisca(int velocidade){
switch (velocidade){
case 1:
{
digitalWrite(led, HIGH);
delay(1000);
digitalWrite(led, LOW);
return;

}
break;
case 2:
digitalWrite(led, HIGH);
delay(500);
digitalWrite(led, LOW);
delay(500);
digitalWrite(led, HIGH);
delay(500);
digitalWrite(led, LOW);
delay(500);

break;
case 3: digitalWrite(led, HIGH);
delay(400);
digitalWrite(led, LOW);
delay(400);
digitalWrite(led, HIGH);
delay(400);
digitalWrite(led, LOW);
delay(400);
digitalWrite(led, HIGH);
delay(400);
}
}

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço