Ошибка при компиляции WebServer

iddqd649
Offline
Зарегистрирован: 15.08.2012

iddqd649
Offline
Зарегистрирован: 15.08.2012

Вот код

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

/************ ETHERNET STUFF ************/
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
byte ip[] = { 192, 168, 1, 177 };
char rootFileName[] = "index.htm";
EthernetServer server(80);

/************ 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(115200);

  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;
  
  EthernetClient 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, ".css") != 0)
             client.println("Content-Type: text/css");
         else if (strstr(filename, ".png") != 0)
             client.println("Content-Type: image/png");
          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 if (strstr(filename, ".3gp") != 0)
             client.println("Content-Type: video/mpeg");
         else if (strstr(filename, ".pdf") != 0)
             client.println("Content-Type: application/pdf");
         else if (strstr(filename, ".js") != 0)
             client.println("Content-Type: application/x-javascript");
         else if (strstr(filename, ".xml") != 0)
             client.println("Content-Type: application/xml");
         else
             client.println("Content-Type: text");

          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("<h2>File Not Found!</h2>");
           }
        break;
      }
    }
    // give the web browser time to receive the data
    delay(1);
    client.stop();
  }
}
 

 

iddqd649
Offline
Зарегистрирован: 15.08.2012

 Вот ошибка

 











D:\arduino-1.0.1\hardware\arduino\cores\arduino\Print.cpp: In member function 'virtual size_t Print::write(const uint8_t*, size_t)':
D:\arduino-1.0.1\hardware\arduino\cores\arduino\Print.cpp:37: error: invalid conversion from 'const unsigned char' to 'const char*'
D:\arduino-1.0.1\hardware\arduino\cores\arduino\Print.cpp:37: error:   initializing argument 1 of 'size_t Print::write(const char*)'
D:\arduino-1.0.1\hardware\arduino\cores\arduino\Print.cpp: In member function 'size_t Print::print(const __FlashStringHelper*)':
D:\arduino-1.0.1\hardware\arduino\cores\arduino\Print.cpp:49: error: invalid conversion from 'unsigned char' to 'const char*'
D:\arduino-1.0.1\hardware\arduino\cores\arduino\Print.cpp:49: error:   initializing argument 1 of 'size_t Print::write(const char*)'
D:\arduino-1.0.1\hardware\arduino\cores\arduino\Print.cpp: In member function 'size_t Print::print(const String&)':
D:\arduino-1.0.1\hardware\arduino\cores\arduino\Print.cpp:58: error: invalid conversion from 'char' to 'const char*'
D:\arduino-1.0.1\hardware\arduino\cores\arduino\Print.cpp:58: error:   initializing argument 1 of 'size_t Print::write(const char*)'
D:\arduino-1.0.1\hardware\arduino\cores\arduino\Print.cpp: In member function 'size_t Print::print(char)':
D:\arduino-1.0.1\hardware\arduino\cores\arduino\Print.cpp:70: error: invalid conversion from 'char' to 'const char*'
D:\arduino-1.0.1\hardware\arduino\cores\arduino\Print.cpp:70: error:   initializing argument 1 of 'size_t Print::write(const char*)'
D:\arduino-1.0.1\hardware\arduino\cores\arduino\Print.cpp: In member function 'size_t Print::print(long int, int)':
D:\arduino-1.0.1\hardware\arduino\cores\arduino\Print.cpp:91: error: invalid conversion from 'long int' to 'const char*'
D:\arduino-1.0.1\hardware\arduino\cores\arduino\Print.cpp:91: error:   initializing argument 1 of 'size_t Print::write(const char*)'
D:\arduino-1.0.1\hardware\arduino\cores\arduino\Print.cpp: In member function 'size_t Print::print(long unsigned int, int)':
D:\arduino-1.0.1\hardware\arduino\cores\arduino\Print.cpp:106: error: invalid conversion from 'long unsigned int' to 'const char*'
D:\arduino-1.0.1\hardware\arduino\cores\arduino\Print.cpp:106: error:   initializing argument 1 of 'size_t Print::write(const char*)'

 

AlexFisher
AlexFisher аватар
Offline
Зарегистрирован: 20.12.2011

У меня что-то такое было... Какая-то библиотека (кажется, ethernrt) была старая.