Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <Keypad.h>
- #include <LiquidCrystal.h>
- //-----------------------------------------teclado
- const byte Coluna = 4;
- const byte Linha = 4;
- char Teclas[Linha][Coluna] = {{'1', '2', '3', 'A'}, {'4', '5', '6', 'B'}, {'7', '8', '9', 'C'}, {'*', '0', '#', 'D'}};
- byte Pino_linha[Linha] = {A0, A1, 8, 9};
- byte Pino_coluna[Coluna] = {10, 11, 12, 13};
- //-------------------------------------------------
- LiquidCrystal lcd(6, 7, 2, 3, 4, 5);
- Keypad keypad = Keypad(makeKeymap(Teclas), Pino_linha, Pino_coluna, Linha, Coluna );
- //------------------------------------------------
- const int DOUT = A5; // Pino DT placa HX711
- const int hxSCK = A4; // Pino SCK placa HX711
- const int AMOSTRAS = 3; // n�mero de amostras da medi��o para o c�lculo da m�dia
- const int pinoSaida = A2; // pino de sa�da
- const float offSetPeso = 0.05; //percentual da medi��o
- unsigned long TARA = 0; // Tara
- unsigned int Digitado = 0;
- float pDesejado;
- float pMedido;
- float kconst = 88100; // Fator para Kilograma pequenos pesos
- int k = 0;
- unsigned char teclaPressionada[3];
- //=====================SETUP==============================================
- void setup()
- {
- // inicializa HX711
- pinMode(hxSCK, OUTPUT);
- pinMode(DOUT, INPUT);
- // configura o pino como sa�da
- pinMode(pinoSaida, OUTPUT);
- resetHX711();
- // inicializa serial
- Serial.begin(9600);
- lcd.begin(16, 2);
- TARA = setTARA();
- delay(1000);
- setPesoDesejado(25); //chama essa fun��o para setar o peso via teclado
- }
- //========================LOOP=====================================
- void loop()
- //------------------------------------------------------
- {
- //int samplek = map(analogRead(1), 259, 505, 0, 500);
- pMedido = Peso();
- lcd.setCursor(5, 1);
- lcd.print(pMedido);
- lcd.setCursor(1, 1);
- lcd.print("Kg ");
- delay(10); //Aguarda 10ms
- /* para evitar que passe do peso, dependendo do seu sistema de alimenta��o, trabalhe com o offset
- acima foi definido com 0.05%, logo:
- pDesejado = 1.3kg
- para a condi��o abaixo ser satisfeita a soma do pMedido+offSetPeso tem que ser igual a 1.3, logo:
- pMedido = 1.3-0.05 = 1,25
- ent�o quando o pMedido for 1,25kg a sa�da vai ser acionada (alterado para 25)
- */
- if ((pMedido + offSetPeso) >= pDesejado)
- digitalWrite(pinoSaida, HIGH); //aciona
- else
- digitalWrite(pinoSaida, LOW); //desliga
- Entrada(); // Chama rotina de entrada dos dados
- setPesoDesejado(Digitado); // Chama rotina de definir o peso
- char teclaPressionada = keypad.getKey();
- /* if (teclaPressionada != NO_KEY)
- {
- lcd.setCursor(k, 0);
- lcd.print(teclaPressionada); //CONSEGUI INTERAGIR C/ TECLADO
- k++;
- }*/
- }
- //=====================FUN��ES==========================================
- /* retorna os dados do m�dulo HX711 */
- unsigned long CAPTURA()
- {
- byte data[3];
- while (digitalRead(DOUT));
- for (byte j = 0; j < 3; j++)
- {
- for (byte i = 0; i < 8; i++)
- {
- digitalWrite(hxSCK, HIGH);
- bitWrite(data[2 - j], 7 - i, digitalRead(DOUT));
- digitalWrite(hxSCK, LOW);
- }
- }
- digitalWrite(hxSCK, HIGH);
- digitalWrite(hxSCK, LOW);
- return ((long) data[2] << 16) | ((long) data[1] << 8) | (long) data[0];
- }
- /* TARA a balan�a */
- unsigned long setTARA()
- {
- // reseta o conversor HX711
- resetHX711();
- return Media(AMOSTRAS); //se n�o estabilizar nesse tempo podes fazer (2*AMOSTRAS) ou mude direto a constante
- }
- /* calcula a medi��o */
- float Peso()
- {
- long peso = (Media(AMOSTRAS) - TARA);
- return (float) peso / kconst;
- }
- /* retorna a m�dia de n medidas */
- long Media(byte vezes)
- {
- long soma = 0;
- for (byte i = 0; i < vezes; i++)
- {
- soma += CAPTURA();
- }
- return soma / vezes;
- }
- /* reset do m�dulo HX711 */
- void resetHX711()
- {
- digitalWrite(hxSCK, HIGH);
- delayMicroseconds(100);
- digitalWrite(hxSCK, LOW);
- }
- /* seta o peso desejado */
- void setPesoDesejado(float valor)
- {
- pDesejado = valor;
- }
- //-----------------------------------
- void Entrada()
- {
- Digitado = 0; // Limpa valor Digitado anterior
- lcd.setCursor(1, 0); // Posiciona cursor
- lcd.print("Digitado: "); // Print
- while (1) // Faça sempre até um return
- {
- char key = keypad.getKey(); // Obtém tecla pressionada
- if (key != NO_KEY) // Se foi pressionada uma tecla:
- {
- if (key == '#') // Se a tecla é '#'
- {
- return; // Sai da rotina de digitacao
- }
- else // Se for outra tecla
- {
- key = keypad.getKey(); // Obtém tecla pressionada
- if (key != NO_KEY) // Se foi pressionada uma tecla:
- {
- lcd.print(key); // Imprime
- Digitado = Digitado << 8 + key; // Cada vez que teclar desloca a casa do valor
- }
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement