Hola que tal? buenas tardes a todos quería comentar un pequeño problema que me trae de cabeza así que cuento la historia desde el principio, estoy liado con un proyecto para ponerle al coche unos sensores uno que mida la temperatura del anticongelante y otro que mida la presión d aceite que previamente e buscado y personalizado a mi gusto, los dos funcionan correctamente, y me dije, y si combino los dos skect para poder leer las mediciones en un solo LCD y así ahorrar espacio, e combinado los dos y perfecto compila carga, y escinde como se puede ver en la pantalla de abajo el problema viene cuando pongo el pin de señal del sensor DS18B20 en ese momento se queda la plantalla en blanco es decir desaparecen todos los caracteres.
Añado que es un sensor de presión analógico, estoy usando un Arduino Nano, y el sensor de temperatura es del tipo DS18B20 el pin del sensor de temperatura es D10 y el del sensor de presión A0 asi que no debería a ver conflicto e revisado las posiciones de os caracteres y todo correcto, asi que mi saber no da para mas, dejo el skech a ver si alguien encuentra el error.
Otro dato a añadir por si sirve de algo es que el skech original estaba pensado para una pantalla de 20x4 LCD y le hice los cambios pertinentes para que funcionara en una pantalla 16x2 LCD pero dudo que venga de hay el problema.
Creo que son todos los datos que puedo aportar a parte del skech que dejare abajo. Muchas gracias de antemano si e cometido algun eror a la hora de postear pido disculpas de antemano, Gracias
#include <Wire.h>
#include <LiquidCrystal_I2C.h> // libreria para que funcione el display 20X4
LiquidCrystal_I2C lcd (0x27, 16, 2); // encuentran conectados RS, E, D4, D5, D6, D7
#include <OneWire.h>
OneWire ds(10);
int ibut = 10 ; // ibut PIN10 de entrada para el control del botón
int tiempo = 1000 ; // Tiempo para dar tiempo a retirar el dedo del botón hasta hacer otra lectura
int estadoboton = 0 ; // Variable para guardar el estado del boton LOW (bajo = 0) o HIGH (alto = 1)
int vista = 1 ; // Primera vez controla lo que se hace únicamente en el primer bucle, luego se le cambia de valor
int SENSOR; // variable almacena valor leido de entrada analogica A0
float PRESION; // valor de presion en en decimales
float SUMA; // valor de la suma de las 5 lecturas de presion
void setup(void) { // encender el LDC 16x2
Serial.begin(9600);
Wire.begin();
lcd.begin (16,2) ;
lcd.backlight(); // terminar con luz de fondo encendida
lcd.clear();
lcd.setCursor(8, 1);
lcd.print("C");
lcd.setCursor(9,1);
lcd.print((char)223);
lcd.setCursor(0, 1);
lcd.print("ACEITE");
lcd.setCursor(10, 1);
lcd.print(":");
pinMode(ibut, INPUT); // En el PIN 10 entra la medida del circuito del buton abrimos como lNPUT
delayMicroseconds(50);
}
void loop() {
switch (vista) {
case 1:
SUMA = 0; // valor inicial de SUMA en cero
for (int i=0; i < 5; i++){ // bucle que repite 5 veces
SENSOR = analogRead(A0); // lectura de entrada analogica A0
PRESION = map(SENSOR, 102, 921, 0, 20.7); // Funcion map () entre 0.5 a 4.5V con 0 a 20.7 psi (lectura de entrada analogica A0)
SUMA = PRESION + SUMA; // suma de cada lectura de presion
delay(200); // demora de medio seg. entre lecturas
}
lcd.setCursor(7, 0); // cursor en primer fila y primer columna
lcd.print("BAR: "); // escribe Pres:
lcd.print(SUMA/5.0, 1); // escribe valor promedio de 5 lecturas con un decimal
lcd.setCursor(0, 0); // cursor en primer fila y primer columna
lcd.print("ACEITE"); // imprime psi
if ( digitalRead(ibut) == HIGH ) {
lcd.clear();
vista = 1;
delay(200);
}
break;
}
byte i;
byte present = 0;
byte type_s;
byte data[12];
byte addr[8];
float celsius, fahrenheit;
if(!ds.search(addr)){
ds.reset_search();
delay(250);
return;
}
if(OneWire::crc8(addr, 7) != addr[7]) {
return;
}
switch(addr[0]){
case 0x10:
type_s = 1;
break;
case 0x28:
type_s = 0;
break;
case 0x22:
type_s = 0;
break;
default:
return;
}
ds.reset();
ds.select(addr);
ds.write(0x44, 1);
delay(1000);
present = ds.reset();
ds.select(addr);
ds.write(0xBE);
for( i = 0; i < 9; i++){
data[i] = ds.read();
}
int16_t raw = (data[1] << 8) | data[0];
if(type_s){
raw = raw << 3;
if(data[7] == 0x10) {
raw = (raw & 0xFFF0) + 12 - data[6];
}
}else{
byte cfg = (data[4] & 0x60);
if (cfg == 0x00) raw = raw & ~7;
else if (cfg == 0x20) raw = raw & ~3;
else if (cfg == 0x40) raw = raw & ~1;
}
celsius = (float)raw / 16.0;
Serial.println(celsius,1);
lcd.setCursor(12, 1);
lcd.print(celsius,1);
}