DallasTemperature и EthernetServer
- Войдите на сайт для отправки комментариев
Втр, 21/01/2014 - 15:50
В общем по отдельности 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() то отрабатывает нормально. Что делать?
Mega2560
SPI
Чем был обусловлен выбор 53 вывода для подключения датчика?
Возле него есть земля, а 5в получаю с 51, провода вобщем короткие. Спасибо за намёк!))
Изернет шилд подключается к дуине по интерфейсу SPI, из описания Mega2560:
SPI: 50 (MISO), 51 (MOSI), 52 (SCK), 53 (SS). Посредством данных выводов осуществляется связь SPI, например, используя библиотеку SPI.
В общем перепаял провода подлинее, убрали их на другие пины и всё полетело! Спасибо, я 2 дня голову ломал!