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
Tags:
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);
}
}
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
© 2024 Criado por Marcelo Rodrigues. Ativado por