#include #include #include byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; byte ip[] = { 192, 168, 1, 7 }; byte server[] = {80,32,15,59 }; //tuzsa byte gateway[] = {192,168,1,254 }; LiquidCrystal lcd(44,43,42,41,40,39,38); Client client(server, 80); const char * pagina = "GET /tuzsa_frm_esquemaparadatime.php?poste=94&direccion=AV.%20CESAR%20AUGUSTO/MURALLAS HTTP/1.0"; const char * miTag = ""; //conectando #define CON 0 //conexion OK #define OK 1 //conexion NOK #define NOK 2 char * st_msj[3] = {" ??"," OK"," NOK"}; int st_int = CON; // Define Constants // Max string length may have to be adjusted depending on data to be extracted #define MAX_STRING_LEN 100 #define MAX_BUSES 50 // Setup vars char tagStr[MAX_STRING_LEN] = ""; char dataStr[MAX_STRING_LEN] = ""; char tmpStr[MAX_STRING_LEN] = ""; char output[MAX_STRING_LEN][MAX_BUSES]; int cont = 0; int len; // Flags to differentiate XML tags from document elements (ie. data) boolean tagFlag = false; boolean dataFlag = false; void print_LCD(char *msj) { lcd.clear(); delay(600); int tam_msj = strlen(msj); if (tam_msj>0) { lcd.setCursor(0,0); lcd.print(msj); if (tam_msj>8) //no cabe, scroll { delay(600); for (int positionCounter = 0; positionCounter < tam_msj; positionCounter++) { // scroll one position left: lcd.scrollDisplayLeft(); // wait a bit: delay(800); } } } //lcd.setCursor(1,0); //lcd.print(st_msj[st_int]); delay(1000); } void setup() { Serial.begin(9600); Serial.println("Starting babu-tuzsa"); Serial.println("connecting..."); Ethernet.begin(mac, ip, gateway); lcd.begin(8,2); delay(1000); //st_int = CON; print_LCD("babu-tuzsa v0.1. 4D4L0v3"); // lcd.clear(); // delay(1000); if (client.connect()) { st_int = OK; print_LCD(st_msj[st_int]); Serial.println("connected"); client.println(pagina); client.println(); delay(2000); } else { Serial.println("connection failed"); } } void loop() { // Read serial data in from web: while (client.available()) { serialEvent(); } if (!client.connected()) { //Serial.println(); //Serial.println("Disconnected"); client.stop(); //mostramos los resultados o esperamos if (cont > 0) { for (int i = 0; i< cont; i++) { print_LCD(output[i]); clearStr(output[i]); } cont = 0; }else { delay(60000); } if (client.connect()) { st_int = OK; print_LCD(st_msj[st_int]); //Serial.println("Reconnected"); client.println(pagina); client.println(); delay(2000); } else { st_int = NOK; print_LCD(st_msj[st_int]); Serial.println("Reconnect failed"); } } } // Process each char from web void serialEvent() { // Read a char char inChar = client.read(); //Serial.print("."); if (inChar == '<') { //inicio de tag addChar(inChar, tmpStr); tagFlag = true; if (dataFlag) //previamente hemos encontrado miTag, pintamos los datos { if (strlen(dataStr)>0) { if (cont') //fin de tag { addChar(inChar, tmpStr); if (tagFlag) { strncpy(tagStr, tmpStr, strlen(tmpStr)+1); } // Clear tmp clearStr(tmpStr); tagFlag = false; //Serial.print("xxxxxxxxxxxxxxxxxxxxxxxx "); //Serial.println(tagStr); if (strcmp(tagStr,miTag)==0) //encontrado miTag, a guardar los datos { dataFlag = true; } } else { if (tagFlag) { // Add tag char to string addChar(inChar, tmpStr); }else if (dataFlag) { // Add data char to string addChar(inChar, dataStr); } } } ///////////////////// // Other Functions // ///////////////////// // Function to clear a string void clearStr (char* str) { int len = strlen(str); for (int c = 0; c < len; c++) { str[c] = 0; } } //Function to add a char to a string and check its length void addChar (char ch, char* str) { char *tagMsg = ""; char *dataMsg = "-TRUNCATED_DATA-"; // Check the max size of the string to make sure it doesn't grow too // big. If string is beyond MAX_STRING_LEN assume it is unimportant // and replace it with a warning message. if (strlen(str) > MAX_STRING_LEN - 2) { if (tagFlag) { clearStr(tagStr); strcpy(tagStr,tagMsg); } if (dataFlag) { clearStr(dataStr); strcpy(dataStr,dataMsg); } // Clear the temp buffer and flags to stop current processing clearStr(tmpStr); tagFlag = false; dataFlag = false; } else { // Add char to string str[strlen(str)] = ch; } }