Con todo respeto todos los del foro primera vez que escribo en algun foro pidiendo ayuda,
estoy armando un medidor de temperaturas (Personas) con Una pantalla LiquidCrystal_I2C. 20X4 I2C, un ultasonido (HCSR04), un Reloj(DS3231), Un sensor de temperatura(Adafruit_MLX90614) Y las conxiones (Wire), estoy usando para armar el codigo cada uno de los ejemplos de los sensores . es un proyecto de la escuela de mi hija El prycto trata de medidor de temperatura del cuerpo por el COVID 19 que se acerca y en la pantalla presenta la temperatura alta o baja del sujeto..
Lo de la pantalla y el sensor de temperatura es obvio pero lo del reloj y los ultrasonidos no veo que sentido tiene.
Publica ese codigo que da error para empezar por algo.
<f========================================================================================== * A D V E R T E N C I A!!! * Este Trabajo f como proyrcto de bachillerato Quinto U * ========================================================================================= */ //Librerias #include <Wire.h> //comms #include <Adafruit_MLX90614.h> //Termico #include <LiquidCrystal_I2C.h> //Pantalla #include <DS3231.h> //Reloj #include <HCSR04.h> //Ultrasonico #include <Buzzer.h> //Buzzer //Definicion de Pines #define Echo 10 //Echo del Ultrasonico #define Trig 11 //Trig del Ultrasonico #define LED 9 //Led de salida #define Dt //Inicializar Adafruit_MLX90614 mlx = Adafruit_MLX90614(); //Sensor Termico LiquidCrystal_I2C lcd(0x27, 20,4); // Pantalla LCD DateTime; //Fecha int HCSR04(Echo, Trig); //Ultrasonico //Variables int Espera1=500; //Espera en el loop //Fecha String fDia; String fMes; //Mes en texto String fAno; String fHora; String fMin; String fSeg; String fTime; //Distancia int Distance=40; int Dist= 45; //Distancia del ultrasonico int DistMin= 10; //Distancia minima para detectar al sujeto int Presente= 0; //Si hay alguien frente al Termometro int Espera= 3000; //Tiempo de espera para verificar sujeto unsigned long Tiempo=0; //Tiempo que lleva detectado para Millis int Ahora= 0; //Millis en el momento que se inicia int HCSR04 //Temperatura float TempObj= 33.00; //Temperatura del sujeto float TempMax=37.00; //Temperatura maxima permitida int TpoAlarma=200; //Tiempo de Alarma por alta temperatura void setup() { pinMode(LED OUTPUT); //LED mlx.begin(); //Termico clock.begin(); //Reloj //clock.setDateTime(2022,7,9,20,19,0); //Quitar comentario y ajustar a la hora deseada en primer run. //Sonido inicial tone(12,NOTE_C5,3000); digitalWrite(LED,HIGH); delay(3000); digitalWrite(LED,LOW); //Mensaje inicial lcd.begin(20,4); lcd.noBacklight(); lcd.clear(); lcd.setCursor(0,0); lcd.print(" TERMOMETRO / RELOJ"); lcd.setCursor(0,1); lcd.print("AMB: "); lcd.setCursor(0,2); lcd.print("PER: "); } void loop() { //Distancia long Duration, Distance; digitalWrite(Echo, LOW); delayMicroseconds(2); digitalWrite(Trig, HIGH); delayMicroseconds(10); digitalWrite(Trig, LOW); Duration=pulseIn(Echo, HIGH); Distance=(duration/2)/29.1; Distance=sr04.Distance(); if(Dist>DistMin); //No hay nadie { Presente=0; Tiempo=millis(); } if(Dist<=DistMin && Presente==0) //Llego alguien, tomemos el tiempo { Presente=1; Tiempo=millis(); } if(Presente==1) { if(millis()-Tiempo>Espera) //Se completo el tiempo { Presente=2; } } //Actualizar pantalla lcd.setCursor(12,3); //Temperaturas lcd.setCursor(4,1); lcd.print(mlx.readAmbientTempC()); lcd.setCursor(9,1); lcd.print("c"); TempObj=mlx.readObjectTempC(); switch(Presente) { case 0: //No hay nadie lcd.setCursor(4,2); lcd.print("--.--c"); lcd.setCursor(0,3); lcd.print("BUSCANDO... "); break; case 1: //Llego alguien lcd.setCursor(4,2); lcd.print("--.--c"); lcd.setCursor(0,3); lcd.print("LEYENDO..."); tone(12,NOTE_C5,TpoAlarma); break; case 2: //Se Completo el tiempo lcd.setCursor(4,2); lcd.print(TempObj); lcd.setCursor(9,2); lcd.print("c"); if(TempObj>TempMax) { tone(12,NOTE_G5,TpoAlarma); lcd.setCursor(0,3); lcd.print("TEMP ALTA!!!"); digitalWrite(LED,HIGH); delay(TpoAlarma); digitalWrite(LED, LOW); } else { lcd.setCursor(0,3); lcd.print("NORMAL "); } break; } //Hora y Fecha Dt=clock Dist DateTime(); fDia=String Dt day; if(Dt day<10)fDia="0"+fDia; //Para mantener en dos digitos fAno=String (Dt.year-2022); lcd.setCursor(11,1); lcd.print(fDia+"/"+ fMes()+"/"+fAno); //Uso de la funcion Mes() fHora=String(Dt.hour); if(Dt hour<10)fHora="0"+fHora; //Para mantener en dos digitos fMin=String(Dt. minute); if(Dt minute<10)fMin="0"+fMin; //Para mantener en dos digitos fSeg=String (Dt. second); if(Dt rewind<10)fSeg="0"+fSeg; //Para mantener en dos digitos fTime=fHora+":" + fMin + ":" + fSeg; lcd.setCursor(11,2); lcd.print(fTime); delay(Espera1); } ///////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////// /// F U N C I O N E S //////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////// String month();
como les comente es primera vez que entro a un foro tengo dias practicando y tome este reto
Ese cdigo esta incompleto. y mal posteado, es inposible sacar algo en claro. Postealo entero y bien para ello:
Vas al ide de arduino selecciona todo el codigo y con el boton derecho del raton opcion copiar.
Vuelves aqui.
Edita el primer post
Borra todo el codigo que publicaste y pincha en las etiquetas:
te saldra esto:
Pega en la linea azul tod el codigo copiado del IDE y pica en Reply.
lo he hecho com 20 veces y da falla distintos (errores) JJJJAJAJA
expected initializer before 'float'
luego de pasar este aparece otro
Vale , eso es al compilar OK.
Lo siento, para mi ya es tarde y mañana tengo que madrugar. Buenas noches.
Bien gracias si puedes seguir mañana te lo agradezco
Cómo no está el código completo no puedo aportar a buscar los fallos pero ya que esto es un proyecto de bachillerato según los comentarios querría hacer unos comentarios sobre el código que podrían ayudarte en un futuro a programar mejor si quieres.
Sobre el formato:
Lo primero es indentar el código de forma correcta pues ayuda a la lectura del mismo.
Lo segundo, recordar el estándar en la programación.
Sobre el código:
Tienes lo que llamamos "cascada de variables". Esto es cuando una persona que está aprendiendo o le enseñan incorrectamente el uso de variables mete un listado gigante de variables, todas goblales y de un tipo mayor al de la memoria de almacenamiento necesitada. también y a modo de broma diré que esto se debe a profesores de programación que en realidad son profesores de matemáticas (que esto lo hemos vivido todos).
Suponiendo que en #define estás poniendo valores que obviamente no van a ser modificados, ¿por qué luego tienes globales de tipo int que tampoco cambian? Si algo debe ser una constante que lo sea, y si usas #define donde toca, entonces hazlo en todos los que corresponde o bien usando const.
int Espera1=500;
int Dist= 45;
int DistMin= 10;
Este timer aparte de necesitar un >= en vez de > está mal planteado y luego tenemos otro problema con el timer y es que en tu código usas delay(), microdelays() que son puntos de detención en dicha línea no un control de tiempo, así que esto también dará problemas.
if(Dist<=DistMin && Presente==0) //Llego alguien, tomemos el tiempo
{
Presente=1;
Tiempo=millis();
}
if(Presente==1)
{
if(millis()-Tiempo>Espera) //Se completo el tiempo
{
Presente=2;
}
}
Si tu código ves que repites las mismas líneas una y otra vez, eso es un anticipo claro que lo suyo es meter eso en una función y pasar las partes que cambiar por parámetros.
Vemos un claro ejemplo con esto (que se repite más veces pero no voy a llenar todo el espacio)
case 0: //No hay nadie
lcd.setCursor(4,2);
lcd.print("--.--c");
lcd.setCursor(0,3);
lcd.print("BUSCANDO... ");
break;
case 1: //Llego alguien
lcd.setCursor(4,2);
lcd.print("--.--c");
lcd.setCursor(0,3);
lcd.print("LEYENDO...");
tone(12,NOTE_C5,TpoAlarma);
break;
Muchas gracias por tu aporte voy a corregir
Aunque el código del post#3 se lee bien no esta con etiquetas.
sigue esta guía.
Moderador:
Por favor, lee las Normas del foro y edita tu código/error usando etiquetas de código.
Ve a edición, luego selecciona todo el código que has publicado, lo cortas y click en </>
This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.