Помогите найти ошибку.
- Войдите на сайт для отправки комментариев
Сб, 13/07/2013 - 18:30
//Версия 1.10 //Программа выводит данные температуры и влажности с DHT 22 //(pin 2)в //Processing, изменение IP адреса через Serial порт через "*" //Подача сигнала на PIN 5 при выходе показателей температуры за //заданные границы. //EEPROM (0-3) - IP //EEPROM (4-7) - temperature_up, temperature_down, signal_T_up, signal_T_down //EEPROM (8-9) - humdity, signal_T_up //DHT22 pin2 //DS18B20 pin3 //signal good pin4 //signal bad pin5 //relay pin6 //relay pin7 //ledpin 8 #include <OneWire.h> #include <DallasTemperature.h> #include <SPI.h> #include <Ethernet.h> #include "DHT.h" #include <EEPROM.h> //String relay=""; char flag=10; byte mac[] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; EthernetServer server(80); EthernetServer serverP(82); byte ip1, ip2, ip3, ip4, temperature_up, temperature_down, humdity, signal_T_up, signal_T_down, signal_H_up; int simbol, Relay1=6, Relay2=7, Sigood=4, Sibad=5; float t, t0, t1, t2, t3, t4, h0, h1, h; long previousMillis = 0; long interval = 30000; #define DHTPIN 2 #define DHTTYPE DHT22 DHT dht(DHTPIN, DHTTYPE); #define TEMPERATURE_PRECISION 9 #define ONE_WIRE_BUS 3 OneWire oneWire(ONE_WIRE_BUS); DallasTemperature sensors(&oneWire); void setup() { Serial.begin(9600); Serial.setTimeout(100); dht.begin(); ip1 = EEPROM.read(0); ip2 = EEPROM.read(1); ip3 = EEPROM.read(2); ip4 = EEPROM.read(3); temperature_up = EEPROM.read(4); temperature_down = EEPROM.read(5); signal_T_up = EEPROM.read(6); signal_T_down = EEPROM.read(7); humdity = EEPROM.read(8); signal_H_up = EEPROM.read(9); IPAddress ip(ip1,ip2,ip3,ip4); delay (1000); Ethernet.begin(mac, ip); server.begin(); Serial.print ("IP address: "); // Serial.print (" of the device: "); Serial.println (ip); Serial.print ("The upper temp. "); // Serial.print ("ature limit control: "); Serial.println (temperature_up); Serial.print ("The lower temp. "); // Serial.print ("temperature"); // Serial.print (" limit control: "); Serial.println (temperature_down); //Serial.print ("The upper limit "); // Serial.print ("of moisture for"); Serial.print ("Hum. normal operation: "); Serial.println (humdity); // Serial.print ("The upper tempe"); Serial.print ("Up temp. alarm signal: "); Serial.println (signal_T_up); // Serial.print ("The lower the tempe"); Serial.print ("Low temp. alarm signal: "); Serial.println (signal_T_down); //Serial.print ("The upper limit "); // Serial.print ("of the humidity "); Serial.print ("Hum. alarm signal: "); Serial.println (signal_H_up); // Serial.println ("To change the setting:"); // Serial.println ("* - IP address of a space * 192 168 1 10 "); // Serial.println ("t-temperature, 4 values separated by a space: t 25 19 30 17"); // Serial.println ("h-humidity, two values separated by a space: h 55 80"); // Serial.println ("For the changes to take effect you must restart the controller"); sensors.begin(); pinMode(Relay1, OUTPUT); pinMode(Relay2, OUTPUT); pinMode(Sigood, OUTPUT); pinMode(Sibad, OUTPUT); } void loop() { if(Serial.available()){ simbol=Serial.read (); if (simbol==116) { byte t[4] = {0, 0, 0, 0}; for(byte i = 0; i < 4; i++) { t[i] = Serial.parseInt(); EEPROM.write(i+4, t[i]); } for(byte i = 0; i < 4; i++) { t[i] = EEPROM.read(i+4); Serial.print(t[i]); if(i < 1) Serial.print(','); else Serial.println(); } } if (simbol==42) { byte ip[4] = {0, 0, 0, 0}; for(byte i = 0; i < 4; i++) { ip[i] = Serial.parseInt(); EEPROM.write(i, ip[i]); } for(byte i = 0; i < 4; i++) { ip[i] = EEPROM.read(i); Serial.print(ip[i]); if(i < 3) Serial.print('.'); else Serial.println(); } } if (simbol==104) { byte h[2] = {0, 0}; for(byte i = 0; i < 2; i++) { h[i] = Serial.parseInt(); EEPROM.write(i+8, h[i]); } for(byte i = 0; i < 2; i++) { h[i] = EEPROM.read(i+8); Serial.print(h[i]); if(i < 1) Serial.print(','); else Serial.println(); } } } t0 = dht.readTemperature(); h = dht.readHumidity(); sensors.requestTemperatures(); t1 = sensors.getTempCByIndex(0); if (t1>temperature_up) { int R1=HIGH; digitalWrite (Relay1, R1);} else { if (t1<=temperature_down) { int R1=LOW; digitalWrite (Relay1, R1);} } t2 = sensors.getTempCByIndex(1); if (t2>temperature_up) { int R2=HIGH; digitalWrite (Relay2, R2);} else { if (t2<=temperature_down) { int R2=LOW; digitalWrite (Relay2, R2);} } EthernetClient clientP = serverP.available(); unsigned long currentMillis = millis(); if(currentMillis - previousMillis > interval) { previousMillis = currentMillis; //Печать в Processing clientP.write('t'); clientP.print(t0, 2); //T DHT22 clientP.write(flag); clientP.write('h'); clientP.print(h, 2); //H DHT22 clientP.write(flag); clientP.write(1); clientP.print(t1, 2); //T1 DS18B20 clientP.write(flag); clientP.write(2); clientP.print(t2, 2); //T2 DS18B20 clientP.write(flag); //clientP.write(1); //clientP.print (ip1+ip2+ip3+ip4); //ip адрес подключения устройства // clientP.write(flag); clientP.write(3); clientP.print(temperature_up, DEC); //Верхняя температурная граница clientP.write(flag); clientP.write(4); clientP.print(temperature_down, DEC); //нижняя температурная граница clientP.write(flag); clientP.write(5); clientP.print(humdity, DEC); //максимальное значение влажности clientP.write(flag); //clientP.write(6); // clientP.print(R1); //Состояние реле 1 // clientP.write(flag); // clientP.write(7); // clientP.print(R1); //Состояние реле 2 // clientP.write(flag); } // Печать в WEB EthernetClient client = server.available(); client.println ("<!DOCTYPE HTML PUBLIC '-//W3C//DTD HTML 4.01 Transitional//EN'"); client.println ("<html>"); client.println ("<head> "); client.println ("<meta http-equiv= refresh content=60;>"); client.println ("<meta http-equiv='Content-Type' content='text/html; charset=utf-8' /> "); client.println ("</head> "); client.println ("<body>"); client.println ("<b><font size='+3'>Микроклимат серверной </font></b>"); client.println ("<br> "); client.println ("<b>Датчик №1</b>"); client.println ("<br> "); client.println ("Температура: "); client.println (t0); client.println (" *C"); client.println ("<br>"); client.println ("Влажность: "); client.println (h); client.println (" %"); client.println ("<br> "); client.println ("<b>Датчик №2</b>"); client.println ("<br> "); client.println ("Температура: "); client.println (t1); client.println (" *C"); client.println ("<br> "); client.println ("<b>Датчик №3</b>"); client.println ("<br> "); client.println ("Температура: "); client.println (t2); client.println (" *C"); client.println ("<br> "); client.println ("<hr>"); client.println ("<br> "); client.println ("<b>Заданные нормы температур и влажности:</b>"); client.println ("<br> "); client.println ("Верхняя температурная граница регулирования: "); client.println (temperature_up); client.println (" *C"); client.println ("<br> "); client.println ("Нижняя температурная граница регулирования: "); client.println (temperature_down); client.println (" *C"); client.println ("<br> "); client.println ("Максимум нормальной влажности воздуха: "); client.println (humdity); client.println (" %"); client.println ("<br> "); client.println ("<hr>"); client.println ("<br> "); client.println ("<b>Уставки сигналов аварии:</b>"); client.println ("<br> "); client.println ("Верхняя температурная граница сигнала аварии: "); client.println (signal_T_up); client.println (" *C"); client.println ("<br> "); client.println ("Нижняя температурная граница сигнала аварии: "); client.println (signal_T_down); client.println (" *C"); client.println ("<br> "); client.println ("Аварийный максимум влажности воздуха: "); client.println (signal_H_up); client.println (" %"); client.println ("<br> "); client.println ("<hr>"); client.println ("<br> "); client.println ("<b>Состояние климата</b>"); client.println ("<br>"); if (t0 < signal_T_down || t1 < signal_T_down || t2 < signal_T_down) { client.println ("АВАРИЯ, температура ниже нормы"); // Serial.println ("The temperature is below normal"); digitalWrite (Sigood, LOW); digitalWrite (Sibad, HIGH); } else { if (t0 > signal_T_up || t1 > signal_T_up || t2 > signal_T_up) { client.println ("АВАРИЯ, температура выше нормы"); //Serial.println ("Temperature above normal"); digitalWrite (Sigood, LOW); digitalWrite (Sibad, HIGH); } else { client.println ("Норма"); // Serial.println ("Norm"); digitalWrite (Sigood, HIGH); digitalWrite (Sibad, LOW);} if (h > signal_H_up) { client.println ("<br>"); client.println ("АВАРИЯ, влажность выше нормы"); // Serial.println ("Humidity higher than normal"); digitalWrite (Sigood, LOW); digitalWrite (Sibad, HIGH); } } client.println ("<br> "); client.println ("<hr>"); client.stop(); //Печать в сериал // Serial.print ("DHT22 T= "); // Serial.println (t0); // Serial.print ("DHT22 H= "); // Serial.println (h); // Serial.print ("DS18B20 T1= "); // Serial.println(t1); // Serial.print ("DS18B20 T2= "); //Serial.println(t2); }
Проблема в следующем.
Буквально через несколько секунд после запуска переписываются значения температур и начинаются глюки в WEBе. Не могу понять что происходит, неделю все работало без сбоев и перезагрузок....
В HTML начинает сыпаться вот это:
Проблему решил. Виноват блок питания на 12v. Грелся МК. Хотя неделю проработал без сбоев.