Arduino - if no funciona dentro del for

 
Vista:

if no funciona dentro del for

Publicado por joan (1 intervención) el 24/11/2022 06:26:26
hola una ayuda tengo un ciclo for que me muestra datos en una pantalla lcd, y le puse un ciclo if dentro de este for para que me lea una temperatura y si la temperarura alcanza un punto me va a mostrar esa alerta en pantalla, pero si no alcanza ese punto va a seguir mostrando los datos del principio, y este siclo no me funicona solo me fuciona al princio si ya la temperatua alcanso o supero ese punto y conecto el arduino, pero no en el funcionamiento de muestreo en pantalla de datos y temperatura variable

la cosa esta al final en la funcion Ciclo que tiene adrento la funcion TempC, esta ultima no se me ejecuta,excepto cuando ya la temperatura alcanzo o supero ese valor y se conecta el arduino por primera ves

ya prove poniendo el for y dentro el if y que ninguna de las 2 sea funcion y tampoco funciona jjjj.

#include <Wire.h>
#include <LCD.h>
#include <LiquidCrystal_I2C.h>
#include <math.h>
#include "DHT.h"

#define DHTPIN 12 // Pin donde está conectado el sensor
#define DHTTYPE DHT11 // Descomentar si se usa el DHT 11
DHT dht(DHTPIN, DHTTYPE);
const int SensorPIN = A0;

const byte pinBuzzer=5; //pùerto bocina
byte salida=175;
float t=0;
float valor = 3600000;
int mas = 0;
int aceptar = 0;
float vol=0;
float x=0;
int alarm=0;
int b=0;
int temp=70;
LiquidCrystal_I2C lcd (0x27, 2, 1, 0, 4, 5, 6, 7); // DIR, E, RW, RS, D4, D5, D6, D7
void setup() {
pinMode(2, INPUT);//botones
pinMode(3, INPUT);//botones
pinMode(4, INPUT);//botones
pinMode(8, OUTPUT); //rele
lcd.setBacklightPin(3,POSITIVE);
lcd.setBacklight(HIGH);
lcd.begin(16, 2);
lcd.clear();
dht.begin();
}

void loop()
{
//DHT11
delay(500);
t = dht.readTemperature(); //Leemos la temperatura en grados Celsius

digitalWrite(8, LOW);
mas = digitalRead(2); //cambio de numeros
aceptar = digitalRead(3); //comenzar conteo
alarm = digitalRead(4); //temperatura

//Muestra de temperatura
if(alarm==1)
{
lcd.clear();
lcd.setCursor(2, 0);
lcd.print("Temperatura.");
lcd.setCursor(5, 1);
lcd.print(t);
lcd.setCursor(11, 1);
lcd.print("C");
delay(3000);
lcd.clear();
lcd.setCursor(2, 0);
lcd.print("Temp. Alarm.");
lcd.setCursor(5, 1);
lcd.print(temp);
lcd.setCursor(8, 1);
lcd.print("C");
delay(500);lcd.clear();
}


if (mas == 1)
{valor = valor + 1800000; delay(100);}

//temporalizador
//1
if (aceptar == 1)
{
if(valor == 3600000)
{
Ciclo();
}}
//1.5
if (aceptar == 1)
{
if(valor == 5400000)
{
Ciclo();
}}

//2
if (aceptar == 1)
{
if(valor == 7200000)
{
Ciclo();
}}
//2.5
if (aceptar == 1)
{
if(valor == 9000000)
{
Ciclo();
}}
//3
if (aceptar == 1)
{
if(valor == 10800000)
{
Ciclo();
}}
//3.5
if (aceptar == 1)
{
if(valor == 12600000)
{
Ciclo();
}}
//4
if (aceptar == 1)
{
if(valor == 14400000)
{
Ciclo();
}}
//4.5
if (aceptar == 1)
{
if(valor == 16200000)
{
Ciclo();
}}
//5
if (aceptar == 1)
{
if(valor == 18000000)
{
Ciclo();
}}
//5.5
if (aceptar == 1)
{
if(valor == 19800000)
{
Ciclo();
}}
//6
if (aceptar == 1)
{
if(valor == 21600000)
{
Ciclo();
}}
//6.5
if (aceptar == 1)
{
if(valor == 23400000)
{
Ciclo();
}}
//7
if (aceptar == 1)
{
if(valor == 25200000)
{
Ciclo();
}}

else if (valor > 25200000) //volver a comenzar el conteo
{valor = 3600000; }

if(valor==0)
{ lcd.setCursor(0, 0);
lcd.print(" Carga Completa");
}else if(t>temp){
lcd.setCursor(0, 0);
lcd.print("Muy Caliente");
lcd.setCursor(0, 1);
lcd.print(t);
lcd.setCursor(3, 1);
lcd.print("C");
analogWrite(pinBuzzer,salida);
digitalWrite(8, LOW);
valor=1;
}else{
vol=valor/3600000*7/2.5;
lcd.setCursor(3, 0);
lcd.print(valor/3600000);
lcd.setCursor(8, 0);
lcd.print("Horas");
lcd.setCursor(3, 1);
lcd.print(vol);
lcd.setCursor(9, 1);
lcd.print("Vol");
}
}

void Ciclo()
{
digitalWrite(8, HIGH);
for(float i=valor; i>=0; i=i-1000)
{TempC();
lcd.setCursor(2, 0);
lcd.print(i/60000);
lcd.setCursor(8, 0);
lcd.print("minutos");
delay(1000);
}valor=0;
}
void TempC()
{ if(t>temp)//testeo de temperatura
{
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Muy Caliente");
lcd.setCursor(0, 1);
lcd.print(t);
lcd.setCursor(3, 1);
lcd.print("C");
analogWrite(pinBuzzer,salida);
digitalWrite(8, LOW);
valor=1;
temp=100;
delay(1000000000);
}}
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil

if no funciona dentro del for

Publicado por Akame (3 intervenciones) el 26/05/2023 11:32:23
En la función Ciclo(), estás llamando a la función TempC() dentro de un bucle for que disminuye i en cada iteración. Sin embargo, la función TempC() no cambia el valor de t, que es la variable utilizada en la condición if(t>temp). Esto significa que la condición siempre será la misma en cada iteración del bucle y no se ejecutará como esperas. Para solucionarlo, puedes pasar la variable t como parámetro a la función TempC() y actualizarla dentro de esa función.

En la función TempC(), hay una línea de código que dice delay(1000000000);, lo cual es un tiempo de espera extremadamente largo no se si está hecho a propósito o no.

En el bucle principal loop(), estás usando múltiples bloques if (aceptar == 1) para verificar diferentes valores de valor. En lugar de repetir el mismo código varias veces, puedes simplificarlo utilizando una estructura de control switch-case para manejar cada valor de valor de manera más eficiente.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar