# Arduino - Projeto Braço mecanico

**URL:** <https://forum.fazedores.com/t/arduino-projeto-braco-mecanico/4250>\
**Category:** Arduino\
**Created:** [Maio 6, 2017, 7:49pm UTC](https://forum.fazedores.com/t/arduino-projeto-braco-mecanico/4250 "2017-05-06T19:49:57Z")\
**Posts on this page:** 5\
**Page:** 1

<div class="post-metadata">

**Author:** ![pedromaarcos](https://avatars.discourse-cdn.com/v4/letter/p/b19c9b/32.png) [@pedromaarcos](https://forum.fazedores.com/u/pedromaarcos)\
**Post date:** [Maio 6, 2017, 7:49pm UTC](https://forum.fazedores.com/t/arduino-projeto-braco-mecanico/4250/1 "2017-05-06T19:49:57Z")

</div>

Boa tarde, amigos. Sou estudante de arduino e, estou com uma dificuldade, conto com a ajuda de voces. Estou fazendo um projeto de um braço mecânico usando nodemcu, onde eu controlo ele via navegador. O código esta funcionando normalmente, porem tenho um problema no “while”. Quando eu mando tal comando no navegador, esse “while” é executado, porem quando eu mando outro comando no navegador para esse “while” parar, ele não executa, só é executado apos que termina o while. Gostaria de saber o que devo fazer para que quando eu der outro comando no navegador, esse “while” pare na mesma hora.

Esse é o trecho onde está o problema, tal qual todo trecho que tem while no programa da o mesmo problema.

```
           // Inicia braço pra traz automatico
           if(code == 8) {
             if(pos2 >= 100 && pos3 <= 163) {
               while (code==8 && pos2 >= 100 && pos3 <= 163) {                          
                 pos2 -= 1.9;
                 pos3 += 2.6;
                 servo2.write(pos2); 
                 servo3.write(pos3); 
                 Serial.println();
                 Serial.print("Angulo do Ante Braço: ");
                 Serial.println(pos2);
                 Serial.print("Angulo do Braço: ");
                 Serial.println(pos3);
                 delay(150);  
               } 
             }               
           }
           // Finaliza braço pra traz automático

```

Aqui está o codigo inteiro:

#include \<ESP8266WiFi.h\>  
#include\<WiFiClient.h\>  
#include \<ESP8266WebServer.h\>  
#include \<Servo.h\>

Servo servo1;  
Servo servo2;  
Servo servo3;  
Servo servo4;  
Servo servo5;

const char \*ssid = "PedroMarcos ";  
const char \*password = “pedrorafael”;

ESP8266WebServer server(80);  
int pos;  
float pos2;  
float pos3;  
int pos4;  
int pos5;

void handleRoot() {  
server.send(200, “text/html”, “Projeto de Faculdade

# Protótipo de Braço Mecânico

\<a href=“servo1?code=1”\>Chave Esquerda

\<a href=“servo1?code=2”\>Chave Central

\<a href=“servo1?code=3”\>Chave Direita

”);  
}

void MoveServo(){  
for (uint8\_t i=0; i\<server.args(); i++){  
if(server.argName(i) == “code”)  
{  
unsigned long code = server.arg(i).toInt();

```
           // Inicia giro a direita
           if(code == 1) {
             if(pos <= 178) {                         
                 pos += 2;
                 servo1.write(pos);
                 Serial.println();
                 Serial.print("Angulo da Base: ");
                 Serial.println(pos);               
                 delay(15);          
               }  
          }
          // Finaliza Giro a Direita

           // Inicia giro a esquerda
           if(code == 2) {
             if(pos >= 2) {                         
                 pos -= 2;
                 servo1.write(pos);  
                 Serial.println();
                 Serial.print("Angulo da Base: ");
                 Serial.println(pos);
                 delay(15);   
               }
         }
         // Finaliza Giro a Esquerda

         // Inicia giro automático a direita
           if(code == 3) {                        
              if(pos <= 178) {                         
                while(code == 3 && pos <= 178){
                      pos += 2;
                      servo1.write(pos);
                      Serial.println();
                      Serial.print("Angulo da Base: ");
                      Serial.println(pos);               
                      delay(100);
                    }
                  }   
                }
         // Finaliza Giro automatico a direita
         

           //Inicia giro automático a esquerda
           if(code == 4) {
             if(pos >= 2) { 
               while (code == 4 && pos >= 2) {                      
                 pos -= 2;
                 servo1.write(pos);  
                 Serial.println();
                 Serial.print("Angulo da Base: ");
                 Serial.println(pos);
                 delay(100);   
                 }
                }           
               }
         // Finaliza giro automático a esquerda

           // Inicia Braço pra frente
           if(code == 5) {
             if(pos2 <= 168 && pos3 >= 2) {                         
                 pos2 += 1.9;
                 pos3 -= 2.6;
                 servo2.write(pos2); 
                 servo3.write(pos3); 
                 Serial.println();
                 Serial.print("Angulo do Ante Braço: ");
                 Serial.println(pos2);
                 Serial.print("Angulo do Braço: ");
                 Serial.println(pos3);
                 delay(15); 
               }               
         }
         // Finaliza Braço pra frente

         // Inicia Braço pra traz  
           if(code == 6) {
             if(pos2 >= 100 && pos3 <= 163) {                         
                 pos2 -= 1.9;
                 pos3 += 2.6;
                 servo2.write(pos2); 
                 servo3.write(pos3); 
                 Serial.println();
                 Serial.print("Angulo do Ante Braço: ");
                 Serial.println(pos2);
                 Serial.print("Angulo do Braço: ");
                 Serial.println(pos3);
                 delay(15);  
               }              
         }
         // Finaliza braço pra traz

         // Inicia braço pra frente automático
           if(code == 7) {
             if(pos2 <= 168 && pos3 >= 2) {                         
                 while (code==7 && pos2 <= 168 && pos3 >= 2 ){
                   pos2 += 1.9;
                   pos3 -= 2.6;
                   servo2.write(pos2); 
                   servo3.write(pos3); 
                   Serial.println();
                   Serial.print("Angulo do Ante Braço: ");
                   Serial.println(pos2);
                   Serial.print("Angulo do Braço: ");
                   Serial.println(pos3);
                   delay(150); 
                 }
               }               
             }
            // Finaliza braço pra frente automático

           // Inicia braço pra traz automatico
           if(code == 8) {
             if(pos2 >= 100 && pos3 <= 163) {
               while (code==8 && pos2 >= 100 && pos3 <= 163) {                          
                 pos2 -= 1.9;
                 pos3 += 2.6;
                 servo2.write(pos2); 
                 servo3.write(pos3); 
                 Serial.println();
                 Serial.print("Angulo do Ante Braço: ");
                 Serial.println(pos2);
                 Serial.print("Angulo do Braço: ");
                 Serial.println(pos3);
                 delay(150);  
               } 
             }               
           }
           // Finaliza braço pra traz automático

           // Inicia Movimento do Punho pra cima
           if(code == 9) {
             if(pos4 >= 2) {                         
                   pos4 -= 2;
                   servo4.write(pos4);  
                   Serial.println();
                   Serial.print("Angulo do Punho: ");
                   Serial.println(pos4);
                   delay(15);   
               }                
           }
           // Finaliza Movimento do Punho pra cima

           // Inicia Movimento do Punho pra baixo
           if(code == 10) {
             if(pos4 >= 0 && pos4 <=118) {                        
                 pos4 += 2;
                 servo4.write(pos4);  
                 Serial.println();
                 Serial.print("Angulo do Punho: ");
                 Serial.println(pos4);
                 delay(15); 
               }                
           }
           // Finaliza Movimento do Punho pra baixo

           //Inicia Garra Aberta
           if(code == 11) {
             if(pos5 == 103) {                         
                 pos5 -= 18;
                 servo5.write(pos5);  
                 Serial.println();
                 Serial.print("Angulo da Garra: ");
                 Serial.println(pos5);
                 Serial.print("Garra Aberta");
                 delay(15);   
               }                
           }
           //Finaliza Garra Aberta

         
           //Inicia Garra Fechada
           if(code == 12) {
             if(pos5 == 85) {                         
                 pos5 += 18;
                 servo5.write(pos5);  
                 Serial.println();
                 Serial.print("Angulo da Garra: ");
                 Serial.println(pos5);
                 Serial.print("Garra Fechada");
                 delay(15);   
               }                
           }
           // Finaliza Garra Fechada

           // Inicia o reset
           if(code == 13) {                        
             pos2 = 92;
             servo2.write(92);
             Serial.println(pos2);
             delay(1000);
             pos4 = 0;
             servo4.write(0);
             Serial.println(pos4);
             delay(1000);
             pos5 = 85;
             servo5.write(85);
             Serial.println(pos5);
             delay(15);
             pos3 = 159;
             servo3.write(159);
             Serial.println(pos3);
             delay(1000);
             pos = 65;
             servo1.write(65);
             Serial.println(pos);
           }
           // Finaliza o Reset
         
      }
 }

```

handleRoot();  
}

void setup(void){  
Serial.begin(9600);  
WiFi.softAP(ssid, password);  
server.on("/", handleRoot);  
server.begin();  
Serial.print(“Ponto de Acesso Ligado”);

server.on("/servo", MoveServo);

servo1.attach(4);  
servo2.attach(14);  
servo3.attach(13);  
servo4.attach(2);  
servo5.attach(5);  
servo2.write(98);  
delay(1000);  
servo4.write(0);  
delay(1000);  
servo5.write(85);  
delay(15);  
servo3.write(165);  
delay(1000);  
servo1.write(65);

pos = servo1.read();  
pos2 = servo2.read();  
pos3 = servo3.read();  
pos4 = servo4.read();  
pos5 = servo5.read();  
}

void loop(void){  
server.handleClient();  
}

Grato pela colaboração.

---

<div class="post-metadata">

**Author:** ![Thomaz\_Barros](https://sea2.discourse-cdn.com/flex016/user_avatar/forum.fazedores.com/thomaz_barros/32/1651_2.png) [@Thomaz\_Barros](https://forum.fazedores.com/u/Thomaz_Barros)\
**Post date:** [Maio 8, 2017, 3:25am UTC](https://forum.fazedores.com/t/arduino-projeto-braco-mecanico/4250/2 "2017-05-08T03:25:05Z")

</div>

uma opção é ler os valores de posição dentro do while ou Serial.read()

---

<div class="post-metadata">

**Author:** ![pedromaarcos](https://avatars.discourse-cdn.com/v4/letter/p/b19c9b/32.png) [@pedromaarcos](https://forum.fazedores.com/u/pedromaarcos)\
**Post date:** [Maio 8, 2017, 10:05pm UTC](https://forum.fazedores.com/t/arduino-projeto-braco-mecanico/4250/3 "2017-05-08T22:05:19Z")

</div>

Boa noite Thomaz, então, quando eu faço a requisição para o cliente chamar o código no navegador ele faz uma vez só, e ai quando ele entra no while ele nao chama mais, eu queria uma forma para que quando ele entra dentro do while, ele continue recebendo o comando do navegador, para que eu possa passar o comando e parar o while, pelo navegador.

Por exemplo:

if(code == 8) {  
if(pos2 \>= 100 && pos3 \<= 163) {  
while (code==8 && pos2 \>= 100 && pos3 \<= 163) {  
pos2 -= 1.9;  
pos3 += 2.6;  
servo2.write(pos2);  
servo3.write(pos3);  
Serial.println();  
Serial.print("Angulo do Ante Braço: ");  
Serial.println(pos2);  
Serial.print("Angulo do Braço: ");  
Serial.println(pos3);  
delay(150);  
}  
}  
}

Quando eu digito code == 8 no navegador, ele entra nesse while, eu queria que quando eu digitasse por exemplo code == 7, ele saísse desse while e parasse, coisa que não esta acontecendo.

---

<div class="post-metadata">

**Author:** ![Thomaz\_Barros](https://sea2.discourse-cdn.com/flex016/user_avatar/forum.fazedores.com/thomaz_barros/32/1651_2.png) [@Thomaz\_Barros](https://forum.fazedores.com/u/Thomaz_Barros)\
**Post date:** [Maio 15, 2017, 7:19am UTC](https://forum.fazedores.com/t/arduino-projeto-braco-mecanico/4250/4 "2017-05-15T07:19:06Z")

</div>

Então dentro do while deverá ser requisitado nova leitura do navegador para confirmar que o valor ainda se mantem ou nao

---

<div class="post-metadata">

**Author:** ![pedromaarcos](https://avatars.discourse-cdn.com/v4/letter/p/b19c9b/32.png) [@pedromaarcos](https://forum.fazedores.com/u/pedromaarcos)\
**Post date:** [Maio 15, 2017, 12:25pm UTC](https://forum.fazedores.com/t/arduino-projeto-braco-mecanico/4250/5 "2017-05-15T12:25:32Z")

</div>

Exatamente. Mas não consegui fazer isso. Você tem alguma ideia de como faça isso?
