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
#include
#include
#include

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", "

Protótipo de Braço Mecânico

Chave Esquerda

Chave Central

Chave Direita

"); }

void MoveServo(){
for (uint8_t i=0; i<="178)" pos="" +="2;" servo1.write(pos);="" serial.println();="" serial.print("angulo="" da="" base:="" ");="" serial.println(pos);="" delay(15);="" }="" finaliza="" esquerda="" 2)="">= 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.

Exibições: 98

Responder esta

Respostas a este tópico

Boa noite BD,

Só ajudo amigos que não colam sketch na área de texto do tópico.


Sou velho e por isto não importo de ser taxado de ranzinza.
Se remove o code, e anexar como arquivo, posso reconsiderar minha decisão.

Rui

VR = Velho Ranzinza, KKKK

Bruno,
Faz um teste, nas variáveis que são manipuladas externamente, declare-as com o identificador volatile.

RSS

Destaques

Registre-se no
Lab de Garagem
Clicando aqui

Convide um
amigo para fazer
parte

curso gratis de arduino

© 2017   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço