Прошу проанализировать код.
- Войдите на сайт для отправки комментариев
Пнд, 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
Появилась ошибка:
Попробуйте вместо processing.net использовать java.net
http://stackoverflow.com/questions/13811110/how-do-i-do-http-authentication-in-processing-using-either-loadstrings-loadxm
Это не процессинг данные не считывает, а скорее всего дуина их не отправляет. У вас клиент не подключается к серверу.
Это не процессинг данные не считывает, а скорее всего дуина их не отправляет. У вас клиент не подключается к серверу.
К сожалению не за компьютером, догатку проверить не могу, но спросить хочу. Если на компьютере уже запущен браузер с этой страницей, есть вариант, что процессинг не может подключиться? Или это проблемы на стороне дуины?
С таким кодом
Ошибка выглядит так
Ошибка эта появляется от того что программа не может писать данные через клиента неподключенного к серверу.
Ошибка эта появляется от того что программа не может писать данные через клиента неподключенного к серверу.
Хм, что я делаю не так? Аналогичный код на 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"
)