Anuncio TOP B1 Mensaje

Colapsar

Anuncio TOP B4 Mensaje (Mobile)

Colapsar

Anuncio

Colapsar
No hay anuncio todavía.

Problema con Libreria HX711 y Millis()

Colapsar
X
 
  • Filtrar
  • Tiempo
  • Mostrar
Limpiar Todo
nuevos mensajes

  • Problema con Libreria HX711 y Millis()

    Buenas gente!!! Tengo un problemilla con el uso de millis() en la librería HX711.
    Tengo una celda de carga conectada a un arduino nano y me es imposible hacer una espera con millis(). Lo que estoy intentando es que la celda de carga al detectar un peso en concreto (que tengo previamente definido) haga una espera de dos segundos y tras ese periodo, si ese peso no ha cambiado ejecute una serie de sentencias... Adjunto el código a continuación a ver si alguien me puede echar una mano.



    Código:
    #include "HX711.h"
    #define DOUT  A1
    #define CLK  A0
    #include "SoftwareSerial.h"
    #include "DFRobotDFPlayerMini.h"
    HX711 balanza(DOUT, CLK);
    SoftwareSerial mySoftwareSerial(10, 11); // RX, TX
    
    DFRobotDFPlayerMini myDFPlayer;              //Modulo de reproduccion de mp3
    void printDetail(uint8_t type, int value);
    
    int const ReleApert = 12;  //Pin del rele que comanda el electroiman
    int const Leds = 3;        //Tira de leds para crear el efecto llama
    int const ReleHumo = 13;   //Pin del rele que comanda la maquina de humo
    
    
    bool PesoCorrecto = 0;    //Variable de comprobacion de peso correcto en celda de carga
    bool CorrectoEspera = 0;
    int EstadoResuelto = 0;
    
    float MargenSup = 124500.00; //Margen superior para comprobacion de peso correcto
    float MargenInf = 122000.00; //Margen inferior para comprobacion de peso correcto
    
    int val=0;                //Variable que almacena los numeros random para crear el efecto llama en los leds
    int delayval = 0;         //Variable que almacena el delay random para crear el efecto llama en los leds
    int efectoFuego = 0;      //Variable de comprobacion para activar el efecto llama de los leds
    int volumen = 20;          //Variable de comprobacion para poder bajar el volumen del modulo dfplayer
    
    int espera = 2000;                //Espera para comprobar si el peso es correcto transcurrido el tiempo indicado
    unsigned long tiempoActual = 0;   //Variable para almacenar cuando sea necesario el tiempo de millis
    
    void setup() {
      
      mySoftwareSerial.begin(9600);
      Serial.begin(9600);
      randomSeed(0);
      pinMode(ReleApert, OUTPUT);
      pinMode(Leds, OUTPUT);
      pinMode(ReleHumo, OUTPUT);
      //pinMode(ComandoApertura, INPUT);
      
      Serial.println();
      Serial.println(F("DFRobot DFPlayer Mini Demo"));
      Serial.println(F("Initializing DFPlayer ... (May take 3~5 seconds)"));
     if (!myDFPlayer.begin(mySoftwareSerial, false)) {  //Use softwareSerial to communicate with mp3.
        Serial.println(F("Unable to begin:"));
        Serial.println(F("1.Please recheck the connection!"));
        Serial.println(F("2.Please insert the SD card!"));
        while(true);
      }
      Serial.println(F("DFPlayer Mini online."));
      myDFPlayer.volume(20);  //Set volume value. From 0 to 30
      delay(1000);
    
      Serial.print("Lectura del valor del ADC:  ");
      Serial.println(balanza.read());
      Serial.println("No ponga ningun  objeto sobre la balanza");
      Serial.println("Destarando...");
      Serial.println("...");
      balanza.set_scale(); //Establecemos la escala
      balanza.tare(20);  //El peso actual es considerado Tara. No es necesario que saque el peso real...
      Serial.println("Listo para pesar"); 
    }
    
    void loop() {
    
    float Peso;                    //Variable para poder ver por puerto serie el valor que devuelve la celda de carga
    Peso = (balanza.read());
    Serial.println(Peso);
    
    
    if(Peso > MargenInf && Peso < MargenSup)  //Si el valor de la celda de carga se encuentra entre el margen superior e inferior...
      {
       PesoCorrecto = 1;                      //establecemos la Variable que indica que el peso es correcto en 1
       tiempoActual = millis();               //establecemos esta variable con el tiempo en este momento(momento en el que el peso es correcto)
       }
      else{
            PesoCorrecto = 0;
           }
    
    if(PesoCorrecto == 1)                     
      {
        if(millis() >= tiempoActual+espera)  //Comprobamos si el peso es correcto durante 2 segundos
          {
            EstadoResuelto = 1;              //Y si tras dos segundos sigue siendo correcto cambiamos esta variable a 1
          }else{
                EstadoResuelto = 0;  
               }
      }
       
       if(EstadoResuelto == 1)              //Comprobamos el estado de la variable para activar reles, efectos de humo, y sonido
      {    
        
       digitalWrite(ReleApert, HIGH);     
       digitalWrite(ReleHumo, HIGH);
       myDFPlayer.play(1);          
       while(efectoFuego < 200)           //Efecto de llamas
          {
           val = random(10,255);
           analogWrite(Leds, val);  
           delayval= random(50,100);
           delay(delayval); 
           efectoFuego ++;        
          }
       digitalWrite(ReleHumo, LOW);    
       while(volumen >= 20)               //Bajar volumen del sonido
          {
           myDFPlayer.volume(volumen);
           delay(100);
           volumen --;
          }          
       myDFPlayer.stop();          
       digitalWrite(ReleApert, LOW);       
      } 
    }

  • #2
    Hola, si en lugar de usar millis() usas timer1?

    Saludos,

    Comentario


    • #3
      Hola

      El código al parecer esta correcto...
      Ahora cual es la falla?
      No supera el retardo de 2 segundos?

      No sera por que el Peso varia el valor y hace que tu validación de peso no sea correcta, y por eso no entra dentro del ciclo de la espera de 2 segundos?

      Yo revisaría que tan estable es el valor del Peso

      Algunas balanzas tienen un aviso que el valor de medición esta estable, revisa si esa balanza tiene esa opcion.

      Espero haberte ayudado

      Comentario

      Anuncio Footer B3 Mensaje

      Colapsar

      Anuncio Footer B5 Mensaje (Mobile) 300x600

      Colapsar
      Trabajando...
      X