#include <SPI.h> // incluye libreria bus SPI
#include <Adafruit_GFX.h> // incluye libreria para manejo de graficos
#include <Adafruit_ILI9341.h> // incluye libreria para controlador ILI9341
#include "HX711.h" // incluye libreria HX711
#define TFT_DC 2 // define constante TFT_DC con numero 2
#define TFT_RESET 4
#define TFT_CS 15 // define constante TFT_CS con numero 15
#define DT 12 // DT de HX711 a pin digital 12
#define SCK 13 // SCK de HX711 a pin digital 13
#define TFT_MISO 19
#define TFT_MOSI 23
#define TFT_SCK 18
int pulsadorR=21; // declaro pulsador paso rapido
int pulsadorL=22; // declaro pulsador paso lento
#define STEP 25 // define paso
#define DIR 26 // define sentido giro
Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC); // crea objeto
HX711 celda; // crea objeto con nombre celda
void setup(){
tft.begin(); // inicializa pantalla
tft.setRotation(0); // establece posicion vertical con pines hacia abajo
tft.fillScreen(ILI9341_BLACK); // fondo de pantalla de color negro
tft.fillRect(0, 0, 240, 40, ILI9341_NAVY); // rectangulo azul naval a modo de fondo de titulo
tft.setTextColor(ILI9341_WHITE); // color de texto en blanco
tft.setTextSize(3); // escala de texto en 2
tft.setCursor(80,6); // ubica cursor
tft.print("Peso"); // imprime texto
tft.setCursor(100,50); // ubica cursor
tft.print("Gr"); // imprime texto
tft.setCursor(100,200); // ubica cursor
tft.print("Gn"); // imprime texto
Serial.begin(9600); // inicializa monitor serie a 9600 baudios
Serial.println("Balanza con celda de carga"); // texto descriptivo
celda.begin(DT, SCK); // inicializa objeto con los pines a utilizar
celda.set_scale(0.084f); // establece el factor de escala obtenido del primer programa
celda.tare(); // realiza la tara o puesta a cero
pinMode(STEP, OUTPUT);
pinMode(DIR, OUTPUT);
pinMode(pulsadorR, INPUT);
pinMode(pulsadorL, INPUT);
}
void loop()
{
if (digitalRead(pulsadorR) == HIGH)
{
digitalWrite(DIR, HIGH); // giro en un sentido
while (digitalRead(pulsadorR) == HIGH)
{
digitalWrite(STEP, HIGH); // nivel alto
delay(50); // por 5 mseg
digitalWrite(STEP, LOW); // nivel bajo
delay(50); // por 5 mseg
}
}
else if (digitalRead(pulsadorL) == HIGH)
{
digitalWrite(DIR, HIGH); // giro en un sentido
while (digitalRead(pulsadorL) == HIGH)
{
digitalWrite(STEP, HIGH); // nivel alto
delay(500); // por 50 mseg
digitalWrite(STEP, LOW); // nivel bajo
delay(500); // por 50 mseg
}
}
else
{
}
float i = (celda.get_units(10), 3);
tft.setTextColor(ILI9341_YELLOW, ILI9341_BLACK); // texto en color amarillo
tft.setTextSize(5); // escala de texto en 6
// tft.setCursor(30,120); // ubica cursor
if (i<0) // Mostramos valores negativos o positivos del peso
{
i = i * (-1);
tft.setCursor(30,120);
tft.print("0");
}
else
{
}
tft.setCursor(30,120); // Ponemos el cursor en fila columna
tft.print(celda.get_units(10), 3); // Imprimimos el valor recuperado
float z = (celda.get_units(10) /0.064798); // Convertimos de gramos a grains
tft.setCursor(30,250);
tft.print(z);
delay(10); // demora de 10 mseg.
Serial.print ("Valor (gramos): "); // texto descriptivo
Serial.println(celda.get_units(10), 3); // muestra el valor obtenido promedio de 10 lecturas
celda.power_down(); // apaga el modulo HX711
delay(3000); // demora de 3 segundos
celda.power_up(); // despierta al modulo HX711
//
}