hi everyone... im trying to finish my final year project. the project is called Wireless Notice Board. The idea is to display text message on a lcd from a webserver.
im using :
arduino uno
ethernet shield
sd card
lcd 16x2
this is my code...pls help me someone , i have 3 more days before the final marking
#include <SPI.h>
#include <Ethernet.h>
#include <SD.h>
#include <LiquidCrystal_I2C.h>
// MAC address from Ethernet shield sticker under board
// size of buffer used to capture HTTP requests
#define REQ_BUF_SZÂ 90
// size of buffer that stores a line of text for the LCD + null terminator
#define LCD_BUF_SZÂ 17
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress ip(192, 168, 43, 47); // IP address, may need to change depending on network
EthernetServer server(80);Â // create a server at port 80
File webFile;Â Â Â Â Â Â Â Â Â Â // the web page file on the SD card
char HTTP_req[REQ_BUF_SZ] = {0}; // buffered HTTP request stored as null terminated string
char req_index = 0;Â Â Â Â Â Â Â // index into HTTP_req buffer
char lcd_buf_1[LCD_BUF_SZ] = {0};// buffer to save LCD line 1 text to
char lcd_buf_2[LCD_BUF_SZ] = {0};// buffer to save LCD line 2 text to
LiquidCrystal_I2C lcd(0x3F, 2, 1, 0, 4 ,5, 6, 7, 3, POSITIVE);
void setup()
{
  Ethernet.begin(mac, ip); // initialize Ethernet device
  server.begin();     // start to listen for clients
  Serial.begin(9600);   // for debugging
 Â
  pinMode(10, OUTPUT);
  digitalWrite(10, HIGH);
 Â
  Serial.begin(115200);   // for debugging
  lcd.begin(16, 2);
  // Message on LCD
  lcd.print(F("Initializing"));
 Â
  // initialize SD card
  Serial.println("Initializing SD card...");
  if (!SD.begin(4)) {
    Serial.println("ERROR - SD card initialization failed!");
    lcd.print(F("SD init failed"));
    return;  // init failed
  }
  Serial.println("SUCCESS - SD card initialized.");
  // check for index.htm file
  if (!SD.exists("index.htm")) {
    Serial.println("ERROR - Can't find index.htm file!");
    return; // can't find index file
  }
  Serial.println("SUCCESS - Found index.htm file.");
  Ethernet.begin(mac, ip); // initialize Ethernet device
  server.begin();     // start to listen for clients
  // End of initialization message on LCD + print IP address
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print(F("Done."));
  lcd.setCursor(0, 1);
  lcd.print(ip);
}
void loop()
{
  EthernetClient client = server.available(); // try to get client
  if (client) { // got client?
    boolean currentLineIsBlank = true;
    while (client.connected()) {
      if (client.available()) { // client data available to read
        char c = client.read(); // read 1 byte (character) from client
        // last line of client request is blank and ends with \n
        // respond to client only after last line received
        if (c == '\n' && currentLineIsBlank) {
          // send a standard http response header
          client.println("HTTP/1.1 200 OK");
          client.println("Content-Type: text/html");
          client.println("Connection: close");
          client.println();
          // send web page
          webFile = SD.open("index.htm");    // open web page file
          if (webFile) {
            while(webFile.available()) {
              client.write(webFile.read()); // send web page to client
            }
            webFile.close();
          }
          break;
        }
        // every line of text received from the client ends with \r\n
        if (c == '\n') {
          // last character on line of received text
          // starting new line with next character read
          currentLineIsBlank = true;
        }
        else if (c != '\r') {
          // a text character was received from client
          currentLineIsBlank = false;
        }
      } // end if (client.available())
    } // end while (client.connected())
    delay(1);   // give the web browser time to receive the data
    client.stop(); // close the connection
  } // end if (client)
}
// get the two strings for the LCD from the incoming HTTP GET request
boolean GetLcdText(char *line1, char *line2, int len)
{
 boolean got_text = false;  // text received flag
 char *str_begin;      // pointer to start of text
 char *str_end;       // pointer to end of text
 int str_len = 0;
 int txt_index = 0;
 char *current_line;
 current_line = line1;
 // get pointer to the beginning of the text
 str_begin = strstr(HTTP_req, "&L1=");
 for (int j = 0; j < 2; j++) { // do for 2 lines of text
  if (str_begin != NULL) {
   str_begin = strstr(str_begin, "="); // skip to the =
   str_begin += 1;           // skip over the =
   str_end = strstr(str_begin, "&");
   if (str_end != NULL) {
    str_end[0] = 0; // terminate the string
    str_len = strlen(str_begin);
    // copy the string to the buffer and replace %20 with space ' '
    for (int i = 0; i < str_len; i++) {
     if (str_begin[i] != '%') {
      if (str_begin[i] == 0) {
       // end of string
       break;
      }
      else {
       current_line[txt_index++] = str_begin[i];
       if (txt_index >= (len - 1)) {
        // keep the output string within bounds
        break;
       }
      }
     }
     else {
      // replace %20 with a space
      if ((str_begin[i + 1] == '2') && (str_begin[i + 2] == '0')) {
       current_line[txt_index++] = ' ';
       i += 2;
       if (txt_index >= (len - 1)) {
        // keep the output string within bounds
        break;
       }
      }
     }
    } // end for i loop
    // terminate the string
    current_line[txt_index] = 0;
    if (j == 0) {
     // got first line of text, now get second line
     str_begin = strstr(&str_end[1], "L2=");
     current_line = line2;
     txt_index = 0;
    }
    got_text = true;
   }
  }
 } // end for j loop
 return got_text;
}
// sets every element of str to 0 (clears array)
void StrClear(char *str, char length)
{
  for (int i = 0; i < length; i++) {
    str[i] = 0;
  }
}
// searches for the string sfind in the string str
// returns 1 if string found
// returns 0 if string not found
char StrContains(char *str, char *sfind)
{
  char found = 0;
  char index = 0;
  char len;
  len = strlen(str);
 Â
  if (strlen(sfind) > len) {
    return 0;
  }
  while (index < len) {
    if (str[index] == sfind[found]) {
      found++;
      if (strlen(sfind) == found) {
        return 1;
      }
    }
    else {
      found = 0;
    }
    index++;
  }
  return 0;
}