Boa tarde a todos, sou novo no fórum e cheguei até pesquisar aqui sobre o tema que irei perguntar mas ainda não consegui sanar minhas duvidas e espero que possam me ajudar ou que o código possa ajudar alguém .
Em anexo colocarei 2 códigos, um é o ProjetoHouseGaragem.ino nele acontece que :

Consigo enviar o LIGA através de um interruptor desses de campainha onde ligo 2 cabinhos vindos da ESP32 1 pino no 3.3V e outro na GPIO4
Do comando no interruptor, consigo desligar por comando de voz/app também porém o mesmo interruptor que liga a lampada, não a desliga mesmo que tenha sido ele que ligou ou a alexa.

Nota se que no monitor serial, não consigo ver os comandos dados pelo interruptor e também notar que no momento estou mexendo apenas na lampada do quarto1, pq ai se desse certo eu replico pra outros comodos da casa.

Segundo código é umas mexidas estranhas que me deram resultados variados, tipo a luz liga e desliga sozinha .  

Caso falte alguma informação eu respondo, muito obrigado a todos.

Exibições: 774

Anexos

Responder esta

Respostas a este tópico

Boa tarde Sr. M,

tem algo de estranho nesta linha:

while (digitalRead(BotaoQrt_Pin) == HIGH);

Verifique o que quer fazer com ela. pois não entendi o que ela está fazendo ai.

RV

Boa tarde Mineirin, de qual código o senhor se refere??  código 1 ou o segundo?? confesso que uso mais o primeiro.

Mas ja vou dar uma olhada e respondo.

Amigo, como citei no chat o código ProjetoHousGARAGEM.ino que foi upado, era o "errado" o que foi upado agora com o mesmo nome está correto dentro do problema que foi citado no contexto do post.

Olá Manoel.

Olhando rápido, acredito ter existido um erro nos sinais que você utilizou. Vamos relembrar, ok?

&& é a função responsável por "E" ou "AND"

exemplo: if ((X >3) && (Y<5)){} // Se X for maior que 3 E Y for menor que 5.

|| é função responsável por "OU" ou "OR"

Exemplo: if ((X>3) || (Y<5)){}// Se X for maior que 3 OOOUUUU Y for menor que 5

= é responsável por ATRIBUIR um valor.

Exemplo: botao = 5; // a variável "botao" agora possui o valor igual a 5

== é responsável por COMPARAR um valor.

Exemplo: if (X == 5){} // se X for IGUAL a 5.

Sabendo disso, agora vamos retornar ao seu código. Ok? no void loop(){} // linha 75

if ((digitalRead(BotaoQrt_Pin) == HIGH) and (anterior = HIGH)) {
digitalWrite(LuzQuarto1_Pin,LOW);
anterior == LOW;
controle == true;
ini == 0;
}
while (digitalRead(BotaoQrt_Pin) == HIGH);
}

Observe que na condição existem vários erros de escrita. Você compara valores quando quer atribuir, e você atribui quando quer comparar.

Observe este pequeno trecho do seu código, e veja se identifica estas questões. Caso não consiga, terei maior prazer em lhe apontar, mas acho que vale a pena você tentar um pouco, pois irá facilitar seu desenvolvimento em outras questões..

Oi tiago, boa tarde

Hum muito muito legal, eu vou quebrar muito a cabeça e posto aqui o resultado então... muito obrigado pela atenção 

Tiago boa noite, o código ProjetoHousGARAGEM.ino que foi upado, era o "errado" o que foi upado agora com o mesmo nome está correto dentro do problema que foi citado no contexto do post.

Vi o novo, o problema persiste.

Vamos rever o mesmo código citado no outro comentário e numera-lo para facilitar o entendimento, ok? (na mesma parte do loop)

Linha 1: if

Linha 2: ((digitalRead(BotaoQrt_Pin) == HIGH)

linha 3: and

linha 4: (anterior = HIGH))

linha 5: {

Linha 6: digitalWrite(LuzQuarto1_Pin,LOW);
Linha 7: anterior == LOW;
Linha 8: controle == true;
Linha 9: ini == 0;
Linha 10: }

E agora, iremos LER da "mesma forma" que o esp, arduino, computador, irá ler. Ok?

Linha 1: SE a seguinte condição for verdadeira:

Linha 2: COMPARAR status "DigitalRead" (parâmetro "BotaoQrt_Pin") com ALTO. Se o valor de DigitalRead(BotaoQRT_PIN) for igual a ALTO, retornará TRUE, caso contrário, FALSE.

