#include <SPI.h>
#include <Adafruit_GFX.h>
#include <Adafruit_ILI9341.h>
#include <Arduino.h>
#include "HX711.h"
#include <Adafruit_FT6206.h>
// Pines de la pantalla TFT
#define TFT_DC 9
#define TFT_CS 10
Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC);
Adafruit_FT6206 touch = Adafruit_FT6206(); // FT6206 utiliza I2C (SCL/SDA)
bool touch_initialized = false;
// Pines para el HX711
const int LOADCELL_DOUT_PIN = 3;
const int LOADCELL_SCK_PIN = 2;
HX711 bascula;
// Factor de calibración
float calibration_factor = 420.00;
// Variable para el estado de la pantalla
int screenState = 0; // 0 = Pantalla de bienvenida, 1 = Pantalla de peso
// Tamaño y posición del botón "Iniciar" (ajustados para modo horizontal)
const int buttonWidth = 120;
const int buttonHeight = 40;
const int buttonX = (320 - buttonWidth) / 2; // Centrar en la pantalla en modo horizontal
const int buttonY = 180; // Ajuste vertical para centrar el botón debajo del texto
void setup() {
Serial.begin(57600);
tft.begin();
tft.setRotation(3); // Rotar la pantalla 270 grados para modo horizontal en la dirección correcta
tft.fillScreen(ILI9341_BLACK);
tft.setTextColor(ILI9341_WHITE);
tft.setTextSize(2);
// Configuración inicial del sensor de carga
bascula.begin(LOADCELL_DOUT_PIN, LOADCELL_SCK_PIN);
bascula.set_scale(calibration_factor);
// Inicializa el controlador táctil FT6206
if (!touch.begin()) {
Serial.println("No se detectó ningún controlador táctil compatible.");
} else {
Serial.println("Controlador táctil FT6206 detectado.");
touch_initialized = true;
}
// Mostrar la pantalla de bienvenida
displayWelcomeScreen();
}
void loop() {
if (screenState == 0) { // Pantalla de bienvenida
if (touch.touched()) {
TS_Point p = touch.getPoint(); // Obtener el punto del toque
Serial.println("Hola"); // Imprime "Hola" en la terminal al detectar toque en el botón
screenState = 1; // Cambia a la pantalla de peso
displayWeightScreen();
}
} else if (screenState == 1) { // Pantalla de peso
displayWeight(); // Actualizar el peso en la pantalla
}
}
// Función para mostrar la pantalla de bienvenida
void displayWelcomeScreen() {
tft.fillScreen(ILI9341_BLACK);
// Centramos el texto de bienvenida en la pantalla en modo horizontal
tft.setCursor((320 - 18 * 10) / 2, 100); // Centrado horizontalmente en la pantalla
tft.print("Bascula de monitoreo");
// Dibujar el botón "Iniciar" centrado en la pantalla en modo horizontal
tft.fillRect(buttonX, buttonY, buttonWidth, buttonHeight, ILI9341_WHITE);
tft.setTextColor(ILI9341_BLACK);
tft.setCursor(buttonX + (buttonWidth - 78) / 2, buttonY + 10); // Centrar texto "Iniciar" en el botón
tft.print("Iniciar");
tft.setTextColor(ILI9341_WHITE); // Restablecer color de texto
}
// Función para detectar si el botón "Iniciar" fue presionado
bool isStartButtonPressed(int x, int y) {
return (x > buttonX && x < (buttonX + buttonWidth) && y > buttonY && y < (buttonY + buttonHeight));
}
// Función para mostrar la pantalla de peso
void displayWeightScreen() {
tft.fillScreen(ILI9341_BLACK);
tft.setCursor(10, 20);
tft.print("Peso actual:");
}
// Función para actualizar el peso en la pantalla de peso
void displayWeight() {
float peso = bascula.get_units();
tft.fillRect(10, 40, 120, 30, ILI9341_BLACK); // Borra el área del peso
tft.setCursor(10, 40);
tft.print(peso, 1);
tft.print(" kg");
delay(500); // Retardo para evitar parpadeo
}