Go Down

Topic: New Modbusmq project: Testers needed! (Read 6 times) previous topic - next topic

Arnonh

#20
Oct 20, 2010, 04:28 pm Last Edit: Oct 20, 2010, 04:36 pm by Arnonh Reason: 1
I think there is a problem with calling
Code: [Select]
Client client = server.available();
as a global


so change that line to
Code: [Select]
Client client = 0;

please tell me if this helps
for me it seams to fix the problem

chris.moe

It works with:

Client client = 0;

But now I have the same problem with the DEBUG flag. It has to be disabled because if it is enables the Arduino hangs.  

hgs75 do you get it working with debug flag?

Arnonh

No i also couldn't get it to work with the DEBUG flag set.
but i thought it was because i used it with conjunction with i2c
so i just disabled  DEBUG  and moved on

Loren.R

Thanks, changing to "Client client = 0; " worked.

On another note: Is anyone using a simple web interface with Modbusmq, to configure IP, Gateway etc...?

Or have a suggestion as to how to get both Server, Client and different ports working together?

Arnonh

this is a beginning of IP changer over Ethernet but i didn't manage to implement it fully in to the Modbus code
(i have managed to get it to work only by a switch at the beginning of the program before the loop)

Code: [Select]
#include <EEPROM.h>

#include <SPI.h>


#include <Ethernet.h>
#include <Wire.h>

#define maxLength 100

int stringtoint(String &s);

byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
byte ip[] = { 192, 168, 1, 177 };
String inString = "";
int val;
Server server(80);

void setup()
{
 
   int DO_RESET_ETH_SHIELD = 8;
   pinMode(DO_RESET_ETH_SHIELD, OUTPUT);      // sets the digital pin as output
 digitalWrite(DO_RESET_ETH_SHIELD, LOW);
 delay(1000);  //for ethernet chip to reset
 digitalWrite(DO_RESET_ETH_SHIELD, HIGH);
 delay(1000);  //for ethernet chip to reset
 
 
 if ((EEPROM.read(1) != 0) && (EEPROM.read(1) != 0xFF)){
   
 ip[0] = EEPROM.read(1);
 ip[1] = EEPROM.read(2);
 ip[2] = EEPROM.read(3);
 ip[3] = EEPROM.read(4);
 
 }
 
 delay(100);
 Ethernet.begin(mac, ip);
 server.begin();
 Serial.begin(9600);
 //BlinkM_beginWithPower();  
 //BlinkM_stopScript( blinkm_addr );  
}
void loop()
{
 
 
 
 
 int IP1=ip[0];
 int IP2=ip[1];
 int IP3=ip[2];
 int IP4=ip[3];
 
 
 
 Client client = server.available();
 if (client) {
   boolean current_line_is_blank = true;
   while (client.connected()) {
     if (client.available()) {
       char c = client.read();
       if (inString.length() < maxLength) {
         inString += c;
        }        
       
       
       if (c == '\n' && current_line_is_blank) {

         if (inString.indexOf("?")>0){
         
          int IP1p = inString.indexOf("IP1");
          int IP2p = inString.indexOf("IP2");
          int IP3p = inString.indexOf("IP3");
          int IP4p = inString.indexOf("IP4");
          int End = inString.indexOf("H");
         
          String IP1S = inString.substring((IP1p+4), (IP2p-1));
          String IP2S = inString.substring((IP2p+4), (IP3p-1));
          String IP3S = inString.substring((IP3p+4), (IP4p-1));
          String IP4S = inString.substring((IP4p+4), (End-1));
         
           IP1 = stringtoint(IP1S);
           IP2 = stringtoint(IP2S);
           IP3 = stringtoint(IP3S);
           IP4 = stringtoint(IP4S);
         
          EEPROM.write(1, IP1);
          EEPROM.write(2, IP2);
          EEPROM.write(3, IP3);
          EEPROM.write(4, IP4);
         
          /*
          Serial.print(IP1);
          Serial.print(".");
          Serial.print(IP2);
          Serial.print(".");
          Serial.print(IP3);
          Serial.print(".");
          Serial.print(IP4);
          */
          /*
          int IP1 = atoi(IP1S.toCharArray());
          int IP2 = atoi(IP2S.toCharArray());
          int IP3 = atoi(IP3S.toCharArray());
          int IP4 = atoi(IP4S.toCharArray());
         
         
         
         
         
          Serial.println(IP1+"."+IP2+"."+IP3+"."+IP4);
           
           */
           
         }
         
         
         
         /*
         if (inString.contains("?")) {
          int Pos_r = inString.indexOf("r");
          int Pos_g = inString.indexOf("g");
          int Pos_b = inString.indexOf("b");
          int End = inString.indexOf("H");
          r = atoi(inString.substring((Pos_r+2), (Pos_g-1)));
          g = atoi(inString.substring((Pos_g+2), (Pos_b-1)));
          b = atoi(inString.substring((Pos_b+2), (End-1)));  
          BlinkM_fadeToRGB( blinkm_addr, r, g, b );
        }
         */
         client.println("HTTP/1.1 200 OK");
         client.println("Content-Type: text/html");
         client.println();
         client.println("<html><head></head><body>");
         client.println("<h1>Network Settings</h1>");
         client.println("<h3>Saved IP is:  ");
         client.print(IP1);
         client.print(".");
         client.print(IP2);
         client.print(".");
         client.print(IP3);
         client.print(".");
         client.print(IP4);
         client.println("</h3>");
         client.println("<form method=get>IP:.......<input type=text size=2 name=IP1 MAXLENGTH=3><input type=text size=2 name=IP2 MAXLENGTH=3><input type=text size=2 name=IP3 MAXLENGTH=3><input type=text size=2 name=IP4 MAXLENGTH=3>&nbsp;<BR>");      
         //client.println("<form method=get>Subnet:<input type=text size=2 name=S1 MAXLENGTH=3><input type=text size=2 name=S2 MAXLENGTH=3><input type=text size=2 name=S3 MAXLENGTH=3><input type=text size=2 name=S4 MAXLENGTH=3>&nbsp;<BR>");  
         client.println("<input type=submit value=submit></body></html>");
         break;
       }
       if (c == '\n') {
         current_line_is_blank = true;
       } else if (c != '\r') {
         current_line_is_blank = false;
       }
     }
   }
   delay(1);
   inString = "";
   client.stop();
 }
}



int stringtoint(String &s){
           int n;
          char carray[4];
          s.toCharArray(carray, sizeof(carray));
          n = atoi(carray);
          return(n);
}

Go Up