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: 2541

Responder esta

Respostas a este tópico

qual a tensao que vc ta usando nos endstops? tenta usar o analogRead como 2 por exemplo: while(analogRead(endstopy) <=2), caso esteja alimentando com 5v, isto pode evitar que ocorra alguma interferencia que, faça o arduino reconhecer o endstop como ativado. 

O problema e que esta acontecendo o contrario, o arduino nao esta reconhecendo o endstop como ativado e o motor continua dando uns passos meio arranhados depois que encosnta nele, o suficiente para tira-lo da posição...vc tem w.up..posso te mandar um videozinho do que ocorre. se tiver interesse passa o seu contato pra mim pelo e-mail(joao@terraforteflorestal.com.br).

Verifica o que o arduino esta lendo do endstop então. não lembro se é serial.print ou serial.println, pra ver o que esta acontecendo, e tenta acionar o endstop com a mão mesmo, com o motor em movimento pra ver se ele para.

como pode ver os valores estao oscilando!!!

0
0
0
453
712
1007
1023
1012
909
578
272
0

zero e quanto solto o botao...

o certo nao seria so aparecer 0 quando solto e 1023 quando pressionado?

vc ta usando a propria saida 5v do arduino? e o motor parou quando vc apertou ou vc nao verificou com ele rodando?

um fio do endstop esta ligado na porta analogica e a outra no gnd do arduino..quando apertei ele nao para de imediato, da uns passinhos..rs

Por que no gnd? deveria estar no vcc nao?

Agora me embananei!!!fiz a ligação conforme uma impressora 3d que comprei e montei seguindo um manual!!!vou pesquisar mais sobre isso...

sera que nao rola usar uns resistores?pesquisei aqui e vi q motores geram muita interferencia, tenho uns 10 k..???

vi uns codigos com pessoal dando um delay depois do while..vou testar tbm amanha.

endstops geralmente tem 3 pinos, um é alimentacao, um N/A e outro N/F ai, vc teria que ligar o de alimentação no vcc, de 5v ou 3,3v do arduino, e usar o contato N/A na entrada analogica,

e vc pode ligar um resistor em paralelo  indo da saida N/A ao gnd do arduino

Coloquei um resistor de 10 k aqui e liguei o NO do endstop no 5v...melhorou bastante, agora quero ver se vai continuar assim...pois ontem de manha liguei e estava tranquilo mas na parte da tarde ja nao estava mais...

o tópico é antigo, mas resolvi complementar, aprendi um macetinho legal para substituir o delay por millis(), é só colocar essa função no código

void hold(const unsigned int &ms) { //
// Non blocking delay
         unsigned long m = millis();
         while (millis() - m < ms) {
            yield();
      }
}

ai seria só substituir o delay por hold ex:

hold(1000); //aguarda 1 segundo

a jogada é que como o microcontrolador roda os códigos em "fila", ele tem q rodar essa função durante o tempo definido para passar para próxima função, mas a vantagem é que isso não bloqueará outras ações do código.

ao que eu entendi, não serve para todos os casos, mas simplifica a maioria deles

RSS

Destaques

Registre-se no
Lab de Garagem
Clicando aqui

Convide um
amigo para fazer
parte

curso gratis de arduino

© 2018   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço