Arduino + varios DS1990A con varias redes

Pues llevo dandole al tema como una semana pero no lo dejo fino del todo, he encontrado un programa de ejemplo que usa 2 redes para sensores de temperatura 1 wire (no es exacto a mi proyecto ya que los Ds1990 solo son para ID para acceso) pero algo es algo, el codigo es:

// Data wire is plugged into ports 10, 12 on the Arduino
#define ONE_WIRE_BUS_A 10
#define ONE_WIRE_BUS_B 12
#define NET_A 0
#define NET_B 1

// Setup a oneWire instance to communicate with OneWire devices
OneWire oneWireA(ONE_WIRE_BUS_A);
OneWire oneWireB(ONE_WIRE_BUS_B);

// Pass our oneWire reference to Dallas Temperature.
DallasTemperature sensorsA(&oneWireA);
DallasTemperature sensorsB(&oneWireB);

int numberOfDevicesA; // Number of temperature devices found
int numberOfDevicesB; // Number of temperature devices found
int currentNetwork=0; // default to NET_A

// snip ###################### other code/variables //
void setup()
{
// Start up the library
sensorsA.begin();
sensorsB.begin();

// Grab a count of devices on the wire
numberOfDevicesA = sensorsA.getDeviceCount();
numberOfDevicesB = sensorsB.getDeviceCount();

// locate devices on the bus
Serial.print("Locating devices...");

Serial.print("Net_A: ");
Serial.println(numberOfDevicesA, DEC);

Serial.print("Net_B: ");
Serial.println(numberOfDevicesB, DEC);

// your code continues below...
} // end of 'setup'

A ver si alguien me puede decir mas o menos como adaptar el programa... Se que los Ibuttons se pueden poner en paralelo a la misma entrada pero me hace falta distinguir los disposivos asi que no me queda otra que ponerlo en 2 entradas independientes.... Un saludo

Por si a alguien le interesa el codigo... Es el siguiente:

#include <OneWire.h>

#define ONE_WIRE_BUS_A 12
#define ONE_WIRE_BUS_B 11

#define NET_A 0
#define NET_B 1

// Setup a oneWire instance to communicate with OneWire devices
OneWire oneWireA(ONE_WIRE_BUS_A);
OneWire oneWireB(ONE_WIRE_BUS_B);

String Ibutton;
String Ibutton2;
String IbuttonA;
String IbuttonB;

void setup(void) {
Serial.begin(9600);
}

void loop(void) {

Ibutton="";
bus1();
Ibutton2="";
bus2();

Serial.println(IbuttonA + "," + IbuttonB);
delay(500);
}

void bus1(){
byte i;
byte present = 0;
byte data[24];
byte addr[16];

IbuttonA="";

oneWireA.reset_search();

if ( !oneWireA.search(addr)) {
oneWireA.reset_search();
delay(50);
return;
}

for( i = 5; i > 0; i--) {

String stringOne = String(addr*, HEX);*

  • if (stringOne.length() ==1) {*

  • stringOne="0" + stringOne;*

  • }*

  • Ibutton=Ibutton+stringOne; *

  • }*

  • IbuttonA="00"+Ibutton;*

  • oneWireA.reset();*
    }
    void bus2(){

  • //Serial.println("ENTRO I2"); *

  • byte i;*

  • byte present = 0;*

  • byte data[24];*

  • byte addr[16];*

  • IbuttonB="";*

  • if ( !oneWireB.search(addr)) {*

  • oneWireB.reset_search();*

  • delay(50);*

  • return;*

  • }*

  • for( i = 5; i > 0; i--) {*
    //Serial.println("DENTRO SUB I2"); *
    _ String stringOne = String(addr
    , HEX);*_

* if (stringOne.length() ==1) {*
* stringOne="0" + stringOne;*
* }*

* Ibutton2=Ibutton2+stringOne; *
* }*

* IbuttonB="00"+Ibutton2;*
* oneWireB.reset();*
* //Serial.println("SALGO I2"); *

}
Sigo teniendo un pequeño problema con oneWireB(red 2) esta siempre me alterna entre el valor correcto del ibutton y null ... A ver si alguien me hecha un cable :slight_smile: ... Un saludo

¿Tienes el código para un solo lector?

Estoy intentando programar uno de estos aparatos y no hay forma de conseguirlo.

He copiado y pegado el código que pones pero no funciona.

Gracias.

Solucionado.

Gracias de todos modos.