/*Cuando oscurezca, un led comenzará a parpadear hasta que se pulse un pulsador.
Entonces aparecerá un mensaje en una pantalla oled con la temperatura ambiente.*/
//Carles Ribis y Saúl Díaz López, 1º BACH A, 3-3-25
#include <Adafruit_GFX.h>
#include <Wire.h>
#include <Adafruit_SSD1306.h>
//Se incluyen las librerías para la pantalla OLED
Adafruit_SSD1306 pantallaOLED(128, 64, &Wire, -1); //Se definen las características de la pantallaOLED
//Se definen las variables constantes
const int pinLED = 7;
const int pinLDR = A2;
const int pinTMP36GZ = A3;
const int pinPulsador = 11;
const int delayTime = 500;
void setup() {
pantallaOLED.begin(SSD1306_SWITCHCAPVCC, 0x3C); //Se inicia la pantalla
Serial.begin(9600); //Se inicia el puerto serie, para comprobar la evolución de las variables
//Se definen las entradas y salidas
pinMode(pinLED, OUTPUT);
pinMode(pinPulsador, INPUT);
pinMode(pinLDR, INPUT);
pinMode(pinTMP36GZ, INPUT);
int luz = analogRead(pinLDR); //Se define "luz" como la lectura analógica de la LDR
while (luz < 450){ /*Mientras q el valor de "luz" sea menor de 450
(lo que significa que no ha oscurecido), se repite este bloque*/
luz = analogRead(pinLDR); //"luz" pasa a ser la nueva lectura analógica del pin de la LDR
Serial.println(luz); //El puerto serie imprime el nuevo valor de "luz"
}
int pulsador = digitalRead(pinPulsador); //Se define "pulsador" como la lectura digital del pulsador
while (pulsador == 0){ /*Mientras q el valor de "pulsador" sea igual a 0
(lo que significa que no está pulsado), se repite este bloque*/
digitalWrite(pinLED, HIGH);
delay(delayTime);
digitalWrite(pinLED, LOW);
delay(delayTime);
//El LED parapdea cada un tiempo definido (500 ms)
pulsador = digitalRead(pinPulsador); //"pulsador" pasa a ser la nueva lectura digital del pulsador
Serial.println(pulsador); //El puerto serie imprime el nuevo valor de "pulsador"
}
}
void loop() {
digitalWrite(pinLED, LOW); //El LED se apaga
int Vout = analogRead(pinTMP36GZ)*(5000/1024);
//Se transoforma el valor de la lectura analógica en milivoltios y se guarda en la variable "Vout"
int temperatura = (Vout - 500)/10;
//Se transforman los milivoltios en grados y se guarda en la variable "temperatura"
Serial.println(temperatura); //El puerto serie imprime el nuevo valor de "temperatura"
pantallaOLED.clearDisplay(); //Se borra todo lo de la pantalla
//Se definen caracterísiticas de escritura
pantallaOLED.setCursor(0, 10);
pantallaOLED.setTextColor(1);
pantallaOLED.setTextSize(2);
pantallaOLED.println("Temperatura"); //Se define el texto a imprimir
//Se definen caracterísiticas de escritura
pantallaOLED.setCursor(30, 30);
pantallaOLED.setTextColor(1);
pantallaOLED.setTextSize(2);
pantallaOLED.println(temperatura); //Se define que hay que imprimir el valor de "temperatura"
pantallaOLED.display(); //Se imprime todo en la OLED
delay(delayTime); //Se espera un tiempo definido para poder ver bien los valores
}