//9.2. Escribir un programa que solicite por puerto serie la hora, los minutos y
//los segundos y los almacene en variables correspondientes, y luego envíe por
//puerto serie cada un segundo la hora exacta.
//Temporizadores de reloj
//9.3. Agregar al programa anterior una rutina que lea el estado de un botón
//conectado al pin 2 cada 100 milisegundos y envíe un mensaje por el puerto serie
//incrementando un contador para cada pulsación.
//9.4. Agregar al programa anterior una rutina que lea cada un segundo el valor de
//temperatura de un sensor conectado en A0. A estos valores los debe guardar
// y promediar durante 1 minuto y pasado ese tiempo, enviar el valor medido por puerto
// serie.
//Variables para contadores (Hora - LED - Temperatura)
int ContSegundo = 0;
int ContPulsos= 0;
int CantLect = 0;
//Variables para la hora.
int Segundos = 0;
int Minutos = 0;
int Hora = 0;
//Variables para los dias.
int Dia = 24;
int Mes = 06;
int Year = 2024;
//Variables para los pulsos de interruptor.
int Pulsos =0;
//Variables para las lecturas de temperatura.
int Lecturas;
int Aviso;
float TemperaturaInst;
float TemperaturaMedia;
//Constantes de pines
const int LectorPulsos =2;
const int Termometro = A0;
const int LedRojo = 10;
//Constantes de temperatura.
const float BETA = 3950;
void setup() {
Serial.begin(9600); //Inicio el puerto serie
pinMode(LedRojo, OUTPUT); //Determino el pin LedRojo como salida.
pinMode (LectorPulsos , INPUT_PULLUP); //Determino el pulsador como entrada.
}
void loop() {
//Funcion para convertir a temperatura.
int valores = analogRead(Termometro);
float celsius = 1 / (log(1 / (1023. / valores - 1)) / BETA + 1.0 / 298.15)- 273.15 ;
//Funcion cada un segundo
if (ContSegundo >= 200) {
ContSegundo = 0;
Lecturas = Lecturas + celsius;
TemperaturaInst = celsius;
FuncionCadaSegundo ();
}
//Determino el incremento maximo para los segundos, sumo minutos y tomo lecturas.
if (Segundos >=60){
Segundos = 0 ;
TemperaturaMedia = Lecturas / 60 ;
Lecturas = 0;
CantLect = 0;
Minutos++;
}
//Determino el incremento maximo para los minutos y sumo horas.
if (Minutos >= 60) {
Minutos = 0;
Hora++ ;
}
// //Determino el incremento maximo para las horas y sumo dias.
if (Hora >=24) {
Hora = 0;
Dia++;
}
//Determino funciones de led de acuerdo a la temperatura
if (TemperaturaInst >10 && TemperaturaInst <38) {
FuncionLedBajo ();
}
else {
FuncionLedAlto();
}
//Determino la lectura e impresion de los pulsos.
if (ContPulsos >=20) {
ContPulsos = 0 ;
if (digitalRead(LectorPulsos) != true) {
Pulsos = Pulsos + 1;
}
}
//Sumo un valor a cada contador.
ContSegundo++;
ContPulsos++;
CantLect++;
//Retardo general del bucle.
delay (5);
}
//Declaracion de funciones a llamar desde loop.
//Función a ejecutar cada un segundo
void FuncionCadaSegundo () {
Serial.println ("Es la hora " + String (Hora) + ":" + String (Minutos) + ":" +String (Segundos ++) + " Con fecha " +String (Dia) + "/" + String (Mes) + "/" + String (Year) + " Pulsos = " + String (Pulsos) + " / T° Media = " + String (TemperaturaMedia) + "°" + "/ T° Inst.= " + String (TemperaturaInst) + "°" );
}
//Función intensidad luminica del led según temperatura instantanea.
//Intensidad baja
void FuncionLedBajo () {
analogWrite(LedRojo, 15);
}
//Intensidad alta
void FuncionLedAlto () {
analogWrite(LedRojo, 255);
}