#include #include #include #include #include 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; boolean skuare; boolean sirkle; boolean triangl; // 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); } byte cuadra[8] = { B00000, B11111, B10001, B10001, B10001, B10001, B11111, B00000 }; byte triangulo[8] = { B00000, B00100, B01010, B01010, B10001, B10001, B11111, B00000 }; byte circulo[8] = { B00000, B01110, B10001, B10001, B10001, B10001, B01110, B00000 }; void setup() { Serial.begin(9600); lcd.createChar(0, cuadra); lcd.createChar(1, triangulo); lcd.createChar(2, circulo); lcd.begin(16, 2); lcd.print("turn knob..."); 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 () { int shape; int pot = analogRead(0); if ((pot > 0)&&(pot < 100)) { lcd.clear(); lcd.clear(); lcd.setCursor(0,0); lcd.write(0); lcd.write(1); lcd.write(1); lcd.write(0); lcd.write(2); lcd.write(0); lcd.write(2); lcd.write(0); lcd.write(0); lcd.write(0); lcd.write(0); lcd.write(2); lcd.write(0); lcd.write(0); lcd.write(0); lcd.write(2); lcd.write(0); lcd.setCursor(0,1); lcd.write(1); lcd.write(0); lcd.write(1); lcd.write(0); lcd.write(0); lcd.write(0); lcd.write(0); lcd.write(0); lcd.write(1); lcd.write(0); lcd.write(0); lcd.write(1); lcd.write(0); lcd.write(1); lcd.write(0); lcd.write(0); delay(40); shape = 5; } if ((pot > 101)&&(pot < 200)) { lcd.clear(); lcd.clear(); lcd.setCursor(0,0); lcd.write(0); lcd.write(0); lcd.write(0); lcd.write(0); lcd.write(0); lcd.write(0); lcd.write(0); lcd.write(0); lcd.write(0); lcd.write(0); lcd.write(0); lcd.write(0); lcd.write(0); lcd.write(0); lcd.write(0); lcd.write(0); lcd.write(0); lcd.setCursor(0,1); lcd.write(0); lcd.write(0); lcd.write(0); lcd.write(0); lcd.write(0); lcd.write(0); lcd.write(0); lcd.write(0); lcd.write(0); lcd.write(0); lcd.write(0); lcd.write(0); lcd.write(0); lcd.write(0); lcd.write(0); lcd.write(0); delay(40); shape = 0; } if ((pot > 201)&&(pot < 300)) { lcd.clear(); lcd.clear(); lcd.setCursor(0,0); lcd.write(1); lcd.write(1); lcd.write(1); lcd.write(1); lcd.write(2); lcd.write(0); lcd.write(2); lcd.write(2); lcd.write(2); lcd.write(2); lcd.write(0); lcd.write(0); lcd.write(1); lcd.write(0); lcd.write(1); lcd.write(0); lcd.write(0); lcd.setCursor(0,1); lcd.write(0); lcd.write(0); lcd.write(0); lcd.write(0); lcd.write(0); lcd.write(0); lcd.write(1); lcd.write(1); lcd.write(0); lcd.write(2); lcd.write(0); lcd.write(0); lcd.write(0); lcd.write(0); lcd.write(0); lcd.write(0); delay(40); shape = 5; } if ((pot > 301)&&(pot < 400)) { lcd.clear(); lcd.clear(); lcd.setCursor(0,0); lcd.write(2); lcd.write(0); lcd.write(1); lcd.write(2); lcd.write(0); lcd.write(1); lcd.write(2); lcd.write(0); lcd.write(1); lcd.write(2); lcd.write(0); lcd.write(1); lcd.write(2); lcd.write(0); lcd.write(1); lcd.write(2); lcd.write(0); lcd.setCursor(0,1); lcd.write(1); lcd.write(2); lcd.write(0); lcd.write(1); lcd.write(2); lcd.write(0); lcd.write(1); lcd.write(2); lcd.write(0); lcd.write(1); lcd.write(2); lcd.write(0); lcd.write(1); lcd.write(2); lcd.write(0); lcd.write(1); delay(40); shape = 5; } if ((pot > 401)&&(pot < 500)) { lcd.clear(); lcd.setCursor(0,0); lcd.write(1); lcd.write(1); lcd.write(1); lcd.write(1); lcd.write(1); lcd.write(1); lcd.write(1); lcd.write(1); lcd.write(1); lcd.write(1); lcd.write(1); lcd.write(1); lcd.write(1); lcd.write(1); lcd.write(1); lcd.write(1); lcd.write(1); lcd.setCursor(0,1); lcd.write(1); lcd.write(1); lcd.write(1); lcd.write(1); lcd.write(1); lcd.write(1); lcd.write(1); lcd.write(1); lcd.write(1); lcd.write(1); lcd.write(1); lcd.write(1); lcd.write(1); lcd.write(1); lcd.write(1); lcd.write(1); delay(40); shape = 1; } if ((pot > 501)&&(pot < 600)) { lcd.clear(); lcd.clear(); lcd.setCursor(0,0); lcd.write(1); lcd.write(1); lcd.write(1); lcd.write(1); lcd.write(1); lcd.write(1); lcd.write(1); lcd.write(1); lcd.write(1); lcd.write(1); lcd.write(1); lcd.write(1); lcd.write(1); lcd.write(1); lcd.write(1); lcd.write(1); lcd.write(1); lcd.setCursor(0,1); lcd.write(2); lcd.write(0); lcd.write(2); lcd.write(0); lcd.write(2); lcd.write(0); lcd.write(2); lcd.write(0); lcd.write(2); lcd.write(0); lcd.write(2); lcd.write(0); lcd.write(2); lcd.write(0); lcd.write(2); lcd.write(0); delay(40); shape = 5; } if ((pot > 601)&&(pot < 700)) { lcd.clear(); lcd.clear(); lcd.setCursor(0,0); lcd.write(1); lcd.write(1); lcd.write(1); lcd.write(1); lcd.write(1); lcd.write(1); lcd.write(1); lcd.write(1); lcd.write(1); lcd.write(1); lcd.write(1); lcd.write(1); lcd.write(1); lcd.write(1); lcd.write(1); lcd.write(1); lcd.write(1); lcd.setCursor(0,1); lcd.write(2); lcd.write(2); lcd.write(2); lcd.write(2); lcd.write(2); lcd.write(2); lcd.write(2); lcd.write(2); lcd.write(2); lcd.write(2); lcd.write(2); lcd.write(2); lcd.write(2); lcd.write(2); lcd.write(2); lcd.write(2); delay(40); shape = 5; } if ((pot > 701)&&(pot < 800)) { lcd.clear(); lcd.clear(); lcd.setCursor(0,0); lcd.write(2); lcd.write(2); lcd.write(2); lcd.write(2); lcd.write(2); lcd.write(2); lcd.write(2); lcd.write(2); lcd.write(2); lcd.write(2); lcd.write(2); lcd.write(2); lcd.write(2); lcd.write(2); lcd.write(2); lcd.write(2); lcd.write(2); lcd.setCursor(0,1); lcd.write(0); lcd.write(0); lcd.write(0); lcd.write(0); lcd.write(0); lcd.write(0); lcd.write(0); lcd.write(0); lcd.write(0); lcd.write(0); lcd.write(0); lcd.write(0); lcd.write(0); lcd.write(0); lcd.write(0); lcd.write(0); delay(40); shape = 5; } if ((pot > 801)&&(pot < 900)) { lcd.clear(); lcd.setCursor(0,0); lcd.write(2); lcd.write(2); lcd.write(2); lcd.write(2); lcd.write(2); lcd.write(2); lcd.write(2); lcd.write(2); lcd.write(2); lcd.write(2); lcd.write(2); lcd.write(2); lcd.write(2); lcd.write(2); lcd.write(2); lcd.write(2); lcd.write(2); lcd.setCursor(0,1); lcd.write(2); lcd.write(2); lcd.write(2); lcd.write(2); lcd.write(2); lcd.write(2); lcd.write(2); lcd.write(2); lcd.write(2); lcd.write(2); lcd.write(2); lcd.write(2); lcd.write(2); lcd.write(2); lcd.write(2); lcd.write(2); delay(40); shape = 2; } if ((pot > 901)&&(pot < 1024)) { lcd.clear(); lcd.clear(); lcd.setCursor(0,0); lcd.write(0); lcd.write(1); lcd.write(2); lcd.write(0); lcd.write(1); lcd.write(2); lcd.write(0); lcd.write(1); lcd.write(2); lcd.write(0); lcd.write(1); lcd.write(2); lcd.write(0); lcd.write(1); lcd.write(2); lcd.write(0); lcd.write(1); lcd.setCursor(0,1); lcd.write(2); lcd.write(0); lcd.write(1); lcd.write(2); lcd.write(0); lcd.write(1); lcd.write(2); lcd.write(0); lcd.write(1); lcd.write(2); lcd.write(0); lcd.write(1); lcd.write(2); lcd.write(0); lcd.write(1); lcd.write(2); delay(40); shape = 5; } 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(); Serial.println(shape); // 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("

