Arduino webserver servo sturing lukt niet

Status
Niet open voor verdere reacties.

mrnico

Gebruiker
Lid geworden
27 okt 2010
Berichten
109
Hallo ik heb een probleem met arduino.

Ben een redelijke beginner die vaak boel kan bereiken met knippen en plakken.
Alleen loop nu tegen een probleem die ik niet onder controle krijg.
Dus hoop ik dat er hier iemand hulp kan bieden.

Ik wil via simpele webserver een servo naar een waarde sturen met een Slider.
heb wel slider kunnen krijgen maar de terugkoppeling naar arduino lukt me niet.

Deel van de Slider.

Code:
            // slider voor servo positie
           client.println("<p>Position: <span id=\"servoPos\"></span></p>"); 
           client.println("<div class='slidecontainer'>"); 
           client.println("<input type=\'range\' min=\'0\' max=\'180\' class=\'slider\' id=\'myRange\' onchange=\'(this.value)\''/>");
           client.println("<p>Value: <span id='demo'></span></p>");
           client.println("</div>");
           client.println("<script> var slider = document.getElementById('myRange'); var output = document.getElementById('demo'); output.innerHTML = slider.value; slider.oninput = function() {output.innerHTML = this.value;}</script>");
Het stuk dat de waarde uit de webserver moet halen.
Code:
        // zou de servo moeten sturen!!!
        
          if(header.indexOf("GET /?value=")>=0) {
              pos1 = header.indexOf('=');
              pos2 = header.indexOf('&');
              valueString = header.substring(pos1+1, pos2);
              
              //Rotate the servo
              myservo.write(valueString.toInt());
              Serial.println(valueString); 
            }         
            // The HTTP response ends with another blank line
            client.println();
            
          
            //clearing string for next read
            readString="";

De totale code

Code:
#include <SPI.h>
#include <Ethernet.h>
#include <Servo.h> 



int led = 4;
Servo microservo; 
Servo myservo;
int pos = 0; 
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };        //physical mac address
byte ip[] = { 192, 168, 178, 33 };                          // ip in lan (that's what you need to use in your browser. ("192.168.1.178")
byte gateway[] = { 192, 168, 178, 1 };                      // internet access via router
byte subnet[] = { 255, 255, 255, 0 };                       //subnet mask
EthernetServer server(80);                                   //server port     


String readString;
String header;

// Decode HTTP GET value
String valueString = String(5);
int pos1 = 0;
int pos2 = 0;
static const int servoPin = 5;



void setup() {
 // Open serial communications and wait for port to open:
  Serial.begin(9600);
   while (!Serial) {
    ; // wait for serial port to connect. Needed for Leonardo only
  }
  pinMode(led, OUTPUT);
  microservo.attach(7);
  myservo.attach(servoPin);
  // start the Ethernet connection and the server:
  Ethernet.begin(mac, ip, gateway, subnet);
  server.begin();
  Serial.print("server is at ");
  Serial.println(Ethernet.localIP());
}


void loop() {
  // Create a client connection
  EthernetClient 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 HTTP request has ended
         if (c == '\n') {          
           Serial.println(readString); //print to serial monitor for debuging
     
           client.println("HTTP/1.1 200 OK"); //send new page
           client.println("Content-Type: text/html");
           client.println();     
           client.println("<HTML>");
           client.println("<HEAD>");
           client.println("<link rel='stylesheet' type='text/css' href='http://randomnerdtutorials.com/ethernetcss.css' />");
           client.println("<TITLE>Test Spoort</TITLE>");
           client.println("<style>.slidecontainer  background: #d3d3d3;  outline: none;  opacity: 0.7;  -webkit-transition: .2s;  transition: opacity .2s;}</style>");
           client.println("</HEAD>");
           client.println("<BODY>");
           client.println("<H1>Test Spoor</H1>");
           client.println("<hr />");
           client.println("<br />");            
           client.println("<br />");  
           client.println("<a href=\"/?button1on\"\">Turn On LED</a>");
           client.println("<a href=\"/?button1off\"\">Turn Off LED</a><br />");   
           client.println("<br />");     
           client.println("<br />"); 
           client.println("<a href=\"/?button2on\"\">Rotate Left</a>");
           client.println("<a href=\"/?button2off\"\">Rotate Right</a><br />");
           client.println("<br />"); 
            


            // slider voor servo positie
           client.println("<p>Position: <span id=\"servoPos\"></span></p>"); 
           client.println("<div class='slidecontainer'>"); 
           client.println("<input type=\'range\' min=\'0\' max=\'180\' class=\'slider\' id=\'myRange\' onchange=\'(this.value)\''/>");
           client.println("<p>Value: <span id='demo'></span></p>");
           client.println("</div>");
           client.println("<script> var slider = document.getElementById('myRange'); var output = document.getElementById('demo'); output.innerHTML = slider.value; slider.oninput = function() {output.innerHTML = this.value;}</script>");
           
           
           



           
           client.println("</BODY>");
           client.println("</HTML>");
     
           delay(1);
           //stopping client
           client.stop();
           //controls the Arduino if you press the buttons
           if (readString.indexOf("?button1on") >0){
               digitalWrite(led, HIGH);
           }
           if (readString.indexOf("?button1off") >0){
               digitalWrite(led, LOW);
           }
           //if (readString.indexOf("?button2on") >0){
             //   for(pos = 0; pos < 180; pos += 3)  // goes from 0 degrees to 180 degrees 
               // {                                  // in steps of 1 degree 
                 // microservo.write(pos);              // tell servo to go to position in variable 'pos' 
                  //delay(15);                       // waits 15ms for the servo to reach the position 
                //} 
          // }
           //if (readString.indexOf("?button2off") >0){
             //   for(pos = 180; pos>=1; pos-=3)     // goes from 180 degrees to 0 degrees 
              //  {                                
               //   microservo.write(pos);              // tell servo to go to position in variable 'pos' 
                //  delay(15);                       // waits 15ms for the servo to reach the position 
               // } 
           //}



        // zou de servo moeten sturen!!!
        
          if(header.indexOf("GET /?value=")>=0) {
              pos1 = header.indexOf('=');
              pos2 = header.indexOf('&');
              valueString = header.substring(pos1+1, pos2);
              
              //Rotate the servo
              myservo.write(valueString.toInt());
              Serial.println(valueString); 
            }         
            // The HTTP response ends with another blank line
            client.println();
            
          
            //clearing string for next read
            readString="";  
           
         }
 
Laatst bewerkt:
En heb je al de requests bekeken?
 
Om een -module met Arduino te programmeren, gebruikt u de bibliotheek die beschikbaar is in Arduino IDE.

Om deze bibliotheek te gebruiken, moeten we eerst deze bibliotheek in Arduino IDE installeren door naar Arduino's bibliotheekmanager te gaan. Open Arduino IDE, ga naar Tools > Manage Libraries.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan