Arduino webserver servo sturing lukt niet

Arduino specifieke Software
Berichten: 1
Geregistreerd: 26 Nov 2022, 14:20

Arduino webserver servo sturing lukt niet

Berichtdoor Mrnico » 26 Nov 2022, 14:30

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: Alles selecteren
// 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: Alles selecteren
// 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: Alles selecteren
#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=""; 
           
         }


Het is waarschijnlijk een rommelige code zo maar gaat mij er om dat ik het werkend krijg.

Advertisement

Berichten: 4064
Geregistreerd: 16 Okt 2013, 14:31
Woonplaats: s hertogenbosch

Re: Arduino webserver servo sturing lukt niet

Berichtdoor shooter » 27 Nov 2022, 14:11

is valuestring maximaal 180 en een int of float? en dan aub ook alleen een verandering doorsturen naar de servo begin eens met elke seconde naar de servo sturen wellicht komen er andere getallen binnen zoals nul en dan beweegt er maar weinig
een makkelijke manier is om er een delay (1000) tussen te zetten als proef.
paul deelen
shooter@home.nl

Berichten: 80
Geregistreerd: 02 Nov 2022, 13:03

Re: Arduino webserver servo sturing lukt niet

Berichtdoor ThHe » 18 Dec 2022, 00:59

Misschien het statement Serial.println(valueString); wat uitbreiden voor een beter inzicht!!

Serial.println("H[" + header + "]");
Serial.println("V[" + valueString + "]");
Serial.print("pos1:");
Serial.print(pos1);
Serial.print(" pos2:");
Serial.println(pos2);
Serial.println(header.substring(pos1+1));

Terug naar Arduino software

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 15 gasten