Amigos, qual é o problema desse código?

#define PORTA 8
#define LUZES 11

void setup(){
  pinMode(PORTA, 0);
   pinMode(LUZES, 1);
}

void loop(){
   if(!digitalRead(PORTA))
      digitalWrite(LUZES, 1);
   else
      digitalWrite(LUZES, 0);
   delay(2);
}

OBJETIVO DO PROJETO

Eu tenho um microswitch (foto abaixo) na porta de um armário, que, quando eu abro a porta do armário, ele teria de acender as luzes. Quando fecho a porta, apagar as luzes. Quando fecho a porta, as luzes se apagam, isso está funcionando.

PROBLEMA:

Porém, quando eu abro a porta, as luzes piscam, ou seja, ele está detectando a porta aberta e falsamente fechada (está aberta) ao mesmo tempo... eu liguei a saída de 5V do arduino no pino comum do microswitch, passando por um resistor de 10k, e o pino NC (normalmente fechado) no pino 8 do Arduino Uno.

Agradeço qualquer ajuda.

Um abraço,

Fabio.

Exibições: 697

As respostas para este tópico estão encerradas.

Respostas a este tópico

Olá.

Diria que está fora de padrão seu codigo.

O correto seria:

#define PORTA 8
#define LUZES 11

void setup(){
  pinMode(PORTA, INPUT_PULLUP);
   pinMode(LUZES, OUTPUT);
}

void loop(){
   if(!digitalRead(PORTA))
      digitalWrite(LUZES, HIGH);
   else
      digitalWrite(LUZES, LOW);
   delay(2);
}

Embora sequer saiba se LOW tem o mesmo valor numerico que 0, veja em:

https://www.arduino.cc/reference/en/language/variables/constants/co...

Que essas constantes tem essas funções, não importa os valores delas. Aprendemos a respeitar as regras do Arduino, que usa bibliotecas para acesso aos pinos, diferente de qualquer outra IDE que eu conheça.

Tente assim.

Outra coisa, uma leitura de chave não é feita assim, no geral.

Se entendi vc coloca ou não uma tensão de 5V que vem de um resistor... O pino aberto le nivel lógico alto. Aih vc coloca alto...

O correto seria colocar uma chave ao GND, tendo a leitura de LOW com a chave fechada.

Se não quiser essa inversão vc tem 2 possibilidades:

- Usar a outra chave interna do seu interruptor

- Colocar um sesitor até o LOW (pull down) e depois a chave até o 5V. Nesse caso troque o input_PULLUP por INPUT.

Deu certo. Muitíssimo obrigado, mestre!

Boa tarde,

Somente para ilustrar o exposto pelo colega Eduardo anexo imagem de simulação no proteus.

Abs.

CK

Muitíssimo obrigado pelo detalhamento, Carlos! Ajudou a compreender melhor.

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço