AJUDA - projecto residencial

Estou aqui com um projecto que consta do seguinte: Tenho duas zonas distintas, em que de uma delas ao pressionar um dos diversos botões, na outra zona onde está o ARDUINO, vai picar um LED indicativo de qual botão foi pressionado, ficando neste estado até que neste mesmo local ao pressionar um botão de RESET, coloca o sistema na sua posição inicial. Até agora fiz a montagem apenas com dois botões e dois LED, e outro botão de RESET, mas pelo código abaixo, os LED's ficam acesos em premência, e ao fim de alguns instantes o sistema desliga todos os que tiverem acesos, o que eu só desejava que fizesse isso quando pressionasse o botão de RESET.

const int bot1 = 7;  //botão 1
const int bot2 = 8;  //botão 2
const int reset = 9;  //botão de RESET
const int led1 = 11;  //LED 1
const int led2 = 12;  //LED 2


void setup() {
pinMode(bot1, INPUT);
pinMode(bot2, INPUT);
pinMode(reset, INPUT);
pinMode(led1, OUTPUT);
pinMode(led2, OUTPUT);
digitalWrite(bot1, 1);  //resistencia de elevação
digitalWrite(bot2, 1);  //resistencia de elevação
digitalWrite(reset, 1);  //resistencia de elevação

}

void loop() {
int zona1 = digitalRead(bot1);
int zona2 = digitalRead(bot2);
int rst = digitalRead(reset);

if(zona1 == LOW) {
  digitalWrite(led1, HIGH);
}
if(zona2 == LOW) {
  digitalWrite(led2, HIGH);
}


if(rst == LOW) {          //quando pressiona este botão coloca o sistema no estado inicial
  digitalWrite(led1,LOW);
  digitalWrite(led2,LOW);
}
  
}

Se alguem me puder ajudar, agradeço o tempo gasto.

NunoF

Não vi como ligaste o sistema... mas isto pode explicar o que vês. Troca a funcão setup por esta:

void setup() {
pinMode(bot1, INPUT_PULLUP);
pinMode(bot2, INPUT_PULLUP);
pinMode(reset, INPUT_PULLUP);
pinMode(led1, OUTPUT);
pinMode(led2, OUTPUT);
digitalWrite(bot1, 1);  //resistencia de elevação
digitalWrite(bot2, 1);  //resistencia de elevação
digitalWrite(reset, 1);  //resistencia de elevação

}

Peço desculpa por só agora responder, mas após alterar o setup, já deu para ficar aceso por tempo "indeterminado". Agora falta a questão de colocar os LED's a fazerem blink, pois tenho andado aqui com experiencias e não consigo, será que podes dar uma ajuda se conseguires.

Obrigado

bubulindo: Não vi como ligaste o sistema... mas isto pode explicar o que vês. Troca a funcão setup por esta:

void setup() {
pinMode(bot1, INPUT_PULLUP);
pinMode(bot2, INPUT_PULLUP);
pinMode(reset, INPUT_PULLUP);
pinMode(led1, OUTPUT);
pinMode(led2, OUTPUT);
digitalWrite(bot1, 1);  //resistencia de elevação
digitalWrite(bot2, 1);  //resistencia de elevação
digitalWrite(reset, 1);  //resistencia de elevação

}

unsigned char zona1 = 0
unsigned char zona2 = 0;
unsigned char contador = 0; 

unsigned long tempo = 0; 

#define INTERVALO    500

void loop() {

unsigned char reset = digitalRead(rst); 

if(digitalRead(bot1) == LOW) {
  zona1 = 1;
}
if(digitalRead(bot2) == LOW) {
  zona2 = 1;
}

//pisca pisca... 
if (millis() - tempo >= INTERVALO ) {
   contador++;
   if (zona1) {
      digitalWrite(led1, contador%2);
   }
   if (zona2) {
      digitalWrite(led2, contador%2);
   }
   tempo = millis();
}
//reset
if (reset) {
   zona1 = 0;
   zona2 = 0; 
}

}

