RuiViana

Entra_Peso

Sep 9th, 2016
162
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include <Keypad.h>
  2. #include <LiquidCrystal.h>
  3. //-----------------------------------------teclado
  4. const byte Coluna = 4;
  5. const byte Linha = 4;
  6. char Teclas[Linha][Coluna] = {{'1', '2', '3', 'A'}, {'4', '5', '6', 'B'}, {'7', '8', '9', 'C'}, {'*', '0', '#', 'D'}};
  7. byte Pino_linha[Linha] = {A0, A1, 8, 9};
  8. byte Pino_coluna[Coluna] = {10, 11, 12, 13};
  9. //-------------------------------------------------
  10. LiquidCrystal lcd(6, 7, 2, 3, 4, 5);
  11. Keypad keypad = Keypad(makeKeymap(Teclas), Pino_linha, Pino_coluna, Linha, Coluna );
  12. //------------------------------------------------
  13. const int DOUT = A5;      // Pino DT placa HX711
  14. const int hxSCK = A4;     // Pino SCK placa HX711
  15. const int AMOSTRAS = 3;   // n�mero de amostras da medi��o para o c�lculo da m�dia
  16. const int pinoSaida = A2; // pino de sa�da
  17. const float offSetPeso = 0.05;  //percentual da medi��o
  18. unsigned long TARA = 0;   // Tara
  19. unsigned int Digitado = 0;
  20. float pDesejado;
  21. float pMedido;
  22. float kconst = 88100;     // Fator para Kilograma pequenos pesos
  23. int k = 0;
  24. unsigned char teclaPressionada[3];
  25. //=====================SETUP==============================================
  26. void setup()
  27. {
  28.   // inicializa HX711
  29.   pinMode(hxSCK, OUTPUT);
  30.   pinMode(DOUT, INPUT);
  31.   // configura o pino como sa�da
  32.   pinMode(pinoSaida, OUTPUT);
  33.   resetHX711();
  34.   // inicializa serial
  35.   Serial.begin(9600);
  36.   lcd.begin(16, 2);
  37.   TARA = setTARA();
  38.   delay(1000);
  39.   setPesoDesejado(25);   //chama essa fun��o para setar o peso via teclado
  40. }
  41. //========================LOOP=====================================
  42. void loop()
  43. //------------------------------------------------------
  44. {
  45.   //int samplek = map(analogRead(1), 259, 505, 0, 500);
  46.   pMedido = Peso();
  47.   lcd.setCursor(5, 1);
  48.   lcd.print(pMedido);
  49.   lcd.setCursor(1, 1);
  50.   lcd.print("Kg ");
  51.   delay(10); //Aguarda 10ms
  52.   /*  para evitar que passe do peso, dependendo do seu sistema de alimenta��o, trabalhe com o offset
  53.         acima foi definido com 0.05%, logo:
  54.         pDesejado = 1.3kg
  55.         para a condi��o abaixo ser satisfeita a soma do pMedido+offSetPeso tem que ser igual a 1.3, logo:
  56.         pMedido = 1.3-0.05 = 1,25
  57.         ent�o quando o pMedido for 1,25kg a sa�da vai ser acionada (alterado para 25)
  58.   */
  59.   if ((pMedido + offSetPeso) >= pDesejado)
  60.     digitalWrite(pinoSaida, HIGH); //aciona
  61.   else
  62.     digitalWrite(pinoSaida, LOW); //desliga
  63.   Entrada();                                                    // Chama rotina de entrada dos dados
  64.   setPesoDesejado(Digitado);                                    // Chama rotina de definir o peso
  65.   char teclaPressionada = keypad.getKey();
  66.   /*  if (teclaPressionada != NO_KEY)
  67.     {
  68.       lcd.setCursor(k, 0);
  69.       lcd.print(teclaPressionada);  //CONSEGUI INTERAGIR C/ TECLADO
  70.       k++;
  71.     }*/
  72. }
  73. //=====================FUN��ES==========================================
  74. /* retorna os dados do m�dulo HX711  */
  75. unsigned long CAPTURA()
  76. {
  77.   byte data[3];
  78.   while (digitalRead(DOUT));
  79.   for (byte j = 0; j < 3; j++)
  80.   {
  81.     for (byte i = 0; i < 8; i++)
  82.     {
  83.       digitalWrite(hxSCK, HIGH);
  84.       bitWrite(data[2 - j], 7 - i, digitalRead(DOUT));
  85.       digitalWrite(hxSCK, LOW);
  86.     }
  87.   }
  88.   digitalWrite(hxSCK, HIGH);
  89.   digitalWrite(hxSCK, LOW);
  90.   return ((long) data[2] << 16) | ((long) data[1] << 8) | (long) data[0];
  91. }
  92. /* TARA a balan�a */
  93. unsigned long setTARA()
  94. {
  95.   // reseta o conversor HX711
  96.   resetHX711();
  97.   return Media(AMOSTRAS);  //se n�o estabilizar nesse tempo podes fazer (2*AMOSTRAS) ou mude direto a constante
  98. }
  99. /* calcula a medi��o */
  100. float Peso()
  101. {
  102.   long peso = (Media(AMOSTRAS) - TARA);
  103.   return (float) peso / kconst;
  104. }
  105. /* retorna a m�dia de n medidas */
  106. long Media(byte vezes)
  107. {
  108.   long soma = 0;
  109.   for (byte i = 0; i < vezes; i++)
  110.   {
  111.     soma += CAPTURA();
  112.   }
  113.   return soma / vezes;
  114. }
  115. /* reset do m�dulo HX711 */
  116. void resetHX711()
  117. {
  118.   digitalWrite(hxSCK, HIGH);
  119.   delayMicroseconds(100);
  120.   digitalWrite(hxSCK, LOW);
  121. }
  122. /* seta o peso desejado */
  123. void setPesoDesejado(float valor)
  124. {
  125.   pDesejado = valor;
  126. }
  127. //-----------------------------------
  128. void  Entrada()
  129. {
  130.   Digitado = 0;                                       // Limpa valor Digitado anterior
  131.   lcd.setCursor(1, 0);                                // Posiciona cursor
  132.   lcd.print("Digitado: ");                            // Print
  133.   while (1)                                           // Faça sempre até um return
  134.   {
  135.     char key = keypad.getKey();                       // Obtém tecla pressionada
  136.     if (key != NO_KEY)                                // Se foi pressionada uma tecla:
  137.     {
  138.       if (key == '#')                                 // Se a tecla é '#'
  139.       {
  140.         return;                                       // Sai da rotina de digitacao
  141.       }
  142.       else                                            // Se for outra tecla
  143.       {
  144.         key = keypad.getKey();                        // Obtém tecla pressionada
  145.         if (key != NO_KEY)                            // Se foi pressionada uma tecla:
  146.         {
  147.           lcd.print(key);                             // Imprime
  148.           Digitado = Digitado << 8 + key;             // Cada vez que teclar desloca a casa do valor
  149.         }
  150.       }
  151.     }
  152.   }
  153. }
RAW Paste Data