DallasTemperature и EthernetServer

OrmaJever
Offline
Зарегистрирован: 21.01.2014

В общем по отдельности DallasTemperature и EthernetServer работают отлично, и делают что надо, но если их объеденить, то EthernetServer перестаёт нормально работать


#include <SPI.h>
#include <Ethernet.h>
#include <string.h>
#include <OneWire.h>
#include <DallasTemperature.h>

DallasTemperature sensors(new OneWire(53));

EthernetServer server(80);

void setup() 
{
  byte mac[] = {0x07, 0xF3, 0x08, 0x45, 0x2C, 0xB5};
  byte ip[] = {192, 168, 1, 11};
  Serial.begin(9600);
  sensors.begin();
  pinMode(51, OUTPUT);
  pinMode(48, OUTPUT);
  digitalWrite(51, HIGH);
  digitalWrite(48, HIGH);
  Ethernet.begin(mac, ip);
}

void loop()
{
  EthernetClient client = server.available();
  if (client) {
    String response;
    while (client.connected()) {
      if (!client.available()) continue;
      char c;
      do {
        response += c = client.read();
      } while (c != -1);
      String get = response.substring(0, response.indexOf("\r\n"));
      get.replace("GET ", "");
      get.replace(" HTTP/1.1", "");
      
      client.println("HTTP/1.1 200 OK");
      client.println("Content-Type: text/html\r\n");
      sensors.requestTemperatures();
      float temp1 = sensors.getTempCByIndex(0);
      float temp2 = sensors.getTempCByIndex(1);
      if(get == "/") {
        Serial.println(1);
        client.print("<!doctype html><html><head><meta charset='utf-8'></head><body>Температура на улице <b>");
        Serial.println(2);
        client.print(temp1);
        client.print("</b> °C<br>Температура в квартире <b>");
        client.print(temp2);
        client.print("</b> °C</body></html>");    
      } else if(get == "/cron") {
        client.print("[");
        client.print(temp1, DEC);
        client.print(",");
        client.print(temp2, DEC);
        client.print("]");
      } else {
        client.print("404 Not Found");
      }
      delay(100);
      client.stop();
    }
  }
}

Проблема в методе client.print(), после вызова sensors.requestTemperatures() или sensors.getTempCByIndex() выше указаный метод просто перестаёт работать и браузер просто ждёт, если же закоментировать sensors.requestTemperatures() и sensors.getTempCByIndex() то отрабатывает нормально. Что делать?

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

Mega2560 

SPI

Чем был обусловлен выбор 53 вывода для подключения датчика?

OrmaJever
Offline
Зарегистрирован: 21.01.2014

Возле него есть земля, а 5в получаю с 51, провода вобщем короткие. Спасибо за намёк!))

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

Изернет шилд подключается к дуине по интерфейсу SPI, из описания Mega2560:

SPI: 50 (MISO), 51 (MOSI), 52 (SCK), 53 (SS). Посредством данных выводов осуществляется связь SPI, например, используя библиотеку SPI

OrmaJever
Offline
Зарегистрирован: 21.01.2014

В общем перепаял провода подлинее, убрали их на другие пины и всё полетело! Спасибо, я 2 дня голову ломал!