Hola! cree un contador de vueltas para una maquina bobinadora de motores, pero me gustaria agregarle un pulsador y que resete el contador, tambien que llegado a una x cantidad de vueltas me haga sonar una alarma es posible? podrian ayudarme? Gracias! comparto el codigo
#include <LiquidCrystal_I2C.h>
int led = 6;
int pinIN = 7; // Crea Variable pinIN y la asocia al pin digital 7
int valorIN = 0; // Crea Variables con un valor inicial asociado
int contenido = 0;
LiquidCrystal_I2C lcd(0x27,16,2);
void setup()
{
pinMode(pinIN, INPUT); // Define el Puerto 7 como Entrada
lcd.init();
lcd.backlight();
lcd.clear();
lcd.setCursor(1,0); // Seteamos la ubicacion del texto 1, linea 0 que sera escrita sobre el LCD
lcd.print("CUENTA VUELTAS "); // Imprime "CUENTA OBJETOS" sobre el LCD
lcd.setCursor(2,1);
lcd.print("CANTIDAD: ");
}
void loop()
{
valorIN=digitalRead(pinIN); // Realiza la lectura Digital del pin 7
if(valorIN!=1) // Si la lectura es 1 incremente el valor de contenido
{
contenido++;
while(digitalRead(pinIN)!=1) {
delay(100); // Realiza un Delay para estabilizar
}
lcd.setCursor(12,1); // Ubicamos el cursor en la posicion 12 sobre la linea 1
lcd.print(contenido); // Imprimimos el valor del contenido sobre dicha ubicacion
}
}
¡Hola! Claro, puedo ayudarte a mejorar tu contador de vueltas para la máquina bobinadora de motores. Para agregar un pulsador y una alarma, necesitaremos hacer algunas modificaciones en tu código.
Primero, asegurémonos de que tengas un pulsador conectado correctamente a tu Arduino. Luego, podemos implementar las siguientes funcionalidades:
Resetear el contador con un pulsador:
Cuando se presione el pulsador, restableceremos el contador a cero.
Para hacer esto, necesitamos detectar cuándo se presiona el pulsador y luego reiniciar la variable contenido.
Activar una alarma después de cierta cantidad de vueltas:
Definiremos un valor umbral (por ejemplo, 10 vueltas).
Cuando el contador alcance ese valor, activaremos una alarma para indicar que se ha alcanzado la cantidad deseada de vueltas.
Aquí está el código modificado con estas funcionalidades:
#include <LiquidCrystal_I2C.h>
int pinIN = 7; // Pulsador conectado al pin digital 7
int valorIN = 0;
int contenido = 0;
int umbralVueltas = 10; // Establece el umbral de vueltas para la alarma
LiquidCrystal_I2C lcd(0x27, 16, 2);
void setup()
{
pinMode(pinIN, INPUT);
lcd.init();
lcd.backlight();
lcd.clear();
lcd.setCursor(1, 0);
lcd.print("CUENTA VUELTAS");
lcd.setCursor(2, 1);
lcd.print("CANTIDAD: ");
}
void loop()
{
valorIN = digitalRead(pinIN);
if (valorIN != 1)
{
contenido++;
while (digitalRead(pinIN) != 1)
{
delay(100);
}
lcd.setCursor(12, 1);
lcd.print(contenido);
// Verifica si se alcanzó el umbral de vueltas
if (contenido >= umbralVueltas)
{
// Activa la alarma (puedes agregar aquí el código para hacer sonar una alarma)
// Por ejemplo, puedes usar un zumbador o un LED parpadeante.
// ¡No olvides implementar la lógica para detener la alarma cuando sea necesario!
}
}
}
Estoy diciendo que el código de #2 no está bien, que no va a funcionar como quieres y que parece hecho por chatgpt.
Más allá de eso, la idea general está bien, debes resetear al variable contenido al pulsar el botón y activar la alarma cuando la variable alcance cierto valor.
Ya lo pude resolver con chatgpt, increible lo que hace la IA, les dejo el codigo
#include <LiquidCrystal_I2C.h>
int Infrarojo = 7; // Pin del sensor infrarrojo
int BotonReset = 6; // Pin del botón de reset
int LedParpadeo = 5; // Pin del LED de parpadeo
int valorAnterior = HIGH; // Valor anterior del sensor infrarrojo
int contenido = 0; // Contador de vueltas
bool vueltasAlcanzadas = false; // Variable para indicar si se alcanzaron las vueltas
bool parpadeoActivado = false; // Variable para indicar si el parpadeo está activado
int estadoLed = HIGH;
LiquidCrystal_I2C lcd(0x27, 16, 2); // Inicialización del LCD
void setup() {
pinMode(Infrarojo, INPUT); // Sensor infrarrojo como entrada
pinMode(BotonReset, INPUT_PULLUP); // Pulsador como entrada con resistencia pull-up
pinMode(LedParpadeo, OUTPUT); // LED de parpadeo como salida
lcd.init(); // Inicialización del LCD
lcd.backlight(); // Enciende la retroiluminación
lcd.clear(); // Limpia la pantalla
lcd.setCursor(1, 0); // Establece la posición del cursor
lcd.print("CUENTA VUELTAS "); // Muestra el mensaje
lcd.setCursor(2, 1); // Establece la posición del cursor
lcd.print("CANTIDAD: "); // Muestra el mensaje
digitalWrite(LedParpadeo, HIGH);
}
void loop() {
int valorActual = digitalRead(Infrarojo); // Lee el sensor infrarrojo
if (valorActual == LOW && valorAnterior == HIGH) { // Si el sensor pasa de alto a bajo (detecta un objeto)
contenido++; // Incrementa el contador
lcd.setCursor(12, 1); // Establece la posición del cursor
lcd.print(contenido); // Muestra el contador
if (contenido >= 50 && !vueltasAlcanzadas) { // Si el contador alcanza 10 vueltas y no se han alcanzado las vueltas antes
vueltasAlcanzadas = true; // Indica que se alcanzaron las vueltas
parpadeoActivado = true; // Activa el parpadeo del LED
}
}
valorAnterior = valorActual; // Actualiza el valor anterior del sensor
if (parpadeoActivado) { // Si se activa el parpadeo
parpadearLed(); // Activa el parpadeo del LED
}
if (digitalRead(BotonReset) == LOW) { // Si se presiona el botón de reset
contenido = 0; // Resetea el contador
lcd.setCursor(12, 1); // Establece la posición del cursor
lcd.print(" "); // Borra el contenido del contador
lcd.setCursor(12, 1); // Establece la posición del cursor
lcd.print(contenido); // Muestra el contador reseteado
vueltasAlcanzadas = false; // Reinicia la variable de vueltas alcanzadas
parpadeoActivado = false; // Desactiva el parpadeo del LED
digitalWrite(LedParpadeo, HIGH); // Apaga el LED
delay(100); // Espera para evitar rebotes
}
}
void parpadearLed() {
static unsigned long tiempoPrevio = 0; // Variable para almacenar el tiempo previo
static bool estadoLed = false; // Estado actual del LED
unsigned long tiempoActual = millis(); // Tiempo actual
if (tiempoActual - tiempoPrevio >= 100) { // Si ha pasado medio segundo
tiempoPrevio = tiempoActual; // Actualiza el tiempo previo
digitalWrite(LedParpadeo, estadoLed); // Alterna el estado del LED
estadoLed = !estadoLed; // Cambia el estado del LED
}
}