Ethernet DS18B20

bodyz
Offline
Зарегистрирован: 12.10.2012

Добрый день. Собрал следующий код для работы с датчиком DS18B20 по сети.

  #include <OneWire.h>
  #include <DallasTemperature.h>
  #include <SPI.h>
  #include <Ethernet.h>
  #include <String.h>
  
  byte mac[] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
  IPAddress ip(10,10,12,200);//(192,168,1,10);
  EthernetServer server(80);
    
  int ledPin = 13;
  String readString = String(30); //string for fetching data from address
  boolean LEDON = false; //изначальный статус светодиода - выключен
  
   // Data wire is plugged into port 2 on the Arduino
  #define ONE_WIRE_BUS 10//2
  // Setup a oneWire instance to communicate with any OneWire devices (not just Maxim/Dallas temperature ICs)
  OneWire oneWire(ONE_WIRE_BUS);
// Pass our oneWire reference to Dallas Temperature. 
  DallasTemperature sensors(&oneWire);
// arrays to hold device address
  DeviceAddress insideThermometer;
  
  
  void setup(void) 
  {
    Serial.begin(9600);
    
    Ethernet.begin(mac, ip);
    server.begin();
    
     sensors.begin(); 
    
    pinMode(ledPin, OUTPUT);
    digitalWrite(ledPin, LOW);

  // report parasite power requirements
  Serial.print("Parasite power is: "); 
  if (sensors.isParasitePowerMode()) 
  Serial.println("ON");
  else 
  Serial.println("OFF");
 
  if (!sensors.getAddress(insideThermometer, 0))  {
  Serial.println("Unable to find address for Device 0");  
  }
  else{sensors.setResolution(insideThermometer, 9);
  }
  }
  
  void loop(void) 
  {
    delay(100);
    Serial.println("Enterred in LOOP"); 
    EthernetClient client = server.available();
    Serial.println("Enterred in 1");
    if (client) 
    {
       Serial.println("Enterred in  cliecnt");
      while (client.connected()) 
      {
        if (client.available()) 
        {
          char c = client.read();
          //read char by char HTTP request
          if (readString.length() < 30)
          {
            //store characters to string
            readString.concat(c);
          }
          Serial.println (readString);
          //if HTTP request has ended
          if (c == '\n') 
          {
            //dirty skip of "GET /favicon.ico HTTP/1.1"
            if (readString.indexOf("?") <0)
            {
              //skip everything
            }
            else
            {
              if(readString.indexOf("Level=1") >=0) {
	           //Включаем светодиод
	            digitalWrite(ledPin, HIGH); // set the LED on
	           LEDON = true;
	          }else if(readString.indexOf("Level=0") >=0){
	            //Выключаем светодиод
	            digitalWrite(ledPin, LOW); // set the LED OFF
	            LEDON = false;
	          }
            }
            
//            sensors.requestTemperatures(); // Send the command to get temperatures
//    float tempC = sensors.getTempC(insideThermometer);
    
            
            client.println ("<!DOCTYPE HTML>");
            client.println ("<html>");
            client.println ("<head> ");
            client.println ("<meta http-equiv= refresh  content=5;>");
            client.println ("<meta http-equiv='Content-Type' content='text/html; charset=utf-8' /> ");
            client.println("</head> ");
            client.println ("<body>");
            client.println ("Влажность: ");
            client.println (" = вологість");
            client.println (" %");
            client.println ("<br> ");
            client.println ("Температура: ");
//            client.println (tempC); //(" = температура");
            client.println (" *C");
            client.println ("<br>");   client.println ("<br>");   client.println ("<br>");
            //client.println(readString);
            if (LEDON)
            {
              client.println("<form method=get name=LED><input type=radio name=Level value=1 CHECKED>ON<input type=radio name=Level value=0>OFF<input type=submit value=OK></form>");
              client.println("<font size=’5′>LED-статус: ");
              client.println("<font size=’5′>ON");
            }
            else
            {
              client.println("<form method=get name=LED><input type=radio name=Level value=1>ON<input type=radio name=Level value=0 CHECKED>OFF<input type=submit value=OK></form>");
              client.println("<font size=’5′>LED-статус: ");
              client.println("<font size=’5′>OFF");
            }
              client.println("<hr />");
              client.println("</body></html>");
              //clearing string for next read
              readString="";
              client.stop();
            }
          }
        }
      }
    }

В таком виде програма доходит до 56 строки, а дальше не идет. По видимому не создается клиент EthernetClient client. Если закоментировать все что касается инициализации датчика DS18B20, никаких трудностей в работе не возникает.

Помогите пожалуйста  разобраться. Зашел в тупик

maksim
Offline
Зарегистрирован: 12.02.2012

Uno внимательно читаем: 

SPI: 10 (SS), 11 (MOSI), 12 (MISO), 13 (SCK). Посредством данных выводов осуществляется связь SPI, для чего используется библиотека SPI.

На каком выводе у вас датчик? 

bodyz
Offline
Зарегистрирован: 12.10.2012

Датчик заводил на 10 порт. В этом была ошибка. Поменял на порт №2 и все заработало. Спасибо за помощь