термостат на ардуино и инет шилде
- Войдите на сайт для отправки комментариев
Ср, 10/09/2014 - 03:49
Добрый день есть вопрос стобрал ког но на выполняет действие автоматикого регулирования температуры.
подскажите где я ошибся.
#include <SPI.h> #include <Ethernet.h> #include <OneWire.h> #include <OneWireTempSensor.h> // Ethernet Configuration byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; IPAddress ip(192,168,1,109); // Used default port for HTTP EthernetServer server(80); byte wirePin = 8; OneWire ds(wirePin); byte addr[8]; byte ledPin = 13; boolean isLedOn = false; unsigned long lastUpdate = 0; float temperature = -100.0; OneWireTempSensor sensors(8); int numdevs; int value; int temp; int ten = 10; int ledPin2 = 13; int buttonPin = 7; int buttonState = 0; byte newChar[8] = { B11000, B11000, B00110, B01001, B01000, B01001, B00110, B00000 }; void setup(void) { { numdevs = sensors.getDevices(); pinMode(ten, OUTPUT); pinMode(ledPin, OUTPUT); Ethernet.begin(mac,ip); server.begin(); connectToSensor(); } } void loop(void) { value = (int) sensors.getTempC(0); if (value != 85) updateTemperature(); EthernetClient client = server.available(); if(client){ String request; boolean currentLineIsBlank = true; boolean requestLineReceived = false; while(client.connected()){ if (client.available()) { char c = client.read(); if(c == '\n' && currentLineIsBlank) { // substract path from a request line request = request.substring( request.indexOf(' ') + 1, request.lastIndexOf(' ')); if(request=="/"){ successHeader(client); generatePage(client); } else if(request=="/switch-on"){ digitalWrite(ledPin, HIGH); isLedOn = true; redirectHeader(client, "/"); } else if(request=="/switch-off"){ digitalWrite(ledPin, LOW); isLedOn = false; redirectHeader(client, "/"); } break; } if (c == '\n') { currentLineIsBlank = true; if(!requestLineReceived){ requestLineReceived = true; } } else if (c != '\r') { if(!requestLineReceived) { request += c; } currentLineIsBlank = false; } } } delay(1); client.stop(); } } void successHeader(EthernetClient client){ client.println("HTTP/1.1 200 OK"); client.println("Content-Type: text/html"); client.println("Connnection: close"); client.println(); } void redirectHeader(EthernetClient client, String path){ client.println("HTTP/1.1 302 Moved Temporarily"); client.println("Content-Type: text/html"); client.println("Location: " + path); client.println("Connnection: keep-alive"); client.println(); } void generatePage(EthernetClient client){ client.println("<!DOCTYPE HTML>"); client.println("<html>"); client.println("<head>"); client.println(" <title>Server</title>"); client.println("</head>"); client.println("<body>"); String ledStatus = isLedOn ? "ON" : "OFF"; client.println(" <h1>Led is " + ledStatus + "</h1>"); if(temperature != -100.0){ client.println(" <h1>Temperature is " + floatToString(temperature, 100) + "</h1>"); } client.println(" <a href=\"/switch-on\">Switch ON</a>"); client.println(" <br />"); client.println(" <a href=\"/switch-off\">Switch OFF</a>"); client.println("</body>"); client.println("</html>"); } String floatToString(float value, byte precision){ int intVal = int(value); unsigned int frac; if(intVal >= 0){ frac = (value - intVal) * precision; } else { frac = (intVal - value) * precision; } return String(intVal) + "." + String(frac); } void updateTemperature(){ unsigned long time = millis(); if((time - lastUpdate) > 5000 || lastUpdate == -100.0){ lastUpdate = time; temperature = getTemperature(); } } float getTemperature() { ds.reset(); ds.select(addr); ds.write(0x44); delay(750); ds.reset(); ds.select(addr); ds.write(0xBE); byte data[9], i; for ( i = 0; i < 9; i++) { data[i] = ds.read(); } if (OneWire::crc8(data, 8) != data[8]) { return temperature; } unsigned int raw = (data[1] << 8) | data[0]; raw = raw << 3; if (data[7] == 0x10) { raw = (raw & 0xFFF0) + 12 - data[6]; } float celsius; celsius = (float)raw / 16.0; return celsius; } void connectToSensor(){ if ( !ds.search(addr) || OneWire::crc8(addr, 7) != addr[7] || addr[0]!=0x10) { ds.reset_search(); delay(250); connectToSensor(); } if (value < 10) { temp = value/10; } else { temp = value; } if (temp>=23) { digitalWrite(ten, HIGH); // включает светодиод } if (temp<=24) { digitalWrite(ten, LOW); } if (buttonState == HIGH) { digitalWrite(ledPin2, HIGH); } else // выключаем светодиод digitalWrite(ten, LOW); }
Добрый день есть вопрос стобрал ког но на выполняет действие автоматикого регулирования температуры.
подскажите где я ошибся.
Я вообще не понял чего ты написал.
так нобелевские варианты, работающие конечно бесплатно, быстро опеределили что у него не так с кодом, а потом еще и решение предложили
автор. преставь что ты привез в сервис машину и сказал плохо работает и ушел. а что именно конечно нет. те сутками ее проверяли но не нашли проблемы. а оказалось зеркало хреново отрегулировано. ну не бред ли
jeka_tm,
Вот не повериш занимаюсь ремонтом автомобилей а в частночти автоэлекткрикой и диагностикой иногда и день можно потерять и не найти причину и за это денег не беру и не намекаю, Форум для этого и существует что бы разобрать причину, а если заработать хочешь то это надо на отдельной ветке " помогаю за деньги" и "Стебусь над тем кто не может разобрать причину" А советы и порой легкий ремонт делаю людям за спасибо и не жалуюсь за то меня в Перми за полгода узнали столько народу что у меня стоят в очереди на 3 недели в перед!!!
И беру любые случаи которые автоэлектрики с гонором и вые....нами как ТЫ сделать не могут.
ПРошу не офтопить в моей теме а по существу.
Я не прошу написать код а подсказать где косяк!!! Чуешь разницу?!!!
Согласен написал и не проверил понять мало что можно.
я в код добавил контроль за температурой автоматический
а точнее при повышении температуры на порог срабатывания включается пин при достижении он отключается и пдает до низкого который добавлен и при достижении низкого порога он включает пин
условие с гестерезисом? это имелось в виду?
а не проще ли сначала все лишнее убрать и отрабатывать регулировку температуры
Согласен написал и не проверил понять мало что можно.
а точнее при повышении температуры на порог срабатывания включается пин при достижении он отключается и пдает до низкого который добавлен и при достижении низкого порога он включает пин
если это разъяснение, то оно еще больше все запутало
Согласен написал и не проверил понять мало что можно.
а точнее при повышении температуры на порог срабатывания включается пин при достижении он отключается и пдает до низкого который добавлен и при достижении низкого порога он включает пин
если это разъяснение, то оно еще больше все запутало
Гыыы. Буквально в пятницу обсуждали в офисе похожую ситуацию. Типа работник он хороший, но вот с общением у него проблемы.
У меня с написанием и клавиатурой проблемы )надо менять пожалуй и русский заного под учить )
у меня пальцы нажимают пороу три клавиши сразу приходится чутли не мизицем писать
у меня пальцы нажимают пороу три клавиши сразу приходится чутли не мизицем писать
Ну это заодно обьяняет ваши проблемы с кодом.
что с ним все таки не так?
что с ним все таки не так?
Как и другие ораторы, я бы предложил для начала реализовать то самое переклюение состояния пина по условию. Затем добавить туда ручной ввод триггерного значения(то что потом будет приходить с датчика температуры), таким образом кода будет не 250 строк, а всего 20-30 строк и там сразу будет видна и логика и все ошибки и не надо будет разбирать простыни чужого упоротого кода.
А когда с переключением по значению разберётесь, то сможете и легко вставить его в свою большую простыню.
Благодарю за подсказку
Вот код который у меня работает, но есть НО при отрубании питания и включении заного он перестает работать пока по сети не нажму кнопку вкл на странице. Хочется чтобы при пропадании питания и появления заного начинал работать в штатном режиме тоесть запись в епром как я понял надо, и добавить на страницу еще несколько даьчиков DS18B20 и DTH11
Народ помогите разобраться как это реализовать.