/*
 Serwer WWW
 
 Prosty serwer WWW wyświetlający wartości analogowych pinów wejściowych.
 Serwer wykorzystuje moduł sieciowy dla płytki Arduino.
 
 Obwód:
 * Moduł sieciowy jest podłączony do pinów nr 10, 11, 12 i 13.
 * Piny wejściowe podłączone do pinów od A0 do A5 (opcjonalnie)
 
 Szkic z dnia 18 grudnia 2009
 Autor: David A. Mellis
 Modyfikacja: 4 września 2010
 autor modyfikacji: Tom Igoe
 
 */


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


// Poniżej należy wpisać adresy MAC i IP stosowanego modułu.
// Adres IP zależy od ustawień w sieci lokalnej:
byte mac[] = { 
  0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
[a]
byte ip[] = { 
  192,168,1, 177 };
[b]


// Inicjalizuje bibliotekę serwera w sieci Ethernet
// przy użyciu podanych adresu IP i numeru portu
// (80 jest domyślnym numerem portu protokołu HTTP):
Server server(80);


void setup()
{
  // uruchamia połączenie sieciowe i serwer WWW:
  Ethernet.begin(mac, ip);
  server.begin();
}


void loop()
{
  // nasłuchuje żądań klientów
  Client client = server.available();
  if (client) {
    // żądanie HTTP kończy się pustym wierszem
    boolean currentLineIsBlank = true;
    while (client.connected()) {
      if (client.available()) {
        char c = client.read();
        // jeśli otrzymano koniec wiersza (otrzymano znak
        // końca wiersza) i jeśli nowy wiersz jest pusty, żądanie HTTP zostało zakończone,
        // zatem można wysłać odpowiedź
        if (c == '\n' && currentLineIsBlank) {
          // wysyła standardowy nagłówek odpowiedzi HTTP
          client.println("HTTP/1.1 200 OK");
          client.println("Content-Type: text/html");
          client.println();


          // wysyła wartości poszczególnych wejściowych pinów analogowych
          for (int analogChannel = 0; analogChannel < 6; analogChannel++) {
            client.print("stan wejściowego pinu analogowego ");
            client.print(analogChannel);
            client.print(" to ");
            client.print(analogRead(analogChannel));
            client.println("<br />");
          }
          break;
        }
        if (c == '\n') {
          // początek nowego wiersza
          currentLineIsBlank = true;
        }
        else if (c != '\r') {
          // otrzymano znak w bieżącym wierszu
          currentLineIsBlank = false;
        }
      }
    }
    // przeglądarka WWW potrzebuje czasu na odebranie danych
    delay(1);
    // zamyka połączenie:
    client.stop();
  }
}

