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.