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 и все заработало. Спасибо за помощь