#include <Encoder.h>
#include <U8g2lib.h>
// Definir pines para componentes
#define LDR_PIN A7
#define SHUTTER_ENCODER_A_PIN D5
#define SHUTTER_ENCODER_B_PIN D4
#define APERTURE_ENCODER_A_PIN D3
#define APERTURE_ENCODER_B_PIN D2
#define BUTTON_PIN D11
#define OLED_SCL_PIN D8
#define OLED_SDA_PIN D7
// Definir límites de medición
int light_min = 0;
int light_max = 1023;
int shutter_min = 1;
int shutter_max = 4000;
int aperture_min = 1;
int aperture_max = 22;
// Crear objetos para encoders
Encoder shutter_encoder(SHUTTER_ENCODER_A_PIN, SHUTTER_ENCODER_B_PIN);
Encoder aperture_encoder(APERTURE_ENCODER_A_PIN, APERTURE_ENCODER_B_PIN);
// Crear objeto para pantalla OLED
U8G2_SSD1306_128X64_NONAME_F_HW_I2C oled(U8G2_R0, OLED_SCL_PIN, OLED_SDA_PIN);
void setup() {
// Inicializar pines de entrada y salida
pinMode(LDR_PIN, INPUT);
pinMode(BUTTON_PIN, INPUT_PULLUP);
// Inicializar pantalla OLED
oled.begin();
oled.clearBuffer();
oled.setFont(u8g2_font_6x10_tf);
oled.drawStr(0, 10, "Fotometro");
oled.sendBuffer();
}
void loop() {
// Leer valor del LDR
int light_value = analogRead(LDR_PIN);
// Leer posiciones de encoders
int shutter_value = shutter_encoder.read();
int aperture_value = aperture_encoder.read();
// Ajustar límites de medición con encoders
if (shutter_value < shutter_min) shutter_min = shutter_value;
if (shutter_value > shutter_max) shutter_max = shutter_value;
if (aperture_value < aperture_min) aperture_min = aperture_value;
if (aperture_value > aperture_max) aperture_max = aperture_value;
// Comprobar si la medición está dentro de los límites
if (light_value >= light_min && light_value <= light_max) {
// Encender LED verde
digitalWrite(LED_GREEN_PIN, HIGH);
digitalWrite(LED_RED_PIN, LOW);
digitalWrite(LED_YELLOW_PIN, LOW
} else if (light_value < light_min) {
// Encender LED rojo
digitalWrite(LED_GREEN_PIN, LOW);
digitalWrite(LED_RED_PIN, HIGH);
digitalWrite(LED_YELLOW_PIN, LOW);
} else if (light_value > light_max) {
// Encender LED amarillo
digitalWrite(LED_GREEN_PIN, LOW);
digitalWrite(LED_RED_PIN, LOW);
digitalWrite(LED_YELLOW_PIN, HIGH);
}
// Leer estado del botón
int button_state = digitalRead(BUTTON_PIN);
// Comprobar si el botón ha sido presionado
if (button_state == LOW) {
// Cambiar entre modos de medición
// (por ejemplo, velocidad de obturación, apertura de diafragma, ISO)
// ... código para cambiar entre modos
}
// Mostrar información en pantalla OLED
oled.clearBuffer();
oled.drawStr(0, 10, "Luz: " + String(light_value));
oled.drawStr(0, 20, "Velocidad: " + String(shutter_value));
oled.drawStr(0, 30, "Apertura: " + String(aperture_value));
oled.sendBuffer();
// Esperar antes de volver a medir
delay(100);
}