Caríssimo, mais uma vez obrigado pelo interesse em poder ajudar, mas após esta configuração, os LED's ficam sempre a piscar mesmo antes de pressionar qualquer dos botões, nem mesmo no botão de reset eles apagam. Não sei se houve algum engano meu na edição ou outra coisa qualquer, ainda tentei algumas alterações e nada. Não se se haverá mais alguma forma de resolver esta situação, caso haja agradeço a disponibilidade.

Obrigado NunoF

bubulindo: ``` unsigned char zona1 = 0 unsigned char zona2 = 0; unsigned char contador = 0;

unsigned long tempo = 0;

define INTERVALO    500

void loop() {

unsigned char reset = digitalRead(rst);

if(digitalRead(bot1) == LOW) {   zona1 = 1; } if(digitalRead(bot2) == LOW) {   zona2 = 1; }

//pisca pisca... if (millis() - tempo >= INTERVALO ) {    contador++;    if (zona1) {       digitalWrite(led1, contador%2);    }    if (zona2) {       digitalWrite(led2, contador%2);    }    tempo = millis(); } //reset if (reset) {    zona1 = 0;    zona2 = 0; }

}

Como ligaste os botões?

Olá cada botão está ligado entre uma entrada digital e o GND. Já fiz o blind nos LED's utilizando a função While, mas também não consigo fazer o reset, e caso queira actuar outra zona, não faz nada, ficando sempre a correr o while do primeiro que se actua.

Precisas colocar um resistor entre o pino digital e o ground, veja neste post [url=http://arduino.cc/forum/index.php/topic,163954.msg1224453.html#msg1224453[/url]

edit: corrigido o link

Mortis: Precisas colocar um resistor entre o pino digital e o ground, veja neste post [url=http://arduino.cc/forum/index.php/topic,163954.msg1224453.html#msg1224453[/url] edit: corrigido o link

No teu setup coloca isto:

pinMode(bot1, INPUT_PULLUP);
pinMode(bot2, INPUT_PULLUP);
pinMode(reset, INPUT_PULLUP);

E deixa os botões do pino para o GND.

bubulindo:

Mortis: Precisas colocar um resistor entre o pino digital e o ground, veja neste post [url=http://arduino.cc/forum/index.php/topic,163954.msg1224453.html#msg1224453[/url] edit: corrigido o link

No teu setup coloca isto:

pinMode(bot1, INPUT_PULLUP);
pinMode(bot2, INPUT_PULLUP);
pinMode(reset, INPUT_PULLUP);

E deixa os botões do pino para o GND.

Esta certo! Teu código usa o estado LOW para ativar a zona.

Mortis:

bubulindo:

Mortis:
Precisas colocar um resistor entre o pino digital e o ground, veja neste post [url=http://arduino.cc/forum/index.php/topic,163954.msg1224453.html#msg1224453[/url]
edit: corrigido o link

No teu setup coloca isto:

pinMode(bot1, INPUT_PULLUP);

pinMode(bot2, INPUT_PULLUP);
pinMode(reset, INPUT_PULLUP);



E deixa os botões do pino para o GND.

Esta certo! Teu código usa o estado LOW para ativar a zona.

Olá, estou a fazer como o amigo bubulindo disse, e os LED’s ficam a piscar indefenidamente.
Posto isto, estou a ver que não é assim tão fácil resolver esta situação, pelo menos para o meu nível, e estou a por a hipótese do LED ficar aceso em permanencia quando se pressiona o botão, e depois apagar quando se pressiona o botão de RESET, pois assim é fácil de se colocar a funcionar sem problemas.
Se alguem com mais experiência e conhecimentos do que eu, queira aprofundar este assunto, fico agradecido, e posteriormente posso então programar novamente o ARDUINO, pois tem esta possibilidade, mantendo a instalação com a mesma configuração.
Estou a pensar também, depois do circuito todo bem feito e apresentável, colocar aqui no forum , pois pode dar jeito para alguem que necessite de uma montagem deste género.
Abraço
NunoF

isto não é assim tão dificil.

coloca aqui o codigo que tens para vermos o que se passa.