Go Down

Topic: Controlo de interruptor por tempo (Read 251 times) previous topic - next topic

joca133kp

Jun 03, 2018, 12:32 am Last Edit: Jun 03, 2018, 02:33 am by joca133kp
Olá,

Peço desculpa a minha ignorancia mas existe alguma forma de fazer botões controlados por tempo ?
(Sem usar o delay ,o arduino não pode bloquear em pausa devido á constante leitura de um sensor de temperatura)

obrigado.

luisilva

Sim, pode usar a função millis() ou então usar um RTC (depende da precisão do tempo que é necessária para a aplicação).

joca133kp

Sim, pode usar a função millis() ou então usar um RTC (depende da precisão do tempo que é necessária para a aplicação).
basta tempos simples 3 segundos 5 segundos ou 8 segundos fazendo ativar sempre o mesmo interruptor mas sou eu (utilizador) que escolho o tempo.

luisilva

#3
Jun 03, 2018, 03:40 am Last Edit: Jun 03, 2018, 03:40 am by luisilva
basta tempos simples 3 segundos 5 segundos ou 8 segundos fazendo ativar sempre o mesmo interruptor mas sou eu (utilizador) que escolho o tempo.

Então nesse caso, pode utilizar apenas a função millis() que não necessita hardware externo.
Se o utilizador é quem escolhe o tempo, qual será a interface com o utilizador?

joca133kp

Então nesse caso, pode utilizar apenas a função millis() que não necessita hardware externo.
Se o utilizador é quem escolhe o tempo, qual será a interface com o utilizador?
será blutooth a a partir de uma APP que criei

luisilva

será blutooth a a partir de uma APP que criei
Ok. Então veja como funciona o exemplo BlinkWithoutDelay. Deverá ter tudo o que necessita para fazer o trabalho.

joca133kp

Ok. Então veja como funciona o exemplo BlinkWithoutDelay. Deverá ter tudo o que necessita para fazer o trabalho.
vou ver muito obrigado

joca133kp

Ok. Então veja como funciona o exemplo BlinkWithoutDelay. Deverá ter tudo o que necessita para fazer o trabalho.
vou publicar o que consegui mas eu não estou a entender como posso substituir pela função millis

"code"
int sensor=  A1; //Entrada sensor
int celulas= 7; // Celulas de peltier
int rele2= 8; //bomba 1
int rele3= 9; //bomba 2
float temperatura; // armazena a temperatura medida
int botao1; //tempo 1
int botao2; //tempo 2
int botao3;  // tempo 3

void setup() {
  // put your setup code here, to run once:
Serial.begin(9600);



}


void loop() {{
  //Sensor
temperatura = (float(analogRead(sensor))*5/(1023))/0.01;
Serial.print("Temperatura: ");
Serial.println(temperatura);
delay(1000);
//sensor
}
if(botao1=1)
  {
    rele3=HIGH;
    delay (3000);
  }
  if(botao2=1)
  {
    rele3=HIGH;
    delay (5000);
  }
  if(botao3=1)
  {
    rele3=HIGH;
    delay (8000);
  }
}

luisilva

Em primeiro lugar leia as regras e aprenda a postar código. Desta forma não se consegue lar muito bem (e é uma sorte o programa ser pequeno, se não então a desgraça ainda era maior).
Em segundo lugar, o código que postou, não tem nada a ver com o exemplo BlinkWithoutDelay que falei, por isso não entendo o que está a querer fazer. Consegue-me explicar?

joca133kp

Em primeiro lugar leia as regras e aprenda a postar código. Desta forma não se consegue lar muito bem (e é uma sorte o programa ser pequeno, se não então a desgraça ainda era maior).
Em segundo lugar, o código que postou, não tem nada a ver com o exemplo BlinkWithoutDelay que falei, por isso não entendo o que está a querer fazer. Consegue-me explicar?
Peço imensa desculpa pelo formato do código tenho de reler as regras para  aprender a  colocar no formato certo

Queria acionar o mesmo interruptor mas com tempos diferentes (utilizei tres botões para acionar os tempos do interruptor)
não coloquei com o exemplo do BlinkWithoutDelay porque não consegui compreender o algoritemo

mais  umas vez peço desculpa vou reler as regras

luisilva

#10
Jun 04, 2018, 02:51 am Last Edit: Jun 04, 2018, 04:12 am by luisilva
Peço imensa desculpa pelo formato do código tenho de reler as regras para  aprender a  colocar no formato certo

Queria acionar o mesmo interruptor mas com tempos diferentes (utilizei tres botões para acionar os tempos do interruptor)
não coloquei com o exemplo do BlinkWithoutDelay porque não consegui compreender o algoritemo

mais  umas vez peço desculpa vou reler as regras
Eu percebi o que quer fazer, o que não percebo (porque não diz) é o que não entende do exemplo BlinkWithoutDelay. É um exemplo básico e fundamental para fazer qualquer coisa minimamente em condições com este tipo de plataformas, por isso, se isto não é o único trabalho que vai fazer com Arduino é bom que entenda bem este exemplo. Qual é a dificuldade que encontra neste exemplo?

Já agora, porque é que o seu código não está feito da forma seguinte?
Code: [Select]

int sensor =  A1; //Entrada sensor
int celulas = 7; // Celulas de peltier
int rele2 = 8; //bomba 1
int rele3 = 9; //bomba 2
float temperatura; // armazena a temperatura medida
int botao1; //tempo 1
int botao2; //tempo 2
int botao3;  // tempo 3

int tempo;


void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600);
}


void loop() {

    //Sensor
    temperatura = (float(analogRead(sensor)) * 5 / (1023)) / 0.01;
    Serial.print("Temperatura: ");
    Serial.println(temperatura);
    delay(1000);
    //sensor
 

  if (botao1 = 1) {
    rele3 = HIGH;
    tempo = 3000;
  }
  if (botao2 = 1) {
    rele3 = HIGH;
    tempo = 5000;
  }
  if (botao3 = 1) {
    rele3 = HIGH;
    tempo = 8000;
  }

  delay (tempo);
}


PS.: O código tem um erro. Num if não se usa o sinal de igual para fazer atribuição mas sim para fazer comparação. Ou seja, isto:
Code: [Select]
  if (botao1 = 1) {
está errado. Não faz a comparação, mas sim a atribuição de 1 à variável botao1. O que devia estar a ser feito é isto:
Code: [Select]
  if (botao1 == 1) {

Isto sim faz a comparação entre a variável botao1 e o valor 1.

Go Up