Go Down

Topic: Salir de un ciclo while+Arduino ethernet (Read 95 times) previous topic - next topic

juanITTOL

hola foro, tengo un problema con un codigo de arduino, estoy usando ethernet, practicamente es para controlar un motor a pasos en modo automatico y manual, en el automatico yo decido la posicion y en el manual lo muevo con un pot, el problema es que cuando entra en el modo manual (ciclo while), este ya no puede salir de ahí y arduino ya no enviará otra linea de caracteres http (ya que de ahi obtengo la información para hacer el cambio de modo manual- auto), mi pregunta es, que se podra agregar para que arduino obedezca ese cambio, gracias, adjuto el codigo.


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

#include "AccelStepper.h"

        AccelStepper stepper(1, 9, 8)
       
        int val = 0;
        int previous = 0;
        int long newval = 0;   
        int option;
       
        String readString;  // Cadena para lectura de los datos.
        int  i2= 6;   
        int  i1=8;
        int PWM = 5;     //pin para variar la velocidad mediante pwm eneble del modulo
        int contador = 0;
        int pulso; //cantidad de ticks que va girar motor
        int avance;
        byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
       
        IPAddress ip(169, 254, 187, 250); // Mi dirección (JASR, 180919, 23:41). Esta se pone en el navegador
       
        EthernetServer server(80);    // Puerto 80 por defecto para HTTP
       
        void setup() {
       
          stepper.setMaxSpeed(3600);  // Set speed fast enough to follow pot rotation
          stepper.setAcceleration(3600);
       
         
          Ethernet.begin(mac, ip);    //inicializa la conexión Ethernet y el servidor
          server.begin();
          Serial.begin(9600);
          pinMode(i1,OUTPUT);
          pinMode(12,OUTPUT);
         
        }
void loop() {
  // Crea una conexion Cliente
  EthernetClient cliente = server.available(); // Inicializa cliente como servidor ethernet
  if (cliente) {
    byte x = 0;
    while (cliente.connected()) {   
      if (cliente.available()) {
        char c = cliente.read();

        //Lee caracter por caracter HTTP (Esta cadena se genera cuando se acciona el botón enviar)
        // Aparece en el campo de texto de la URL (en el navegador).
        if (readString.length() < 150) {
          //Almacena los caracteres a un String
          readString += c;         
         }

         // si el requerimiento HTTP fue finalizado
         if (c == '\n') {               
          cliente.println("<!DOCTYPE html>");
          //Página Web en HTML
         // cliente.println("<meta http-equiv='refresh' content'=5'/>");
          cliente.println("<html>");
          cliente.println("<head>");
          cliente.println("<title>Control de un eje lineal</title>");
          cliente.println(" <style>");
          cliente.println("body {");
          cliente.println("background-color: rgb(0,0,255);");
          cliente.println("}");
          cliente.println("h1 {");
          cliente.println("color: rgb(42,159,255);");
          cliente.println("font-family: verdana;");
          cliente.println("font-size: 300%;");
          cliente.println("}");
          cliente.println("h2  {");
          cliente.println("color: rgb(0,240,120)");
          cliente.println("font-family: courier;");
          cliente.println("font-size: 160%;");
          cliente.println("}");
          cliente.println(" </style>");
          cliente.println("<H1 align=center> ININ Mx</H1>");
          cliente.println("<H2 align=center> CONTROL DE EJE MEDIANTE SERVIDOR WEB</H2>");
          cliente.println(" <br>");
          cliente.println("<form action=   >");
          cliente.println("<tr>");
         
          cliente.println("<table align= center style= \"width:220px;border:0px solid red;\">");
          cliente.println(" <tr>");
          cliente.println("<th colspan=\"2\"><label >MODO </label></th>");
          cliente.println("<table align= center style= \"width:220px;border:1px solid red;\">");
          cliente.println(" <tr>");
          cliente.println("<th><table width=200 align=center>");
          cliente.println("<tr>");
          cliente.println(" <td width=200><label>");
          cliente.println("<input type=radio name=modo value=AUTO id=modo_0>");
          cliente.println("AUTO</label></td>");
          cliente.println("</tr>");
          cliente.println("<tr>");
          cliente.println("<td><label>");
          cliente.println("<input type=radio name=modo value=MANUAL id=modo_1>");
          cliente.println("<span style=text-align: right>          MANUAL</span></label></td>");
          cliente.println(" </tr>");
          cliente.println(" </table>");
          cliente.println(" </tr>");
          cliente.println("</table>");
          cliente.println("<br>");
          cliente.println(" <br>");
          cliente.println("<table align= center style= \"width:220px;border:1px solid blue;\">");
          cliente.println("<tr>");
          cliente.println("<th colspan=\"2\"><label >POSICION AUTO (%) </label></th> ");
          cliente.println("<th><select name=posicion style = \"font-size: 20px;\">");
          cliente.println("<option selected> 0 ");
          cliente.println("<option> 10");
          cliente.println("<option> 20");
          cliente.println("<option> 30");         
          cliente.println("<option> 40");
          cliente.println("<option> 50");
          cliente.println("<option> 60");
          cliente.println("<option> 70");
          cliente.println("<option> 80");
          cliente.println("<option> 90");
          cliente.println("<option> 100 ");
          cliente.println("</select>");
          cliente.println("</th>");
          cliente.println("</tr>");
          cliente.println("</table>");
          cliente.println("<br>");
          cliente.println("<br>");
          cliente.println("<table width=20 align= center style= \"width:220px;border:0px solid red;\">");
          cliente.println(" <tr>");
          cliente.println("<th><input type= submit  name= enviar value=ENVIAR style=font-size: 20px;background:green\"></th> ");
          cliente.println("</table>");
          cliente.println("<table width=20 align= center style= \"width:220px;border:0px solid red;\">");
          cliente.println("<th><input type= submit  name= paro value=PARO style=font-size: 20px;background:green\"></th> ");
          cliente.println("</table>");
          cliente.println("</form>");
          cliente.println("</table>");
          cliente.println("</body>");
          cliente.println("</html>");
          cliente.stop();//Cierro conexión con el cliente
//------------------------------------obtengo cadena-----------------------------------------------
           if(readString.indexOf("ENVIAR")>0){
           int igual=readString.indexOf("=");
           int amp=readString.indexOf("&");
           String subcadena=readString.substring(igual+1,amp);
           
           String subcadena2=readString.substring(igual+15,igual+18);
           Serial.println(subcadena);
           pulso=subcadena.toInt();
           avance=subcadena2.toInt();
           Serial.println(subcadena2);
           }
//-------------------------------------------------------------------------
          if(readString.indexOf("ENVIAR")>0){//condicon para pulsar enviar
           //------------sentido del motor--------------------------------------------------------------
           if(readString.indexOf("modo=AUTO")>0){
           
            if(readString.indexOf("posicion")>0) {
              stepper.runToNewPosition((8300/100)* avance);
              Serial.println(avance);
            }
           
           }
           else if(readString.indexOf("modo=MANUAL")>0){
           /*
          EthernetClient cliente = server.available();
                char c = cliente.read();
                */
          while(readString.indexOf("modo=MANUAL")>0){
       
             val = analogRead(A4);  //  Read Potentiometer current value
                if ((val > previous+20) || (val < previous-20))
                { 
                newval = map(val, 0, 1023, 0, 8300);  // Map value (1600 = 1 stepper shaft rotation)
                stepper.runToNewPosition(newval);
                previous = val;  // save current value into variable previous
                }   
               
                }
                         
            }
           
            }
           readString="";
           }
         }
      }
   }
}

surbyte

Lee el privado que te he enviado.
Basicamente los códigos no pueden ir como texto plano sino con etiquetas </>. Edita

Go Up