keep turning the knob and scanning the codes

"); 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(); if ((strstr(filename, "one.htm") !=0)&&(shape==0)){ client.println(""); client.println(""); client.println(""); } if ((strstr(filename, "one.htm") !=0)&&(shape==1)){ client.println(""); client.println(""); client.println(""); } if ((strstr(filename, "one.htm") !=0)&&(shape==2)){ client.println(""); client.println(""); client.println(""); } if ((strstr(filename, "two.htm") !=0)&&(shape==0)){ client.println(""); client.println(""); client.println(""); } if ((strstr(filename, "two.htm") !=0)&&(shape==1)){ client.println(""); client.println(""); client.println(""); } if ((strstr(filename, "two.htm") !=0)&&(shape==2)){ client.println(""); client.println(""); client.println(""); } if ((strstr(filename, "three.htm") !=0)&&(shape==0)){ client.println(""); client.println(""); client.println(""); } if ((strstr(filename, "three.htm") !=0)&&(shape==1)){ client.println(""); client.println(""); client.println(""); } if ((strstr(filename, "three.htm") !=0)&&(shape==2)){ client.println(""); client.println(""); client.println(""); } //// 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("

keep turning the knob and scanning the codes

"); } break; } } // give the web browser time to receive the data delay(1); client.stop(); } }