Помогите найти ошибку.

ingener.solovyev
Offline
Зарегистрирован: 12.02.2013
//Версия 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е. Не могу понять что происходит, неделю все работало без сбоев и перезагрузок....

ingener.solovyev
Offline
Зарегистрирован: 12.02.2013

В HTML начинает сыпаться вот это:

<!DO3
4
1
3,4
1
0
//W3C//DTD HTML 4.01 Transitional//EN'
<ht(
<head> 
<meta http-equiv= refresh  content=60;>
<meta http-equiv='Content-Type' content='text/html; charset=utf-8' /> 
</head> 
<body>
<b><font size='+3'>Микроклимат серверной </font></b>
<br> 
<b>Датчик №1</b>
<br> 
ТемперР2
25.40
 *C
<br>
Влажность:   
56.00
 %
<br> 
<b>Датчик №2</b>
<br> 
ТемперР2
25.62
 *C
<br> 
<b>Датчик №3</b>
<br> 
ТемперР2
28.31
 *C
<br> 
<hr>
<br> 
<b>Заданные нормы температур и влажности:</b>
<br> 
Верхняя температурная граница регулирования: 
23
 *C
<br> 
Нижняя температурная граница регулирования: 
19
 *C
<br> 
Максимум нормальной влажности воздуха: 
55
 %
<br> 
<hr>
<br> 
<b>Уставки сигналов аварии:</b>
<br> 
Верхняя температурная 
26
 *C
<br> 
Нижняя температурная граница сигнала аварии: 
16
 *C
<br> 
Аварийный максимум влажности воздуха: 
80
 %
<br> 
<hr>
<br> 
<b>Состояние климата</b>
<br>
РђР’РђР РРЇ, температура выше РЅРѕСЂРјС‹
<br> 
<hr>

 

ingener.solovyev
Offline
Зарегистрирован: 12.02.2013

Проблему решил. Виноват блок питания на 12v. Грелся МК. Хотя неделю проработал без сбоев.