pessoal fiz esse programinha para testar 2 condiçoes e acender um led se as 2 condiçoes forem verdadeiras somente mas não esta funcionando alguém tem ideia do porque? 

obrigado


int input1 = 11;
int input2 = 12;
int output1 = 13;

void setup() {

pinMode(input1, INPUT);
pinMode(input2, INPUT);
pinMode(output1, OUTPUT);
}

void loop(){

if(input1==HIGH && input2==HIGH)
digitalWrite(output1, HIGH);
else
digitalWrite(output1, LOW);
delay(30000);
}

Exibições: 642

Responder esta

Respostas a este tópico

Que tipo de entrada de sinal você está usando ? Interruptores ? Se for interruptores voce deve usar resistores de pullup ou pulldown, dependendo da sua ligação.

Outra coisa, esse delay de 30 segundos que você está usando no final está bloqueando o fluxo do código. Dessa forma, se a condição do if for falsa, ele só vai testar a condição novamente depois de 30 segundos. Como teste, retire o delay e veja se funciona.

valeu amigo o delay estava bloqueando mesmo,.. mas como eu posso colocar esse delay para quando o pino 13 estiver em high ele permaneça por 30s e depois volte a executar o loop?

Com esse if abaixo, quando as duas entradas estiverem em nível alto, a saída também vai à nível alto, permanecendo assim durante 30 segundos.

setae = digitalRead(setaePin);
setad = digitalRead(setadPin);

if ( (setae == HIGH) && ( setad == HIGH )) {

     digitalWrite ( homecom, HIGH );

     delay ( 30000 );

}else{

     digitalWrite ( homecom, LOW );

}

Olá

Está faltando antes dos IFs, um comando tipo esse:  

buttonState = digitalRead(buttonPin);

dê uma olhada aqui: http://arduino.cc/en/tutorial/button

Abraço

Ricardo

mancada minha era isto mesmo que faltava.... dei uma modificada ficando assim:

int setaePin = 11;
int setadPin = 12;
int homecomPin = 13;
int setae = 0;
int setad = 0;

void setup() {

pinMode(setaePin, INPUT);
pinMode(setadPin, INPUT);
pinMode(homecomPin, OUTPUT);


}

void loop(){

setae = digitalRead(setaePin);
setad = digitalRead(setadPin);

if
(setae==HIGH && setad==HIGH)
digitalWrite(homecomPin, HIGH);
else
digitalWrite(homecomPin, LOW);

}

porém ao invés de acender o led do pino 13 somente se as portas 11 e 12 estiverem em high ele esta acendendo o led do pino 13 com qualquer uma das portas seja a 11 ou a 12 em high era pra acender somente se as 2 estiverem em high juntas... o que esta errado??

valeu

Amigo não pode estar faltando as chaves? 

int setaePin = 11;
int setadPin = 12;
int homecomPin = 13;
int setae = 0;
int setad = 0;
void setup() {
pinMode(setaePin, INPUT);
pinMode(setadPin, INPUT);
pinMode(homecomPin, OUTPUT);

}
void loop(){
setae = digitalRead(setaePin);
setad = digitalRead(setadPin);
if (setae==HIGH && setad==HIGH) {
digitalWrite(homecomPin, HIGH);
}
else {
digitalWrite(homecomPin, LOW);

}
}

ainda não é isso amigo, continua acendendo pino 13 com apenas um dos pinos 11 ou 12 em high quando deveria acender apenas se ambos os pinos 11 e 12 estivessem em high ao mesmo tempo

Tenta:
if ((setae==HIGH) && (setad==HIGH)) {

também não funciona cara

Tente trocar de operador, ao invés de && usar ||

Se funcionar, não me pergunte o por quê. =]

Rafael, 

acho que  o melhor é vc postar a última versão do código que vc está usando e fotos mostrando a ligação que vc está fazendo. Deve ter alguns detalhe pelo meio que está errado.

Abraço

Ricardo

Como o Ricardo disse, o problema pode ser externo. Para descobrir, você pode usar um programa simples de debug com o Serial Monitor. Depois é só ir mudando o sinal de entrada e ver se corresponde com o sinal mostrado no monitor.

int setaePin = 11;
int setadPin = 12;
int setae = 0;
int setad = 0;

void setup(){

     Serial.begin(9600);

     pinMode(setaePin, INPUT);
     pinMode(setadPin, INPUT);

}

void loop(){

     setae = digitalRead(setaePin);
     setad = digitalRead(setadPin);

    Serial.print("seetae: ");

    Serial.print(setae);

    Serial.print("      ");

    Serial.print("setad: ");

    Serial.print(setad);

}

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço