Printing a string (What am I doing wrong??)

Hey folks, here's a snippet of my code. The problem is, the token variable is printed as a blank line in my serial window. I've tried numerous ways to initialize it, all with the same result. Any idea why that's happening? What am I doing wrong?

void parse(String request, String command) {
  String token = "command=pin:";
  int pos1 = 0;
  int pos2 = 0;
  int c;
  if (command == "ON") {
    token += "on(";
  } else {
    token += "off(";

What are you doing wrong? Well evry thing

  1. your using String a very bad idea on arduinos!.
  2. Your trying to put together the whole string and then write it - again very very silly when the Uno (for example) has only 2k of ram.

try 1. print "command=pin:" 2. print the command, why change its case!!!!!!! 3. println(); 4 dump the point less pos1, pos2 and c

Thanks for your reply holmes, sorry if I'm not writing the best code; I'm a Javascript guy and just started using the Arduino (Uno) so I have a lot to learn. I should've explained that I don't really need to print the string out - rather, the parse function will be parsing a chunk of data, looking for certain commands, and extracting parameters from them. So if I hit my Arduino server at http://x.x.x.x/?command=pin:on(9), the parse function should:

  1. Detect that the ON command was received
  2. Extract 9 as the parameter
  3. Send power to pin 9

The code I posted is missing a bunch of content because I found that the original version is not working, and when debugging, token wasn't printing anything to the serial window.

So do you have any answer(s) for my original question? Regardless of whether it's bad practice, why wouldn't my string print to the serial window the way I have it?

Strings cause very great problems in C/C++ in general. Ones you can't afford with the aduinos. There are may threads on the topic.

Get the idea of using string (a null terminated array of chars) and not String (the Class).

Also look at the str set of functions such as strcmp (string compare) strcpy (string copy) and sprints() does go stuff with formated strings. there are also a number of tokenzer libs which will split the in put up for you.


What you are trying to do may be fairly simple using the String functions. below is some test code you can try.

//zoomkat 3-17-12
//simple button GET server code to control pins 5, 6, and 7
//for use with IDE 1.0
//open serial monitor to see what the arduino receives
//use the \ slash to escape the " in the html 
//address will look like when submited
//for use with W5100 based ethernet shields

#include <SPI.h>
#include <Ethernet.h>

//#include <Servo.h> 
//Servo myservo;  // create servo object to control a servo 

byte mac[] = { 
  0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; //physical mac address
byte ip[] = { 
  192, 168, 1, 102 }; // ip in lan
byte gateway[] = { 
  192, 168, 1, 1 }; // internet access via router
byte subnet[] = { 
  255, 255, 255, 0 }; //subnet mask
EthernetServer server(84); //server port

String readString; 


void setup(){

  pinMode(5, OUTPUT); //pin selected to control
  pinMode(6, OUTPUT); //pin selected to control
  pinMode(7, OUTPUT); //pin selected to control
  //start Ethernet
  Ethernet.begin(mac, ip, gateway, gateway, subnet);

  //enable serial data print 
  Serial.println("server LED test 1.0"); // so I can keep track of what is loaded

void loop(){
  // Create a client connection
  EthernetClient client = server.available();
  if (client) {
    while (client.connected()) {
      if (client.available()) {
        char c =;

        //read char by char HTTP request
        if (readString.length() < 100) {

          //store characters to string 
          readString += c; 

        //if HTTP request has ended
        if (c == '\n') {

          Serial.println(readString); //print to serial monitor for debuging 

            client.println("HTTP/1.1 200 OK"); //send new page
          client.println("Content-Type: text/html");

          client.println("<TITLE>Arduino GET test page</TITLE>");

          client.println("<H1>Zoomkat's simple Arduino button</H1>");

          // DIY buttons
          client.println("<a href=\"/?on1\"\">ON</a>"); 
          client.println("<a href=\"/?off1\"\">OFF</a>

          // mousedown buttons
<input type=\"button\" value=\"ON\" onmousedown=\"location.href ('/?on2');\"/>"); 
          client.println("<input type=\"button\" value=\"OFF\" onmousedown=\"location.href ('/?off2');\"/>");        

          // mousedown radio buttons

<input type=\"radio\" value=\"ON\" onmousedown=\"location.href ('/?on3');\"\">ON</>"); 
          client.println("<input type=\"radio\" value=\"OFF\" onmousedown=\"location.href ('/?off3');\"\">OFF</>");        


          //stopping client

          ///////////////////// control arduino pin
          if(readString.indexOf("on1") >0) {
            digitalWrite(5, HIGH);
            Serial.println("Led on1");
          if(readString.indexOf("off1") >0) {
            digitalWrite(5, LOW);
            Serial.println("Led off1");

          if(readString.indexOf("on2") >0) {
            digitalWrite(6, HIGH);
            Serial.println("Led on2");
          if(readString.indexOf("off2") >0) {
            digitalWrite(6, LOW);
            Serial.println("Led off2");

          if(readString.indexOf("on3") >0) {
            digitalWrite(7, HIGH);
            Serial.println("Led on3");
          if(readString.indexOf("off3") >0) {
            digitalWrite(7, LOW);
            Serial.println("Led off3");
          //clearing string for next read

Thanks zoomkat - this is basically what I ended up doing to avoid slowdowns I was experiencing when I finally figured out where I was going wrong. Everything works good now - even without a router. Thanks a lot for taking the time to comment!