Прошу проанализировать код.

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

Есть html строка данных генерируемая Arduino:

<!DOCTYPE HTML PUBLIC '-//W3C//DTD HTML 4.01 Transitional//EN'><head><meta http-equiv= refresh  content=60;><meta http-equiv='Content-Type' content='text/html; charset=utf-8' /></head><html><body><b><font size='+3'>Микроклимат серверной: <FONT color='red'>АВАРИЯ</FONT> </font></b><br><b>Датчик №1</b><br>Температура: 25.90 <SUP>o</SUP>C <br> Влажность: 62.80 % <br><b>Датчик № 2 </b><br>Температура:  25.94 <SUP>o</SUP>C <br><b>Датчик № 3 </b><br>Температура:  25.88 <SUP>o</SUP>C <hr></body></html> <!-- ☺ 25.90 ◙ ☻ 62.80 ◙ ♥ 25.94 ◙ ♦ 25.88 ◙ -->

Из все этой чешуи процессинг должен ориентироваться на 

☺ 25.90 ◙ ☻ 62.80 ◙ ♥ 25.94 ◙ ♦ 25.88 ◙

Код процессинга выглядит так:

import processing.net.*;
Client client;

String h= "";
String t= "";
String t0= "";
String t1= "";

char flag='◙';

void setup() 
{
  size(300, 300);
  client = new Client(this, "88.85.206.140", 80);
  delay(3000);
  
  
}

void draw() 
{
  background(255);
  
  while (client.available()>0){
    char ch = client.readChar();
 
      delay(20);
    if (ch == '☺') {t = client.readStringUntil(flag);}
      delay(20);  
    if (ch == '☻') {h = client.readStringUntil(flag);}
    delay(20);  
    if (ch == '♥') {t0 = client.readStringUntil(flag);}
    delay(20);  
    if (ch == '♦') {t1 = client.readStringUntil(flag);}
    delay(20);  
  }
    fill (0, 0, 0);
    textSize(30);
  if (t != null) {println (t); text(t, 10, 10);}
  if (t != null) {text(t0, 10, 50);}
  if (t != null) {text(t1, 10, 90);}
  if (h != null) {text(h, 10, 130);}
  
  }

Код ардуино на всякий случай здесь:

//EEPROM (0-3) - temperature_up, temperature_down, signal_T_up, signal_T_down
//EEPROM (4,5) - humdity, signal_H_up
//DHT22 pin3
//DS18B20 pin9
//signal good pin4
//signal bad pin5
//relay pin6
//relay pin7 
//ledpin 8

#include <EtherCard.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#include "DHT.h"
#include <EEPROM.h>

#define ONE_WIRE_BUS 9  //не забыть переправить
#define DHTPIN 3     
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);

static byte mymac[] = {0x00, 0x04, 0xA3, 0x21, 0xCA, 0x38};
byte Ethernet::buffer[1024];
float t[3];
char T0[6], T1[6], T2[6], H[6]; //, T3[3], T4[3], T5[3], T6[3], T7[3], T8[3];
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
//char flag=10;
int simbol, Sg=4, Sb=5;
int Relay[2];
int R[2];
//long previousMillis = 0;
//long interval = 30000;
float u[5]; //u[0]-верхняя температра регулирования u[1]-нижняя темп.рег u[2]-верхн темп. сигнала, u[3]-нижняя температура сигнала, u[4]-нормальный максимум влажности, u[5]-аварийный максимум влажности
char* signal;

 char html1[] PROGMEM =
       "<!DOCTYPE HTML PUBLIC '-//W3C//DTD HTML 4.01 Transitional//EN'><head>"
       "<meta http-equiv= refresh  content=60;>"
       "<meta http-equiv='Content-Type' content='text/html; charset=utf-8' />"
       "</head><html><body><b><font size='+3'>Микроклимат серверной:" ;
      
 char html2[] PROGMEM = 
       "</font></b><br>"
       "<b>Датчик №1</b><br>Температура:";
       
 char html3[] PROGMEM = 
       "</b><br>Температура: ";
      
 char html4[] PROGMEM = 
       "<br><b>Датчик №"; 
       
 char html5[] PROGMEM = 
       "<br> Влажность:"; 
       
 char htmlend[] PROGMEM =
       "<hr></body></html>"; 
       
 char C[] PROGMEM =
       "<SUP>o</SUP>C";
       
 char Avaria[] PROGMEM =
       "<FONT color='red'>АВАРИЯ</FONT>";
       
 char Norma[] PROGMEM =
       "Норма";
       
 char flag[]  PROGMEM = 
        "◙";
        
 char Start[] PROGMEM =
        "<!--";
        
 char End[] PROGMEM =
        "-->"; 
   
 void setup () {
  Serial.begin(57600);
  for (int i=0; i<6; i++){
    u[i] = EEPROM.read(i);
    Serial.print ("u[");
    Serial.print (i);
    Serial.print ("]= ");
    Serial.println (u[i]);}
  

  sensors.begin();
  dht.begin();
 
  if (!ether.begin(sizeof Ethernet::buffer, mymac, 10))
  Serial.println( "No");
  else 
   Serial.println("Ok");
 
  if (!ether.dhcpSetup())
    Serial.println("No");
  else
    Serial.println("Ok");
  
  ether.printIp("IP:\t", ether.myip);
  ether.printIp("Mask:\t", ether.mymask);
  ether.printIp("Host:\t", ether.gwip);
  Serial.println();
  
  Relay[1]=6;
  Relay[2]=7;
  pinMode(Relay[1], OUTPUT);
  digitalWrite(Relay[1], LOW);
  pinMode(Relay[2], OUTPUT);
  digitalWrite(Relay[2], LOW);
  pinMode(Sg, OUTPUT);
  digitalWrite(Sg, LOW);
  pinMode(Sb, OUTPUT);
  digitalWrite(Sb, LOW);
  
  
}
  
void loop() {
  
  if(Serial.available()){
    simbol=Serial.read ();
    if (simbol==116) {
      
     byte q[4] = {0, 0, 0, 0};
     for(byte i = 0; i < 4; i++)
     {
       q[i] = Serial.parseInt();
       EEPROM.write(i, q[i]);
     }
      for(byte i = 0; i < 4; i++)
    {
      q[i] = EEPROM.read(i);
      Serial.print(q[i]);
      if(i < 1) 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+4, h[i]);
     }
      for(byte i = 0; i < 2; i++)
    {
      h[i] = EEPROM.read(i+4);
      Serial.print(h[i]);
      if(i < 1) Serial.print(',');
      else Serial.println();
    }
   }
   }
     
  sensors.requestTemperatures();
  
  for (int z=0; z<4; z++) {
    if (z<2){
      t[z] = sensors.getTempCByIndex(z);
      delay (100);
      if (t[z]>u[0]) {
      R[z]=HIGH;
      digitalWrite (Relay[z], R[z]);}
      if (t[z]<u[z]) {
      R[z]=LOW;
      digitalWrite (Relay[z], R[z]);}
   } else {
    if (z==2) {
      t[z] = dht.readTemperature();
      }else{
    if (z==3) {
       t[z] = dht.readHumidity();

       dtostrf(t[3],5,2,H);
       delay (50);

       }
     }
   }
    dtostrf(t[0],5,2,T0);
    dtostrf(t[1],5,2,T1);
    dtostrf(t[2],5,2,T2);
    
 if (t[0]<u[3] || t[1]<u[3] || t[2]<u[3] || t[3]>u[5] ||t[0]>u[2] || t[1]>u[2] || t[2]>u[2]) {
    signal = Avaria;
    digitalWrite (Sg, LOW);
    digitalWrite (Sb, HIGH);  
    }else{ 
     signal = Norma;
     digitalWrite (Sg, HIGH);
     digitalWrite (Sb, LOW);}
         
  word len = ether.packetReceive();
  word pos = ether.packetLoop(len);
  
  if(pos) {
    
 //   Serial.println("---------------------------------------- NEW PACKET ----------------------------------------");
 //   Serial.println((char *)Ethernet::buffer + pos);
 //   Serial.println("--------------------------------------------------------------------------------------------");
 //   Serial.println();
    
    ether.hisport = 80;    
    BufferFiller bfill = ether.tcpOffset();
    bfill.emit_p(PSTR("$F $F $F $S $F $F $S % $F 2 $F $S $F $F 3 $F $S $F $F $F ☺ $S $F ☻ $S $F ♥ $S $F ♦ $S $F $F"),
                      html1, signal, html2, T2, C, html5, H, html4, html3 ,T0, C, html4, html3, T1, C, htmlend, Start, T2, flag, H, flag, T0, flag, T1, flag, End);
               
    ether.httpServerReply(bfill.position());
    
 //   ether.hisport = 82;
 //   BufferFiller bfill2 = ether.tcpOffset();
 //   bfill2.emit_p(PSTR("t$S$F"), T2, flag) ;
                      
 //   ether.httpServerReply(bfill2.position());                  
  }
}
}

Проблемма в следующем, процессинг не считывает данные.

Спасибо!

 

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

Добавил строку 23

client.write ("1");

Появилась ошибка:

