Go Down

Topic: Problem with ethernet shield and LCD screen (Read 1 time) previous topic - next topic

treebykooba

Hello,
I'm having a very strange problem using my ethernet shield, an lcd and a potentiometer. Any help would be soooo appreciated!!!
I want to be able to use the ethernet shield and at the same time use the potentiometer to change text on the lcd screen (sending html redirects when certain .htm files are accessed on the sdcard). I swear that I had this working no problem for awhile but when I went back into the program to make some changes (and later removing the changes) it's no longer working. The lcd screen only now refreshes with new text when a file is accessed on the sdcard. Why would that be? i am using the code for a webserver i found in the adafruit forums here...i will paste it below. Right now I'm just trying to get this very simple code to work in the "if (client.available())" statement so that I can do the html redirects with client.println. (right now none of this redirect stuff is in the code...just trying to get the text to work first)
Here is the simple code that isn't working in the webserver (but works on it's own):
Code: [Select]
   
int pot = analogRead(0);
   
if ((pot > 0)&&(pot < 400)) {
  lcd.clear();
  lcd.print("FIRST CHAMBER");
   
}    

 if ((pot > 401)&&(pot < 800)) {
   lcd.clear();
   lcd.print("SECOND CHAMBER");
 }
 
  if ((pot > 801)&&(pot < 1024)) {
    lcd.clear();
    lcd.print("THIRD CHAMBER");
  }
           


and here is the webserver code i found in the adafruit forums. You can see below where I used to have the if statements...i've tried placing them all over to no avail:


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

   /*
   * Web Server
   *
   * A simple web server that shows the value of the analog input pins.
   */

   #include <SdFat.h>
   #include <SdFatUtil.h>
   #include <Ethernet.h>
#include <LiquidCrystal.h>
   byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
   byte ip[] = { 192, 168, 1, 177 };
   char rootFileName[] = "index.htm";
   Server server(80);
LiquidCrystal lcd(7, 6, 5, 8, 3, 2);
   /************ SDCARD STUFF ************/
   Sd2Card card;
   SdVolume volume;
   SdFile root;
   SdFile file;

   // store error strings in flash to save RAM
   #define error(s) error_P(PSTR(s))

   void error_P(const char* str) {
     PgmPrint("error: ");
     SerialPrintln_P(str);
     if (card.errorCode()) {
       PgmPrint("SD error: ");
       Serial.print(card.errorCode(), HEX);
       Serial.print(',');
       Serial.println(card.errorData(), HEX);
     }
     while(1);
   }

   void setup() {
     Serial.begin(9600);
lcd.begin(16, 2);
lcd.print("booting up...");
     PgmPrint("Free RAM: ");
     Serial.println(FreeRam());
   
     // initialize the SD card at SPI_HALF_SPEED to avoid bus errors with
     // breadboards.  use SPI_FULL_SPEED for better performance.
     pinMode(10, OUTPUT);                       // set the SS pin as an output (necessary!)
     digitalWrite(10, HIGH);                    // but turn off the W5100 chip!

     if (!card.init(SPI_HALF_SPEED, 4)) error("card.init failed!");
   
     // initialize a FAT volume
     if (!volume.init(&card)) error("vol.init failed!");

     PgmPrint("Volume is FAT");
     Serial.println(volume.fatType(),DEC);
     Serial.println();
   
     if (!root.openRoot(&volume)) error("openRoot failed");

     // list file in root with date and size
     PgmPrintln("Files found in root:");
     root.ls(LS_DATE | LS_SIZE);
     Serial.println();
   
     // Recursive list of all directories
     PgmPrintln("Files found in all dirs:");
     root.ls(LS_R);
   
     Serial.println();
     PgmPrintln("Done");
   
     // Debugging complete, we start the server!
     Ethernet.begin(mac, ip);
     server.begin();
   }

   // How big our line buffer should be. 100 is plenty!
   #define BUFSIZ 100

   void loop()
   {
     char clientline[BUFSIZ];
     char *filename;
     int index = 0;
     int image = 0;

     Client client = server.available();
     
     if (client) {                                
       // an http request ends with a blank line
       boolean current_line_is_blank = true;
     
       // reset the input buffer
       index = 0;
     
       while (client.connected()) {
         if (client.available()) {
           char c = client.read();
         
           // If it isn't a new line, add the character to the buffer
           if (c != '\n' && c != '\r') {
             clientline[index] = c;
             index++;
             // are we too big for the buffer? start tossing out data
             if (index >= BUFSIZ)
               index = BUFSIZ -1;
           
             // continue to read more data!
             continue;
           }
         
           // got a \n or \r new line, which means the string is done
           clientline[index] = 0;
           filename = 0;
         
           // Print it out for debugging
           Serial.println(clientline);
         
           // Look for substring such as a request to get the root file
           if (strstr(clientline, "GET / ") != 0) {
             filename = rootFileName;
           }
           if (strstr(clientline, "GET /") != 0) {
             // this time no space after the /, so a sub-file
           
             if (!filename) filename = clientline + 5; // look after the "GET /" (5 chars)
             // a little trick, look for the " HTTP/1.1" string and
             // turn the first character of the substring into a 0 to clear it out.
             (strstr(clientline, " HTTP"))[0] = 0;
           
             // print the file we want
             Serial.println(filename);

             if (! file.open(&root, filename, O_READ)) {
               client.println("HTTP/1.1 404 Not Found");
               client.println("Content-Type: text/html");
               client.println();
               client.println("<h2>File Not Found!</h2>");
               break;
             }
                                             
             Serial.println("Opened!");
           
             client.println("HTTP/1.1 200 OK");
             if (strstr(filename, ".htm") != 0)
                client.println("Content-Type: text/html");
             else if (strstr(filename, ".jpg") != 0)
                client.println("Content-Type: image/jpeg");
            else if (strstr(filename, ".gif") != 0)
                client.println("Content-Type: image/gif");
            else
                client.println("Content-Type: text");

             client.println();
                 
                 
///////////////i used to have the simple potentiometer/lcd code here and it worked for
///////////////the longest time...now new text only appears if a file is accessed
 
                 
                 
             int16_t c;
             while ((c = file.read()) >= 0) {
                 // uncomment the serial to debug (slow!)
                 //Serial.print((char)c);
                 client.print((char)c);
             }
             file.close();
           } else {
             // everything else is a 404
             client.println("HTTP/1.1 404 Not Found");
             client.println("Content-Type: text/html");
             client.println();
             client.println("<h2>File Not Found!</h2>");
           }
           break;
         }
       }
       // give the web browser time to receive the data
       delay(1);
       
       client.stop();
     }
     
       
     
   }



Thanks so much for any help!!!

Go Up