Pages: [1]   Go Down
Author Topic: Ayuda con millis  (Read 518 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 36
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hola, estoy intentando entender la función millis, lo máximo que he conseguido es un retardo en la lectura de un sensor de temperatura lm35 y nada mas.
No entiendo muy bien el funcionamiento, ahora con un sensor dht11  intento hacer que si la humedad es menor de un valor, se active un rele, hasta aquí funciona, el problema lo tengo cuando intento hacer un temporizador con millis de 10 segundos para que lo desconecte, algo así, si HUMY_RELAY,HIGH realiza intervalo y HUMY_RELAY, LOW.
Me pueden explicar , gracias.


Code:
   // Example testing sketch for various DHT humidity/temperature sensors
  // Written by ladyada, public domain
 
  #include "DHT.h"
 
  #define DHTPIN 22 // what pin we're connected to
  #define TEMP_RELAY 6
  #define HUMY_RELAY 13

 
  // Uncomment whatever type you're using!
  #define DHTTYPE DHT11 // DHT 11
  //#define DHTTYPE DHT22 // DHT 22 (AM2302)
  //#define DHTTYPE DHT21 // DHT 21 (AM2301)
 
  // Connect pin 1 (on the left) of the sensor to +5V
  // Connect pin 2 of the sensor to whatever your DHTPIN is
  // Connect pin 4 (on the right) of the sensor to GROUND
  // Connect a 10K resistor from pin 2 (data) to pin 1 (power) of the sensor
 
  DHT dht(DHTPIN, DHTTYPE);
 
  void setup() {
  Serial.begin(9600);
  Serial.println("DHTxx test!");
  pinMode(TEMP_RELAY, OUTPUT);
  pinMode(HUMY_RELAY, OUTPUT);
  digitalWrite(TEMP_RELAY, LOW);
    digitalWrite(HUMY_RELAY, HIGH);
  dht.begin();
  }
  static int relayTempVal = 0;
  static int relayHumyVal = 0;
 
 
 
 
  void loop() {
  // Reading temperature or humidity takes about 250 milliseconds!
  // Sensor readings may also be up to 2 seconds 'old' (its a very slow sensor)
  float h = dht.readHumidity();
  float t = dht.readTemperature();
 
 
  // check if returns are valid, if they are NaN (not a number) then something went wrong!
  if (isnan(t) || isnan(h)) {
  Serial.println("Failed to read from DHT");
  } else {
  Serial.print("Humidity: ");
  Serial.print(h);
  Serial.print(" %\t");
  Serial.print("Temperature: ");
  Serial.print(t);
  Serial.println(" *C");
 
  if ( t < 27 ) {
  digitalWrite(TEMP_RELAY, HIGH);
  relayTempVal = 1;
  } else {
  digitalWrite(TEMP_RELAY, LOW);
  relayTempVal = 0;
  }
 
  if ( h < 60 ) {
  digitalWrite(HUMY_RELAY,HIGH);
  relayHumyVal = 1;
  } else {
  digitalWrite(HUMY_RELAY, LOW);
  relayHumyVal = 0;
  }
  Serial.print("Calefactor: ");
  Serial.print(relayTempVal);
  Serial.print(" \t");
  Serial.print("Humidificador: ");
  Serial.print(relayHumyVal);
  Serial.print(" \t");
  }
  }
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 40
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hola yo no soy muy bueno en esto y no llevo mucho tiempo programando, la función millis la tienes que llamar, cuando un evento se halla realizado como por ejemplo lo que decías tú que al hacer tal cosa a los 10 sg se desactive.
lo que tienes que hacer es crearte una variable de tiempo:

ejemplo:

unsigned long tiempo=0;
cuando hallas presionado un boton y has encendido una led y lo quieres apagar debería de ser tan facil como:

if (digitalRead(6) == HIGH) // miramos si se a presionado el botón.
{
digitalWrite(13,HIGH);      // encendemos el led que queramos.
tiempo=millis;                  // aqui lo que hacemos es guardar en la variable el tiempo que lleva la placa encendida.
}

luego miramos cuando se cumple lo que queremos hacer, llamando a la función millis para saber el tiempo transcurrido ejemplo:

if (millis-tiempo >10000)  // aqui lo q miramos es si han pasado los 10sg que queriamos
{
digitalWrite(13,LOW);      // apagamos el led encendido anteriormente.
}

espero haberte sido de ayuda, si alguien cree que está mal que lo corrija sin ningún tipo de problema.

Un saludo a todos que haceis esto posible
muchas gracias a todos
Logged

Offline Offline
Full Member
***
Karma: 0
Posts: 160
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Buenas,.....

Si me equivoco que me corrijan, pero creo que la función millis(); guarda el tiempo en milisegundos desde que se inicio la placa arduino...

es un valor de tiempo que puedes utilizar de referencia... y se pone a 0 cada vez que se resetea.
Logged

Pages: [1]   Go Up
Jump to: