Olá pessoal
estou tentando executar um código para mover dois motores de passo mas tenho uma função que é executada a partir do android e o código está dentro de uma rotina fora do loop no arduino pois não quero que os motores comecem a girar até que venha um comando do android mas me parece que o accelstepper roda somente dentro do loop e ai quando mando o comando para o arduino ele gira um passo por vez ai tenho que ir apertando no botão do app android para ele ir girando passo a passo.
alguém já implementou o accelstepper fora do loop do arduino?
desde já agrade a todos.
Tags:
Oi RRS, boa noite.
Com certeza os comandos desta biblioteca funcionam fora do loop.
Se o motor deu um passo é porque o "accelstepper" funcionou.
Anexe um arquivo com seu code para que possamos identificar onde está o problema.
Rui
Olá Rui muito obrigado pela sua solicitude comigo, segue o codigo abaixo, quando vai no loop é ma blz mas fora dele como eu disse tenho que ficar aperntando na tela do tablet para ir dando passo a passo no motor
#include <AccelStepper.h>
Stepper stepper_x(200, 4, 5, 6, 7);
Stepper stepper_y(200, 8, 9, 10, 11);
#define HALF4WIRE 8
// Motor pin definitions
#define motorPin1 4 // A1
#define motorPin2 5 // A2
#define motorPin3 6 // B1
#define motorPin4 7 // B2
#define motorPin5 8 // A1
#define motorPin6 9 // A2
#define motorPin7 10 // B1
#define motorPin8 11 // B2
String Input_Appinventor_String =
AccelStepper stepper1 (HALF4WIRE, motorPin1, motorPin2, motorPin3, motorPin4, true);
AccelStepper stepper2 (HALF4WIRE, motorPin5, motorPin6, motorPin7, motorPin8, true);
const int ledPin = 13;
int Valeur = 0 ;
bool teste = false;
int pos = 3600;
void setup() {
Serial.begin(115200);
Input_Appinventor_String.reserve(200);
stepper1.setMaxSpeed(1200.0);
stepper1.setAcceleration(100.0);
stepper1.setSpeed(100);
stepper1.moveTo(1500); //250 full rotations @ 48 steps each = 12,000 steps
stepper2.setMaxSpeed(100);
stepper2.setAcceleration(100.0);
stepper2.setSpeed(100);
stepper2.moveTo(400); //250 full rotations @ 48 steps each = 12,000 steps
}
int tempo = 10;
void loop() {
}
void serialEvent() {
while (Serial.available()) {
// Read incomming Control From App Inventor
char inChar = (char)Serial.read();
// add it to the Input_Appinventor_String:
Input_Appinventor_String += inChar;
if (Contains(Input_Appinventor_String ,"ON")){ // If App Inveot Control is "ON"
if (stepper1.distanceToGo() == 0) {
stepper1.moveTo(-stepper1.currentPosition());
if (stepper2.distanceToGo() == 0) {
stepper2.moveTo(-stepper2.currentPosition());
}
}
stepper1.run();
stepper2.run();
}
Input_Appinventor_String ="";
if (Contains(Input_Appinventor_String ,"OFF")){ // If App Inveot Control is "OFF"
// stepper_x.stop(); // Led 13 Off
//stepper_y.stop();
Input_Appinventor_String ="";
}
}
}
bool Contains( String s, String search) {
int max = s.length() - search.length();
for (int i=0; i<= max; i++)
{
if (s.substring(i) == search) return true; // or i
}
return false; //or -1
}
Oi RRS,
eu sugeri "anexar um arquivo" e não colar na área de texto.
Colando na área de texto, alem de ficar longa a mesma, ainda corre o risco de perder caracteres do code.
Mas vou analisar o seu code assim mesmo, mas mande consertar seus óculos tá.
Rui
O grande mestre se ainda der tempo de me perdoar então eu lhe agradeço não coloquei o arquivo porque você vai encontrar um monte de tranqueira no codigo e achei melhor dar uma garimpada nele e colar somente o que interessa mas me desculpa, está ai em anexo.
grande abraço
Oi RRS,
não tem nada dentro da função loop, e não identifiquei nenhuma rotina de interrupt.
Como quer que o arduino faça alguma coisa?
Ele só executa a função voide uma vez e para.
Rui
se eu colocar o código dentro do loop ele vai girar os motores assim que ligar o arduino e o que eu preciso é que os motores rodem somente quando chegar o texto "ON" na variável Input_Appinventor_String
ai que os motores devem iniciar.
Oi RRS,
voce não precisa colocar o code dentro do loop, mas precisa de uma lógica para chamar
a rotina que aciona os motores qdo quiser.
Rui
Bom dia Rui
eu já tentei um monte de rotina mas o que consegui mesmo foi como eu te disse dentro do loop funciona que é uma beleza mas dentro de outro void tenho que ir apertando um botão na tela do tablet e ele vai dando passo a passo, pode me ajudar nessa rotina uma luz qualquer para eu ir quebrando a cabeça?
desde já agradeço.
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
© 2024 Criado por Marcelo Rodrigues. Ativado por