Как сделать так, чтобы ссылка на видео появлялась в HTML-коде на Arduino с Ethernet Shield? - PullRequest
0 голосов
/ 06 марта 2012

Я в значительной степени новичок в коде Arduino, и у меня возникли проблемы со следующим кодом.Когда я компилирую его с Arduino 0022, ошибок нет.Если я получаю доступ к щиту Ethernet, я вижу страницу HTML в порядке.Беда в том, что ссылка на видео я хочу опубликовать в коде.Я могу видеть кадр, но ссылка никогда не появляется.в этом кадре я вижу только созданную HTML-страницу.Есть ли вероятность, что в коде или в HTML-формате есть ошибка?Есть ли конкретная библиотека, которую мне нужно использовать?заранее спасибо за помощь!

#include <SPI.h>
#include <Client.h>
#include <Ethernet.h>
#include <Server.h>
#include <Udp.h>
#include <Servo.h>
char Link[]= "http://www.anywebsite.com"; //video link
Servo tilt;
Servo pan;
int panpos = 90;
int tiltpos = 90;
byte mac[] = { 0xAA, 0xBB, 0xCC, 0xDD, 0xEE, 0xFF }; //physical mac address
byte ip[] = { 192, 128, 13, 169 };           // ip in lan
byte gateway[] = {  192, 128, 13,1 };            // internet access via router
byte subnet[] = { 255, 255, 255, 0 };                   //subnet mask
Server server(80);                                      //server port
String readString = String(30); //string for fetching data from address
void setup(){
  Ethernet.begin(mac, ip, gateway, subnet);
  Serial.begin(9600);
 tilt.attach(3);
pan.attach(9);
  tilt.write(90);
  pan.write(90);
}
void loop(){
// Create a client connection
Client client = server.available();
  if (client) {
    while (client.connected()) {
   if (client.available()) {
    char c = client.read();
     //read char by char HTTP request
    if (readString.length() < 100)
      {
        //store characters to string
        readString += c;
      }
        Serial.print(c);
        if (c == '\n') {
          if (readString.indexOf("?") <0)
          {
            //do nothing
          }
          else
          {           
             if(readString.indexOf("UP=UP") >0)
               {
                 movetiltupstep();
               }
            else if(readString.indexOf("DN=DN") >0)
               {
                 movetiltdownstep();
               }
             else if(readString.indexOf("LT=LT") >0)
               {
                 movepanleftstep();
               }
             else if(readString.indexOf("RT=RT") >0)
               {
                 movepanrightstep();
               }
             else if(readString.indexOf("CN=CN") >0)
           {
             center();
           }
      }
      // now output HTML data starting with standard header
      client.println("HTTP/1.1 200 OK");
      client.println("Content-Type: text/html");
      client.println();
      //set background to green
      client.print("<body style=background-color:blue>");
      client.println("<hr />");
      client.println("<center>");
      client.println("<h1>Camera control</h1>");
      client.println("<form method=get name=SERVO>");
      client.println("<input type=submit value=UP name=UP style=\"width:100px\"><br>");
      client.println("<input type=submit value=LT name=LT style=\"width:100px\"><input type=submit value=CN name=CN style=\"width:100px\"><input type=submit value=RT name=RT style=\"width:100px\"><br>");
      client.println("<input type=submit value=DN name=DN style=\"width:100px\">");
      client.println("<hr />");
      client.println("<iframe width= 640 height= 360  src= Link[]frameborder= 0  allowfullscreen></iframe>");
      client.println("</form>");
      client.println("</center>");
      client.println("</body></html>");
      //clearing string for next read
      readString="";
      //stopping client
      client.stop();
        }
      }
    }
  }
}
void movetiltupstep(){
  tiltpos = tilt.read();
  Serial.println(tiltpos);
  if (tiltpos >= 66)
  {
  tilt.write(tiltpos - 2);
  }
}
void movetiltdownstep(){
  tiltpos = tilt.read();
  Serial.println(tiltpos);
  if (tiltpos <= 116)
  {
  tilt.write(tiltpos + 2);
  }
}
void movepanleftstep(){
  panpos = pan.read();
  Serial.println(panpos);
  if (panpos >= 4)
  {
  pan.write(panpos - 4);
  }
}
void movepanrightstep(){
  panpos = pan.read();
  Serial.println(panpos);
  if (panpos <= 176)
  {
  pan.write(panpos + 4);
  }
}
void center(){
  panpos = pan.read();
  tiltpos = tilt.read();
  Serial.println(panpos);
  if (panpos < 90)
  {
   for(int i = panpos; i <= 90; i++) {
      pan.write(i);
    }
  }
  else if (panpos > 90)
  {
    for(int i = panpos; i >= 90; i--) {
      pan.write(i);
}
  }
  if (tiltpos < 90)
  {
    for(int i = tiltpos; i <= 90; i++) {
      tilt.write(i);
    }
  }
  else if (tiltpos > 90)
  {
    for(int i = tiltpos; i >= 90; i--) {
      tilt.write(i);
    }
  } 
}

1 Ответ

0 голосов
/ 07 марта 2012

Да, на самом деле ваш код не может работать. Давайте добавим appart неправильное форматирование строки («Ссылка []», которая соединена с «frameborder»), страница, которая должна начинаться с , что вам повезло оказаться в очень конкретном случае, когда Content-Length заголовок не требуется и так далее, и давайте сосредоточимся на том, что вы пытались сделать.

Вы пытались сделать то, что называется интерполяцией переменных: вы предполагали, что имя переменной «Link []» в строке будет заменено другой строкой. Это то, чего нет в C или C ++.

Есть несколько способов сделать то, что вы хотите (вы можете взглянуть на класс String, который существует с Arduino-019 http://arduino.cc/en/Reference/StringObject и то, что называется конкатенацией http://arduino.cc/en/Reference/StringConcat).

В вашем случае вы можете просто сделать это (не проверено, но должно объяснить причину):

client.print("<iframe width=640 height=360 src=");
client.print(Link); // Link is not between quotes!
client.println(" frameborder=0 allowfullscreen></iframe>");

Это менее красиво, чем вы хотели, но этого достаточно для того, что вам нужно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...