Final Project

For my final project I wanted to use an ethernet shield, SD card, and Light sensor to create a server with pictures of the sun and moon at different times of the day. I wanted the images to be change based on the changing values of the light sensor. The images that were supposed to be displayed can be shown through a hologram pyramid and rendered into a visual similar to a hologram. ¬†However, I came across multiple setbacks that prevented me from completely finishing the project. At first I was able to send sensor data to the server without any issues. It wasn’t until I tried to include the pictures that I ran into problems.¬†¬†Initially I was using a MKR1000 to create the server, but they are incapable of storing any images on them. I then switched to an ethernet shield and attempted to use an sd card to store the images on. The SD card that I attempted to use was incompatible with the ethernet shield. Once I acquired the correct sd car I then ran into complications sending data to the server. In a few moments of luck the server would actually work, however the time it took for the server to open the different images was almost 15 to 20 minutes basically making the project ineffective. I discovered that Arduino was having trouble converting the Strings that were created into Chars.

 

Here is an image from when it was workingIMG_0644

 

Here is an image of the error that keep recieving

IMG_0041

 

 

 

 

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


// size of buffer used to capture HTTP requests
#define REQ_BUF_SZ   20

// MAC address from Ethernet shield sticker under board
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress ip(10, 208, 7, 37); // IP address, may need to change depending on network
EthernetServer server(80);  // create a server at port 80
File webFile;
char HTTP_req[REQ_BUF_SZ] = {0}; // buffered HTTP request stored as null terminated string
char req_index = 0;              // index into HTTP_req buffer



  



void setup()
{
    // disable Ethernet chip
    pinMode(10, OUTPUT);
    digitalWrite(10, HIGH);
    
    Serial.begin(9600);       // for debugging
    
    // initialize SD card
    Serial.println("Initializing SD card...");
    if (!SD.begin(4)) {
        Serial.println("ERROR - SD card initialization 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
}

void loop()
{
    EthernetClient client = server.available();  // try to get client


int analogChannel=0;
int sensor1 = analogRead(analogChannel);
    
    
    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
                // buffer first part of HTTP request in HTTP_req array (string)
                // leave last element in array as 0 to null terminate string (REQ_BUF_SZ - 1)
                if (req_index < (REQ_BUF_SZ - 1)) {
                    HTTP_req[req_index] = c;          // save HTTP request character
                    req_index++;
                }
                // print HTTP request character to serial monitor
                Serial.print(c);
                // last line of client request is blank and ends with n
                // respond to client only after last line received
                if (c == 'n' && currentLineIsBlank) {
                    // open requested web page file
                    if (StrContains(HTTP_req, "GET / ")
                                 || StrContains(HTTP_req, "GET /index.htm")) {
                        client.println("HTTP/1.1 200 OK");
                        client.println("Content-Type: text/html");
                        client.println("Connnection: close");
                        client.println();
                        webFile = SD.open("index.htm");        // open web page file
                    }
                    
                    
                    
                    
                    
                    if (sensorReading >350 && sensorReading<=450){
            client.println(" GET / moon.jpg");
          
          webFile = SD.open("moon.jpg");
                        if (webFile) {
                            client.println("HTTP/1.1 200 OK");
                            client.println();
                        }
          
          





         
          if(sensorReading>600 && sensorReading<=750){
            client.println("GET /page2.htm"); 
client.println("HTTP/1.1 200 OK");
                        client.println("Content-Type: text/htm");
                        client.println("Connnection: close");
                        client.println();
                        webFile = SD.open("page2.htm");
          }
         
                    
                   
                    
                    }


                    
                    if (webFile) {
                        while(webFile.available()) {
                            client.write(webFile.read()); // send web page to client
                        }
                        webFile.close();
                    }
                    // reset buffer index and all buffer elements to 0
                    req_index = 0;
                    StrClear(HTTP_req, REQ_BUF_SZ);
                    break;
                }
                // every line of text received from the client ends with rn
                if (c == 'n' && currentLineIsBlank) {
                    // last character on line of received text
                    // starting new line with next character read
                  
                
                
                
                
                
                } 
                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)
}

// 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;
}

Leave a Reply