Preciso montar um programa mas acho que não seria possível usar o delay(), gostaria de testar o millis(), mas me embolo toda na hora de montar o sketch com ele. Alguém poderia me auxiliar na montagem do sketch abaixo trocando o delay pelo millis()?ESte sketch e so um exemplo simplificado!!


int dir = 6;
int stepp = 7;
int tempo = 800;
int passos = 1200;

void setup() {
pinMode(dir, OUTPUT);
pinMode(stepp, OUTPUT);
}

void loop() {


for (int i = 0; i< passos; i++)
{
motormovimenta();
}


}

void motormovimenta()
{
digitalWrite(dir, HIGH);
digitalWrite(stepp, HIGH);
delayMicroseconds(tempo); //preciso trocar por millis//
digitalWrite(stepp, LOW);
delayMicroseconds(tempo);//preciso trocar por millis//
}

Exibições: 3653

Responder esta

Respostas a este tópico

Cara, depois vou ver o vídeo e analisar seu código direito( agora estou no trabalho), mas pelo que entendi vc esta usando os endstops dentro da função setup, mas essa função só roda uma vez, eles são só para dar a posição inicial mesmo? E mesmo assim vc esta entrando com o numero de passos inicial, como  por exemplo whome =3000, o ideal é vc nao colocar o numero de passos total, e sim verificar se o endstop esta acionado e depois dar um passo, repetindo esse processo 1 passo por vez ate que o endstop acione e o motor pare.

hummm entendi o que vc esta dizendo, realmente tem razao!!!Nao sei como fazer isso ainda, mas vou dar uma estudada!!!se puder dar um exemplo, ficaria grato!!!

Pensado no que vc disse, acho que tudo se resumiria tirando o for das funcoes home, pois como vc disse assim os passos estariam condicionados nao a whome...e sim ao fato do endstop estar ou nao pressionado....ou seja:

ao inves disso:

for (int i = 0; i< whome; i++)
{
setupwhome();
}

.......

eu so colocaria isso:

setupwhome();

setupzhome();

setupxhome();

setupyhome();

e passaria para o loop em seguida....

vou testar amanha pois a maquina esta na minha empresa....

Entao, fiz o teste aqui usando so  a funcao abaixo, e o motor nao parou:::Afffff, ta duido!!!!rsrsrs

if(analogRead(endstopw) == 0)
{
digitalWrite(dirw, HIGH);
digitalWrite(passow, HIGH);
delayMicroseconds(veloxw);
digitalWrite(passow, LOW);
delayMicroseconds(veloxw);
}else{
digitalWrite(passow, LOW);
}

Isso, mas vc precisaria de um while dentro da funçao:

void setupyhome()
{

     while(analogRead(endstopy) == 0)

     {

          digitalWrite(diry, HIGH);
          digitalWrite(passoy, HIGH);
          delayMicroseconds(veloxy);

          digitalWrite(diry, LOW);

          digitalWrite(passoy, LOW); 

          delayMicroseconds(veloxy);
     }

}

tenta assim e vê o resultado, mas porque vc esta executando esta operação dentro do setup? e qual é o modelo dos seus motores?

alem disso, nao precisa declarar as portas analogicas como input, ja que elas so tem essa função mesmo.

Oi Luiz, estava viajando, voltei hj.Vou testar aqui a sua funçao e te falo o que ocorreu...obrigado por suas dicas...

OI Luiz, tudo bem. Entao, fiz alguns testes aqui a funcao com while rodou bem, quando a chave e acionada o motor para instantaneamente. Mas isso funcionou bem com um motor, quando eu coloco o home com os outros tres, ou seja, quatro motores dando o home, cada um deles so da um passo e para!!!!Ai testei colocar o for...antes de cada setupwhome(); o resultado e que todos, ate o momento funcionaram perfeitamente, ou seja, quando  vao para o home a chave de todos depois de acionadas param instantaneamente, parou com aquele troço de ficar dando uns passos extras e forcando o switch...

Vamos ver se algo de novo nao acontece, mas de toda forma sua ajuda foi essencial para que meu projeto funcionasse.

Muito obrigado pela ajuda.

bom dia , o fato de eles pararem no primeiro passo provavelmente é por estarem lendo algum sinal da entrada analógica, devido a alguma interferência, mas se funcionou com o for é o que importa, boa sorte no projeto. Só uma duvida, seus motores só vão girar para um lado?

Nao!!!os motores giram para os dois lados!!!logico que para dar o home...vao para um lado so, isso e so pra zerar a posicao, depois eles começam uma serie de loops de ida e volta!!porque pergunta?

só porque vc colocou somente um pino para indicar a direção, geralmente as pessoa usam 3 pinos para controlar os motores, um para ativa um para girar para um lado e um para grar para o outro, fiquei curioso em como fazer só com 2.

EStou usando nema 23 e driver2m542-n, existe tres saidas do driver...pls dir e enable, so que nao estou usando o enable, entao so sobrou o pls e dir. Cara vc acredita que de manha a funcao com o While tinha funcionado blz, mas agora a tarde começou a dar pala...affffffffff...tava dando uma olhada aqui tem um tal de debounce para acionamento de chaves...sera que nao e isso nao, afff tem acabimento nao, tava funcionando de boa agora deu pala...tem que rir.

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço