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.

Exibições: 628

Anexos

Responder esta

Respostas a este tópico

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.

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço