rsrsrsr
Olá pessoal, é o seguinte:
estou na fase final de um projeto, onde uso um potenciometro como acelerador para variar o delay entre os passos de um stepper, e tambem uso um encoder para ler a rotação deste mesmo motor.
Após algumas pesquisas acabei chegando nesse codigo, graças ao video sobre threads do Ivan Seidel.
#include <Thread.h>
#include <ThreadController.h>
#define potPin 0
#define chave 3
ThreadController nwb;
int Mydelay = 0;
Thread Acelerador;
void Acelerator(){
Mydelay = analogRead(potPin);
Mydelay = map(Mydelay,0,1023,4,24);
}
Thread GiroMotor;
void GirarMotor(){
digitalWrite(0,HIGH);
delay(Mydelay);
digitalWrite(1,HIGH);
delay(Mydelay);
digitalWrite(0,LOW);
delay(Mydelay);
digitalWrite(2,HIGH);
delay(Mydelay);
digitalWrite(1,LOW);
delay(Mydelay);
digitalWrite(4,HIGH);
delay(Mydelay);
digitalWrite(2,LOW);
delay(Mydelay);
digitalWrite(0,HIGH);
delay(Mydelay);
digitalWrite(4,LOW);
}
Thread Encoder;
long rpmconta=0;
void CalculoEncoder(){
attachInterrupt(1,rotacao,FALLING);
delay(1000);
detachInterrupt(0);
rpmconta = rpmconta*60;
}
void rotacao()
{
rpmconta++;
}
void setup(){
GiroMotor.setInterval(0);
GiroMotor.onRun(GirarMotor);
Encoder.setInterval(1000);
Encoder.onRun(CalculoEncoder);
Acelerador.setInterval(0);
Acelerador.onRun(Acelerator);
nwb.add(&GiroMotor);
nwb.add(&Encoder);
nwb.add(&Acelerador);
}
void loop(){
nwb.run();
}
Agora eis minhas pequenas duvidas:
-acho que a função delay não pode ser usada, como muda-la usando millis() ? "tanto em GiroMotor quanto em Encoder e Acelerador"
-como transforma-la numa variavel "time" e usar junto com millis para tudo rodar redondo?
-não me importo de usar esse codigo para girar o motor, mas seria melhor usar a AcelStepper ?
-com a AcelStepper talvez eu não precisaria de nenhum Delay, sobraria apenas o delay de 1 segundo do encoder necessario para o calculo de RPM
-o motor nunca deve parar de girar, so variar a velocidade de rotação, é correto usar setInterval(0), isso cria um loop infinito ou tenho que criar um dentro de GirarMotor ?
----------------------------------------------------------------------------------------------------------------------------------------------
por hora é isso, realmente preciso dessa ajuda, muito obrigado a todos pela atenção.
P.S: sei que parece idiota usar esse motor, ja que seria mais facil medir a rotação de um DC, mas esse projeto é para uso didatico num projeto da faculdade para expandir o aprendizado em robotica,automação,etc... e o uso de threads é essencial para quem vai começar a projetar neste universo de possibilidades.
Tags:
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
© 2024 Criado por Marcelo Rodrigues. Ativado por