термостат на ардуино и инет шилде
- Войдите на сайт для отправки комментариев
Ср, 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
Народ помогите разобраться как это реализовать.
#include <SPI.h> #include <Ethernet.h> #include <OneWire.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; int power=0; void setup(void) { pinMode(ledPin, OUTPUT); Ethernet.begin(mac,ip); server.begin(); connectToSensor(); } void loop(void) { 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"){ power = 1; isLedOn = true; redirectHeader(client, "/"); } else if(request=="/switch-off"){ power = 0; 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(); } if ((power==1) && (temperature<=45)) { digitalWrite(ledPin, HIGH); } if ((power==1) && (temperature>=50)) { digitalWrite(ledPin, LOW); } if (power==0) { digitalWrite(ledPin, LOW); }; } 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(); } }