Ethernet shield + температурный 18В20
- Войдите на сайт для отправки комментариев
Пт, 06/09/2013 - 09:13
Ethernet shield + температурный датчик DALLAS 18В20.
Через сериал порт температуру гонит нормально. Отдельно сервер тоже показывает какую-нить "ПРИВЕТ!", а вот вместе никак. Браузер крутится, крутится и всё - ноль.
Может опрашиваю как-то неправильно?
Простейший код, но не могу найти. Может быть конфликт пинов? Может не на 10 нужно повесить датчик? Хотя какая разница.
#include <SPI.h> #include <Ethernet.h> #include <OneWire.h> #include <DallasTemperature.h> // Введите MAC-адрес и IP-адрес вашего контроллера // IP-адрес должен соответствовать вашей локальной сети byte mac[] = { 0x00, 0xAA, 0xBB, 0xCC, 0xDA, 0x02 }; IPAddress ip(192,168,0,222); //<<< IP-АДРЕС ВВОДИТЬ СЮДА!!! // Инициализация библиотеки Ethernet server // с тем IP-адресом и портом который мы хотим использовать // (порт 80 по умолчанию используется для HTTP): EthernetServer server(80); // Data-нога датчика (или датчиков) к 10 пину ардуины #define ONE_WIRE_BUS 10 // настройка oneWire для работы с любыми другими OneWire девайсами (не только Maxim/Dallas датчиками температуры) OneWire oneWire(ONE_WIRE_BUS); // подключаем Dallas Temperature. DallasTemperature sensors(&oneWire); void setup() { // запускаем Ethernet соединение и сервер: Ethernet.begin(mac, ip); server.begin(); sensors.begin(); } void loop() { // ожидание подключения клиентов EthernetClient client = server.available(); if (client) { // HTTP запрос заканчивается пустой строкой boolean currentLineIsBlank = true; while (client.connected()) { if (client.available()) { char c = client.read(); // если вы дошли до конца строки (был получен символ конца строки) // и следующая строка пустая, значит http запрос закончился, // можно отправлять ответ if (c == '\n' && currentLineIsBlank) { // отправляем стандартный HTTP-заголовок "Успешный запрос" client.println("HTTP/1.1 200 OK"); client.println("Content-Type: text/html"); client.println(); //sensors.begin(); sensors.requestTemperatures(); // запрос показаний температуры client.println(sensors.getTempCByIndex(0)); //client.println(oneWire.read()); break; } if (c == '\n') { // начало новой строки currentLineIsBlank = true; } else if (c != '\r') { // получили символ в текущей строке currentLineIsBlank = false; } } } // Небольшая задержка, чтобы дать время // браузеру для получения данных delay(1); // закрываем соединение client.stop(); } }
И что ещё странно. Вот такой скетч - просто проброс температуры в сериал порт - без включения ETHERNET работает ТОЛЬКО на 10 пине. 11, 12, 13 выдают на сериал порт либо "0" либо "-127". Вот скетч:
И что ещё странно. Вот такой скетч - просто проброс температуры в сериал порт - без включения ETHERNET работает ТОЛЬКО на 10 пине. 11, 12, 13 выдают на сериал порт либо "0" либо "-127".
Может не на 10 нужно повесить датчик? Хотя какая разница.
Даааааааа.........
Ну если 10 пин всего лишь SS output для SPI, то отальные (11, 12, 13)....
Как-бы сказать поточнее.... ими как раз вот эти библиотеки управляют....
И тут совсем непонятно кто кого победит: Даллас или Езернет.....
Попробуйте их отключить, должно работать.
Повесил на 2-й пин - заменил библиотеки - нашёл решение в инете, когда ругалось на отсутствие "WConstants.h" (заменил на "Arduino.h" в тексте библиотеки) - и ЗАРАБОТАЛО!
Но...Где нормальные, рабочие библиотеки скачать?
Спасибо.