No lee el cuarto DS1820

Hola tengo 2 problemas con el siguiente código, mi mayor problema es que no lee el cuarto termometro que esta conectado al pin 13.

Estoy utilizando un arduino pro mini alguna idea de por que puede ser:

#include <OneWire.h>  
#include <DallasTemperature.h> //Lib. Termometro de Dallas DS1820.  
  
//Definimos donde estan conectados los distintos sensores
int T1 = 10; 
int T2 = 11;
int T3 = 12;  
int T4 = 13;  
    //Pin de entrada donde conectamos el sensor  
OneWire ds1(T1); 
OneWire ds2(T2); 
OneWire ds3(T3); 
OneWire ds4(T4); 

DallasTemperature ST1(&ds1);  
DallasTemperature ST2(&ds2); 
DallasTemperature ST3(&ds3); 
DallasTemperature ST4(&ds4); 

float TemperaturaA;  
float TemperaturaB;
float TemperaturaC;
float TemperaturaD;
  
void setup(){  
  Serial.begin(9600);  
  // Buscamos el sensor,  
  ST1.begin();
  ST2.begin();
  ST3.begin();
  ST4.begin();
  
}  
  
void loop(){  
  ST1.requestTemperatures();
  ST2.requestTemperatures();  
  ST3.requestTemperatures();  
  ST4.requestTemperatures();  
  
  TemperaturaA = ST1.getTempCByIndex(0);  
  Serial.print ("Sensor 1: ");  
  Serial.print (TemperaturaA);  
  Serial.println (" C");  
  
    TemperaturaB = ST2.getTempCByIndex(0); 
   Serial.print ("Sensor 2: ");   
  Serial.print (TemperaturaB);  
  Serial.println (" C");
  
    TemperaturaC = ST3.getTempCByIndex(0);  
    Serial.print ("Sensor 3: ");  
  Serial.print (TemperaturaC);  
  Serial.println (" C");
  
    TemperaturaD = ST4.getTempCByIndex(0);  
    Serial.print ("Sensor 4: ");  
  Serial.print (TemperaturaD);  
  Serial.println (" C");
  
  Serial.println ("");  
  Serial.println ("-------------------------------");
  Serial.println ("");  
  
  delay (1000);  
}

Y en otro pin funciona?

Como las tienes conectadas? Esquema por favor. Lo tendrías que haber posteado junto con tu código.

EDITO: Has cometido una infracción a las normas del foro. Si ya tienes un post abierto sobre DS18B20 no sigas abriendo mas hilos. Por mas que creas que sean temas diferentes.

Consulta todo en este mismo.

surbyte: Como las tienes conectadas? Esquema por favor. Lo tendrías que haber posteado junto con tu código.

EDITO: Has cometido una infracción a las normas del foro. Si ya tienes un post abierto sobre DS18B20 no sigas abriendo mas hilos. Por mas que creas que sean temas diferentes.

Consulta todo en este mismo.

Hola, perdon, pero me leei las normas hace años y no queria mezclar temas.

El esquema de conexionado es este: |500x207

Hector_A:

Y en otro pin funciona?

Si, si conecto el termometro del pin 13 en el pin 12 le la temperatura correctamente.

Gracias.

No sé si este arduino lleva también led en el pin 13, pero tal vez podría ser eso. No obstante, ¿Sabes que puedes conectar todos los dallas en el mismo cable? Me parece un poco malgastar los pines tal y como lo tienes actualmente.

noter: No sé si este arduino lleva también led en el pin 13, pero tal vez podría ser eso. No obstante, ¿Sabes que puedes conectar todos los dallas en el mismo cable? Me parece un poco malgastar los pines tal y como lo tienes actualmente.

Noter gracias, era por el pin 13 en este hilo pone el por que: http://forum.arduino.cc/index.php?topic=93491.0

Si ya se que se pueden colocar todos en una misma linea, creo que hasta 9, pero eso implica que luego hay que andar buscando cual es cual, y quiero hacer un diseño que sea fácil de ensamblar, y utilizar. Asi se que el termometro que esta conectado al grupo de bornas B1 es el sensor de temperatura ST1 y asi con el resto.

Hola de nuevo, tal y como comente en el post que se borro, ahora me gustaría simplificar el código, reducir lineas y dejarlo preparado para poder aumentar o reducir el número de sensores de la forma más cómoda posible.

Con las salidas hago algo así:

#define NumeroSalidas 6 //Cuantas salidas o numero de reles tenemos.
int PinsSalidas[] = {2, 3, 4, 5, 6, 7, 8, 9}; //Los pins a los que estan conectados los reles o salidas.

void setup() {
  
  delay(1000);
  Serial.begin(9600);
  
  //Mediante este bucle inicializamos todas las salidas.
  for(int p=0; p < NumeroSalidas; p++){
    pinMode(PinsSalidas[p], OUTPUT);
  } 
}
//Esta funcion activa la salida que le pasemos
void ActivarSalida (int Sali){
  digitalWrite(PinsSalidas[Sali], HIGH);
  Salidas[Sali] = 1;
}

Alguna sugerencia?

Mi código actual es este:

#include <OneWire.h>  
#include <DallasTemperature.h> //Lib. Termometro de Dallas DS1820.  
  
//Definimos donde estan conectados los distintos sensores
int T1 = 10; 
int T2 = 11;
int T3 = 12;  
int T4 = 14;  
    //Pin de entrada donde conectamos el sensor  
OneWire ds1(T1); 
OneWire ds2(T2); 
OneWire ds3(T3); 
OneWire ds4(T4); 

DallasTemperature ST1(&ds1);  
DallasTemperature ST2(&ds2); 
DallasTemperature ST3(&ds3); 
DallasTemperature ST4(&ds4); 

  
void setup(){  
  Serial.begin(9600);  
  // Buscamos el sensor,  
  ST1.begin();
  ST2.begin();
  ST3.begin();
  ST4.begin();
  
}  
  
void loop(){  
  VerST (1);
  VerST (2);
  VerST (3);
  VerST (4);
} 

void VerST (int SensorST){
  float TempST; 
  
  ST1.requestTemperatures();
  ST2.requestTemperatures();  
  ST3.requestTemperatures();  
  ST4.requestTemperatures();
  
  
  switch (SensorST) {
  case 1: TempST = ST1.getTempCByIndex(0); break;
  case 2: TempST = ST2.getTempCByIndex(0); break;
  case 3: TempST = ST3.getTempCByIndex(0); break;
  case 4: TempST = ST4.getTempCByIndex(0); break;
  default: 
    // statements
  break;
  }
  
  
  Serial.print ("Temp solicitada: ");  
  Serial.print (TempST);  
  Serial.println (" C"); 
}

Podrías por ejemplo utilizar una estructura, o mejor aún, una clase.
Prueba a ver si funciona este código (está sin probar, pero supongo que no tengas que corregir demasiados errores).

#include "OneWire.h"
#include "DallasTemperature.h" //Lib. Termometro de Dallas DS1820. 
 
class Termo {
public:
	Termo(int nPin):pin(nPin), ds(OneWire(pin)), st(DallasTemperature(&ds)){st.begin();};
	float lectura() {
		st.requestTemperatures();
		st.getTempCByIndex(0);
	}
private:
	int pin;
	OneWire ds;
	DallasTemperature st;
};

//Definimos donde estan conectados los distintos sensores
Termo termo[] = {
	Termo(10),
	Termo(11),
	Termo(12),
	Termo(14)
};
 
void setup(){ 
  Serial.begin(9600); 
} 
 
void loop(){ 
	for (int i=0; i<4; i++) {
		Serial.print ("Temp "); 
		Serial.print (i);
		Serial.print(": ") ;
		Serial.print(termo[i].lectura());
		Serial.println (" C");	
	}
}

Noter gracias por el código, lamentablemente no lee los datos, de los DS. No sabia que en arduino se podían hacer clases, en pascal hace años las solía utilizar clases o algo parecido, pero como han pasado muchos años desde entonces, me he tenido que reciclar un poco.

Non entiendo la siguiente parte del código:

Termo(int nPin):pin(nPin), ds(OneWire(pin)), st(DallasTemperature(&ds)){st.begin();};

Muchas gracias, un saludo.

Hola. Lo que hay tras los dos puntos, hasta las llaves, son asignaciones a las propiedades de la clase. Ese código es equivalente a declarar el constructor así:

Termo(int nPin){
    pin=nPin;
    ds=Onewire(pin);
    st=DallasTemperature(&ds);
    st.begin();
}