Controlo de interruptor por tempo

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.

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).

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).

basta tempos simples 3 segundos 5 segundos ou 8 segundos fazendo ativar sempre o mesmo interruptor mas sou eu (utilizador) que escolho o tempo.

joca133kp:
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?

luisilva:
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

joca133kp:
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.

luisilva:
Ok. Então veja como funciona o exemplo BlinkWithoutDelay. Deverá ter tudo o que necessita para fazer o trabalho.

vou ver muito obrigado

luisilva:
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);
}
}

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?

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?

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

joca133kp:
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?

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:

  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:

  if (botao1 == 1) {

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