Linha 3: E (indicando que a próxima condição TAMBÉM precisa ser verdadeira)

Linha 4: NOVO VALOR DE VARIÁVEL. controleON agora está definido como ALTO. 

Linha 5: Caso a condição anterior (referente ao "SE", linha 2, 3 e 4) seja verdadeira (no caso, as 2 condições sejam verdadeiras), acontecerá o listado abaixo.

Linha 6: NOVO VALOR DE OBJETO. Parâmetro "pino" será definido pela variável "LuzQuarto1_Pin". E terá valor definido como "LOW".

Linha 7: COMPARAR VARIÁVEL "anterior" com LOW;

Linha 8: COMPARAR VARIÁVEL "controleOFF" com TRUE;

Linha 9: COMPARAR VARIÁVEL "ini" com 0;

Linha 10: Lista de ações finalizadas, para quando as condições do "SE" forem verdadeiras.

Abaixo seguem todas as possibilidades imagináveis que o programa irá retornar

Linha 1: if

Linha 2: ((digitalRead(BotaoQrt_Pin) == HIGH) /////  1/TRUE/VERDADEIRO OU 0/FALSE/FALSO

linha 3: and

linha 4: (anterior = HIGH)) // 1/TRUE/VERDADEIRO (sempre)

linha 5: {

Linha 6: digitalWrite(LuzQuarto1_Pin,LOW); ///// Objeto: Pino "LuzQuarto_1" definido como BAIXO/LOW/0
Linha 7: anterior == LOW; //// 1/TRUE/VERDADEIRO OU 0/FALSE/FALSO
Linha 8: controle == true;  //// 1/TRUE/VERDADEIRO OU 0/FALSE/FALSO
Linha 9: ini == 0;  //// 1/TRUE/VERDADEIRO OU 0/FALSE/FALSO
Linha 10: }

Não parece ter algo estranho nessa leitura?

Observações:

TRUE, VERDADEIRO e "1", são a mesma coisa. (para variáveis e condições)

FALSE, FALSO e "0", são a mesma coisa.  (para variáveis e condições)

HIGH, ALTO e "1", são a mesma coisa (para objetos, ex: estado do pino)

LOW, BAIXO, e "0", são a mesma coisa (para objetos, ex: estado do pino)

Observação 2:

Caso continue com dificuldades, eu explico de uma forma mais simples.

Cara rss to quebrando a cabeça aqui mas usando mais o menos o que tu mando, cheguei nisso aqui ó ( ainda errado mas interessante, adiocei um botão on/off e tirei interruptor de pulso :

void loop() {

// CheckStatus();
// delay(200);

SinricPro.handle();

if ((ini == 1) && (digitalRead(BotaoQrt_Pin) == LOW)){
anterior = LOW; //comeca ligado
ini = 0;
Serial.printf("Rotina Inicial LIGADO: anterior -%s\r\n", anterior?"ligado":"desligado");
Serial.printf("Rotina Inicial LIGADO: ini -%s\r\n", ini?"ligado":"desligado");
}

if ((ini == 1) && (digitalRead(BotaoQrt_Pin_off) == LOW)){
anterior = HIGH; //comeca desligado
ini = 0;
Serial.printf("Rotina Inicial DESLIGADO: anterior -%s\r\n", anterior?"ligado":"desligado");
Serial.printf("Rotina Inicial DESLIGADO: ini -%s\r\n", ini?"ligado":"desligado");
}


if ((digitalRead(BotaoQrt_Pin) == LOW) && (anterior == HIGH)) {
digitalWrite(LuzQuarto1_Pin,LOW);
anterior = LOW;
controle = true;
ini = 0;
}


if ((digitalRead(BotaoQrt_Pin_off) == LOW) && (anterior == LOW)){
digitalWrite(LuzQuarto1_Pin,HIGH);
anterior = HIGH;
controle = false;
ini = 0;
}
}


é perto do que tu tinha em mente TIago??

eu to começando a achar que isso é circuito, vi um rapaz indiano com um projeto mais o menos parecido e putz, mó esquemão eletrico =(

os comandos de voz da alexa/app estão ao contrario agora rsrs tipo, mando alexa desligar a luz, ela liga.... mando ela desligar, ela liga kkkkkkkkkkkkk mas minha cabeça ja ta começando a falhar =(

Olá Manoel.

Aqui eu uso este code. esta perfeito.

Espero ter ajudado. imformar se te atendeu ok.

casa.txt

Oi amigo primeiramente obrigado, porém esse código vc não usa botão fisico ne?? tipo interruptor

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço