#include <Wire.h>
#include <LiquidCrystal_I2C.h>
// Inicializar la LCD
LiquidCrystal_I2C lcd(0x27, 16, 2); // Direccion I2C: 0x27, 16 columnas y 2 filas
// Definicion de pines para los sensores y botones
const int sensorA_pin = 2;
const int sensorB_pin = 3;
const int start_button_pin = 4;
const int stop_button_pin = 5;
const int reset_button_pin = 6;
const int next_parameter_pin = 7;
// Variables para manejar el cronometro
unsigned long startTime = 0;
unsigned long elapsedTime = 0;
bool running = false;
void setup() {
Serial.begin(9600);
// Inicializar la LCD
lcd.init();
lcd.backlight();
// Configurar los pines como entradas
pinMode(sensorA_pin, INPUT);
pinMode(sensorB_pin, INPUT);
pinMode(start_button_pin, INPUT_PULLUP);
pinMode(stop_button_pin, INPUT_PULLUP);
pinMode(reset_button_pin, INPUT_PULLUP);
pinMode(next_parameter_pin, INPUT_PULLUP);
// Mostrar mensaje inicial en la LCD
lcd.setCursor(0, 0);
lcd.print("Proyecto Caida");
lcd.setCursor(0, 1);
lcd.print("Libre Fisica I");
delay(5000); // Esperar 5 segundos
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Ing. Gustavo");
lcd.setCursor(0, 1);
lcd.print("Lopez");
delay(5000); // Esperar 5 segundos
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Cronometro");
}
void loop() {
// Verificar si se presiona el boton de inicio
if (digitalRead(start_button_pin) == LOW && !running) {
startTime = millis() / 1000; // Convertir milisegundos a segundos
running = true;
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Cronometro");
}
// Verificar si se presiona el boton de parar
if (digitalRead(stop_button_pin) == LOW && running) {
elapsedTime = (millis() / 1000) - startTime; // Convertir milisegundos a segundos
running = false;
// Calcular velocidad de caida
float velocity = calculateVelocity(elapsedTime);
lcd.setCursor(0, 1);
lcd.print("Vel: ");
lcd.print(velocity);
lcd.print(" m/s");
}
// Verificar si se presiona el boton de reiniciar
if (digitalRead(reset_button_pin) == LOW) {
startTime = 0;
elapsedTime = 0;
running = false;
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Reiniciado");
}
// Verificar si se presiona el boton de siguiente parametro
if (digitalRead(next_parameter_pin) == LOW) {
// Aqui puedes agregar codigo para manejar otro parametro o realizar alguna accion adicional
}
}
// Funcion para calcular la velocidad de caida
float calculateVelocity(unsigned long time) {
// Considerando la aceleracion de la gravedad como 9.81 m/s^2
// v = gt, donde v es la velocidad, g es la gravedad y t es el tiempo
float gravity = 9.81; // Aceleracion de la gravedad en m/s^2
float velocity = gravity * time;
return velocity;
}