#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#define LCD_ADDRESS 0x27 // Dirección I2C de la pantalla LCD, puede ser diferente
#define LCD_COLUMNS 32
#define LCD_ROWS 2
LiquidCrystal_I2C lcd(LCD_ADDRESS, LCD_COLUMNS, LCD_ROWS);
// Configuración del potenciómetro y PWM
const int potPin = A0; // Pin analógico para leer el potenciómetro
const int pwmPin = 9; // Pin digital para salida PWM
const int ledPins[] = {2, 3, 4}; // Pines digitales para los LEDs
const int numLeds = 3; // Número de LEDs
//definir los pines para la pantalla LCD
const int icdRS=12;
const int icdE=11;
const int icdD4=6;
const int icdD5=7;
const int icdD6=8;
const int icdD7=9;
// Frecuencia de actualización de la pantalla LCD
const unsigned long lcdUpdateInterval = 500; // Intervalo en milisegundos
unsigned long lastLcdUpdate = 0;
void setup() {
// Inicializar pantalla LCD
lcd.begin(20, 4);
lcd.backlight(); // Activar la retroiluminación
// Configurar el pin PWM
pinMode(pwmPin, OUTPUT);
// Configurar los pines de los LEDs
for (int i = 0; i < numLeds; i++)
pinMode(ledPins[i], OUTPUT);
// Mensaje inicial en pantalla LCD
lcd.setCursor(0, 0);
lcd.print("Frecuencia:");
// Mensaje inicial en pantalla LCD
lcd.setCursor(0, 0);
lcd.print("Freq. Motor:");
}
void loop() {
// Leer el valor del potenciómetro
int potValue = analogRead(potPin);
// Mapear el valor del potenciómetro a un rango de frecuencia (2 a 200 Hz)
float frequency = map(potValue, 0, 1023, 2, 200);
// Actualizar la pantalla LCD a intervalos regulares
unsigned long currentMillis = millis();
if (currentMillis - lastLcdUpdate >= lcdUpdateInterval)
lastLcdUpdate = currentMillis;
// Mostrar la frecuencia en la pantalla LCD
lcd.setCursor(0, 1);
lcd.print("F: ");
lcd.print(frequency);
lcd.print(" Hz "); // Espacios adicionales para limpiar posibles restos de texto
// Calcular el ancho del pulso PWM basado en la frecuencia deseada
// La frecuencia PWM del Arduino UNO es fija y típicamente está en el rango de 490 Hz a 1 kHz.
// Convertimos la frecuencia deseada a un rango de PWM adecuado.
// Nota: En realidad, no podemos ajustar directamente la frecuencia PWM en Arduino UNO.
int pwmValue = map(frequency, 2, 200, 0, 255);
// Enviar señal PWM al pin de salida
analogWrite(pwmPin, pwmValue);
// Esperar antes de la siguiente actualización
delay(100);
}