Ethernet DS18B20
- Войдите на сайт для отправки комментариев
Ср, 03/07/2013 - 13:11
Добрый день. Собрал следующий код для работы с датчиком 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, никаких трудностей в работе не возникает.
Помогите пожалуйста разобраться. Зашел в тупик
Uno внимательно читаем:
SPI: 10 (SS), 11 (MOSI), 12 (MISO), 13 (SCK). Посредством данных выводов осуществляется связь SPI, для чего используется библиотека SPI.
На каком выводе у вас датчик?
Датчик заводил на 10 порт. В этом была ошибка. Поменял на порт №2 и все заработало. Спасибо за помощь