Прошу проанализировать код.
- Войдите на сайт для отправки комментариев
Пнд, 29/07/2013 - 11:06
Есть 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());
}
}
}
Проблемма в следующем, процессинг не считывает данные.
Спасибо!
Добавил строку 23
client.write ("1");Появилась ошибка:
Попробуйте вместо processing.net использовать java.net
http://stackoverflow.com/questions/13811110/how-do-i-do-http-authentication-in-processing-using-either-loadstrings-loadxm
Это не процессинг данные не считывает, а скорее всего дуина их не отправляет. У вас клиент не подключается к серверу.
Это не процессинг данные не считывает, а скорее всего дуина их не отправляет. У вас клиент не подключается к серверу.
К сожалению не за компьютером, догатку проверить не могу, но спросить хочу. Если на компьютере уже запущен браузер с этой страницей, есть вариант, что процессинг не может подключиться? Или это проблемы на стороне дуины?
С таким кодом
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);} }Ошибка выглядит так
Ошибка эта появляется от того что программа не может писать данные через клиента неподключенного к серверу.
Ошибка эта появляется от того что программа не может писать данные через клиента неподключенного к серверу.
Хм, что я делаю не так? Аналогичный код на W5100 работает. Как подключить тогда клиента к серверу?
Ошибка эта появляется от того что программа не может писать данные через клиента неподключенного к серверу.
Кстати, в посте выше в консоле видно, что данные с сервера клиент получает, но по какой то причине не обрабатывает...
Так а хоть какие то данные выводятся? нули например?
Посмотрите внимательно на то что у вас приходит
!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 ??? -->и попробуйте найти в этом символы ☺, ☻, ♥ или ♦
Так а хоть какие то данные выводятся? нули например?
Посмотрите внимательно на то что у вас приходит
!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 ??? -->и попробуйте найти в этом символы ☺, ☻, ♥ или ♦
Выглядит в дуине это место так
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")