Client got end-of-stream.
java.lang.NullPointerException
	at processing.net.Client.write(Unknown Source)
	at processing.net.Client.write(Unknown Source)
	at sketch_130729b.draw(sketch_130729b.java:41)
	at processing.core.PApplet.handleDraw(PApplet.java:2270)
	at processing.core.PGraphicsJava2D.requestDraw(PGraphicsJava2D.java:243)
	at processing.core.PApplet.run(PApplet.java:2141)
	at java.lang.Thread.run(Thread.java:662)

 

JollyBiber
JollyBiber аватар
Offline
Зарегистрирован: 08.05.2012

Попробуйте вместо processing.net использовать java.net

http://stackoverflow.com/questions/13811110/how-do-i-do-http-authentication-in-processing-using-either-loadstrings-loadxm

maksim
Offline
Зарегистрирован: 12.02.2012

Это не процессинг данные не считывает, а скорее всего дуина их не отправляет. У вас клиент не подключается к серверу.

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

maksim пишет:

Это не процессинг данные не считывает, а скорее всего дуина их не отправляет. У вас клиент не подключается к серверу.

К сожалению не за компьютером, догатку проверить не могу, но спросить хочу. Если на компьютере уже запущен браузер с этой страницей, есть вариант, что процессинг не может подключиться? Или это проблемы на стороне дуины?

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

С таким кодом 

import processing.net.*;
Client client;

String h= "";
String t= "";
String t0= "";
String t1= "";
char ch;
char flag='◙';

void setup() 
{
  size(300, 300);
  client = new Client(this, "88.85.206.140", 80);
  delay(3000);
  

  
}

void draw() 
{
  background(255);
  client.write ("1");
  
  while (client.available () > 0){
    ch = client.readChar();
    print (ch);
   // print (client.available());
      delay(20);
    if (ch == '☺') {t = client.readStringUntil(flag);}
      delay(20);  
    if (ch == '☻') {h = client.readStringUntil(flag);}
    delay(20);  
    if (ch == '♥') {t0 = client.readStringUntil(flag);}
    delay(20);  
    if (ch == '♦') {t1 = client.readStringUntil(flag);}
    delay(20);  
  }

    fill (0, 0, 0);
    textSize(30);
  if (t != null) {println (t); text(t, 10, 10);}
  if (t0 != null) {println (t0);text(t0, 10, 50);}
  if (t1 != null) {println (t1);text(t1, 10, 90);}
  if (h != null) {println (h);text(h, 10, 130);}
    
}

 

Ошибка выглядит так 

Client got end-of-stream.
java.lang.NullPointerException
	at processing.net.Client.write(Unknown Source)
	at processing.net.Client.write(Unknown Source)
<	at sketch_130729a.draw(sketch_130729a.java:42)
	at processing.core.PApplet.handleDraw(PApplet.java:2270)
	at processing.core.PGraphicsJava2D.requestDraw(PGraphicsJava2D.java:243)
	at processing.core.PApplet.run(PApplet.java:2141)
	at java.lang.Thread.run(Thread.java:662)
!DOCTYPE HTML PUBLIC '-//W3C//DTD HTML 4.01 Transitional//EN'><head><meta http-equiv= refresh  content=60;><meta http-equiv='Content-Type' content='text/html; charset=utf-8' /></head><html><body><b><font size='+3'>?????????????»?????°?? ???µ?????µ????????: <FONT color='red'>??????? ????</FONT> </font></b><br><b>???°???????? ???1</b><br>???µ?????µ???°???????°: 25.30 <SUP>o</SUP>C <br> ???»?°?¶??????????: 60.40 % <br><b>???°???????? ??? 2 </b><br>???µ?????µ???°???????°:  25.38 <SUP>o</SUP>C <br><b>???°???????? ??? 3 </b><br>???µ?????µ???°???????°:  25.31 <SUP>o</SUP>C <hr></body></html> <!-- ??? 25.30 ??? ??» 60.40 ??? ??? 25.38 ??? ??¦ 25.31 ??? -->



java.lang.NullPointerException
	at processing.net.Client.write(Unknown Source)
	at processing.net.Client.write(Unknown Source)
	at sketch_130729a.draw(sketch_130729a.java:42)
	at processing.core.PApplet.handleDraw(PApplet.java:2270)
	at processing.core.PGraphicsJava2D.requestDraw(PGraphicsJava2D.java:243)

 

maksim
Offline
Зарегистрирован: 12.02.2012

Ошибка эта появляется от того что программа не может писать данные через клиента неподключенного к серверу.

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

maksim пишет:

Ошибка эта появляется от того что программа не может писать данные через клиента неподключенного к серверу.

Хм, что я делаю не так? Аналогичный код на W5100 работает. Как подключить тогда клиента к серверу?

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

maksim пишет:

Ошибка эта появляется от того что программа не может писать данные через клиента неподключенного к серверу.

Кстати, в посте выше в консоле видно, что данные с сервера клиент получает, но по какой то причине не обрабатывает...

Client got end-of-stream.
java.lang.NullPointerException
	at processing.net.Client.write(Unknown Source)
	at processing.net.Client.write(Unknown Source)
<	at sketch_130729a.draw(sketch_130729a.java:42)
	at processing.core.PApplet.handleDraw(PApplet.java:2270)
	at processing.core.PGraphicsJava2D.requestDraw(PGraphicsJava2D.java:243)
	at processing.core.PApplet.run(PApplet.java:2141)
	at java.lang.Thread.run(Thread.java:662)
!DOCTYPE HTML PUBLIC '-//W3C//DTD HTML 4.01 Transitional//EN'><head><meta http-equiv= refresh  content=60;><meta http-equiv='Content-Type' content='text/html; charset=utf-8' /></head><html><body><b><font size='+3'>?????????????»?????°?? ???µ?????µ????????: <FONT color='red'>??????? ????</FONT> </font></b><br><b>???°???????? ???1</b><br>???µ?????µ???°???????°: 25.30 <SUP>o</SUP>C <br> ???»?°?¶??????????: 60.40 % <br><b>???°???????? ??? 2 </b><br>???µ?????µ???°???????°:  25.38 <SUP>o</SUP>C <br><b>???°???????? ??? 3 </b><br>???µ?????µ???°???????°:  25.31 <SUP>o</SUP>C <hr></body></html> <!-- ??? 25.30 ??? ??» 60.40 ??? ??? 25.38 ??? ??¦ 25.31 ??? -->



java.lang.NullPointerException
	at processing.net.Client.write(Unknown Source)
	at processing.net.Client.write(Unknown Source)
	at sketch_130729a.draw(sketch_130729a.java:42)
	at processing.core.PApplet.handleDraw(PApplet.java:2270)
	at processing.core.PGraphicsJava2D.requestDraw(PGraphicsJava2D.java:243)

 

maksim
Offline
Зарегистрирован: 12.02.2012

Так а хоть какие то данные выводятся? нули например?

Посмотрите внимательно на то что у вас приходит

!DOCTYPE HTML PUBLIC '-//W3C//DTD HTML 4.01 Transitional//EN'><head><meta http-equiv= refresh  content=60;><meta http-equiv='Content-Type' content='text/html; charset=utf-8' /></head><html><body><b><font size='+3'>?????????????»?????°?? ???µ?????µ????????: <FONT color='red'>??????? ????</FONT> </font></b><br><b>???°???????? ???1</b><br>???µ?????µ???°???????°: 25.30 <SUP>o</SUP>C <br> ???»?°?¶??????????: 60.40 % <br><b>???°???????? ??? 2 </b><br>???µ?????µ???°???????°:  25.38 <SUP>o</SUP>C <br><b>???°???????? ??? 3 </b><br>???µ?????µ???°???????°:  25.31 <SUP>o</SUP>C <hr></body></html> <!-- ??? 25.30 ??? ??» 60.40 ??? ??? 25.38 ??? ??¦ 25.31 ??? -->

и попробуйте найти в этом символы ☺, ☻, ♥ или 

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

maksim пишет:

Так а хоть какие то данные выводятся? нули например?

Посмотрите внимательно на то что у вас приходит

!DOCTYPE HTML PUBLIC '-//W3C//DTD HTML 4.01 Transitional//EN'><head><meta http-equiv= refresh  content=60;><meta http-equiv='Content-Type' content='text/html; charset=utf-8' /></head><html><body><b><font size='+3'>?????????????»?????°?? ???µ?????µ????????: <FONT color='red'>??????? ????</FONT> </font></b><br><b>???°???????? ???1</b><br>???µ?????µ???°???????°: 25.30 <SUP>o</SUP>C <br> ???»?°?¶??????????: 60.40 % <br><b>???°???????? ??? 2 </b><br>???µ?????µ???°???????°:  25.38 <SUP>o</SUP>C <br><b>???°???????? ??? 3 </b><br>???µ?????µ???°???????°:  25.31 <SUP>o</SUP>C <hr></body></html> <!-- ??? 25.30 ??? ??» 60.40 ??? ??? 25.38 ??? ??¦ 25.31 ??? -->

и попробуйте найти в этом символы ☺, ☻, ♥ или 

Вы правы. Поменял на время знак на ! и > на экран вывелся кусок html кода. Значит проблемма как обычно в типе данных. Эти значки бубнов и червей alt+3 и alt+4, как тогда передать с ардуино коды acii 1,2,3,4  через pstr? 

Выглядит в дуине это место такbfill.emit_p(PSTR("$F $F $F $S $F $F $S % $F 2 $F $S $F $F 3 $F $S $F $F $F ☺ $S $F ☻ $S $F ♥ $S $F ♦ $S $F $F")