resulta que un antiguo reloj no funciona su sistema de cuerda ya es muy viejo pero
quiere ponerlo a funcionar solo requiero darle 6 vueltas a un motor a pasos
cada minuto
pretendo hacerlo funcionar con estos componentes
un Driver Tb6600 un motor a pasos nema 17 , un Arduino nano
el detalle esta que ocupe la librería TimeOne para el tiempo pero mi programa no funiona
cabe aclarar que el motor y todo funciona ya que si se girar el motor a pasos con el driver
con código sin delays y con código con delay
#include <TimerOne.h>
const int pul=4;
const int dir=5;
const int Ena=6;
const int pasosV=1200; // total de pasos a dar = 6 vueltas
const unsigned long inter=800; //ancho del pulso
unsigned long timeanterior=0;
boolean estadoP = false ;
int pasoactual = 0;
volatile boolean mover = false;
volatile int seg=0;
void setup() {
Timer1.initialize(1000000); // 1 segundo
Timer1.attachInterrupt (incseg);
}
void incseg(){ seg++;}
void loop() {
if ( seg == 15) {
mover = true;
seg = 0;
if(mover == true){
unsigned long timeactual = micros();
if (timeactual - timeanterior >= inter ) {
timeanterior = timeactual ;
if(estadoP == false ){
digitalWrite(pul,HIGH);
estadoP = true ;
}else {
digitalWrite(pul,LOW);
estadoP = false ;
pasoactual++;
if(pasoactual >= pasosV){
pasoactual = 0;
mover = false;
}
}
}
}
}
}
este código funciona para mover el motor sin llevar el conteo de el tiempo
da las 6 vueltas y se para.
se realizo de esa manera ya que al ocupar una interrupción por tiempo están prohibidos los delays.
const int pul=4;
const int dir=5;
const int Ena=6;
const int pasosV=1200;// son 6 vueltas
const unsigned long inter=800;
unsigned long timeanterior=0;
boolean estadoP = false ;
int pasoactual = 0;
boolean mover = true;
void setup() {
pinMode(pul,OUTPUT);
pinMode(Ena,OUTPUT);
pinMode(dir,OUTPUT);
digitalWrite(Ena,LOW);
digitalWrite(dir,LOW);
}
void loop() {
if (mover == true ){
unsigned long timeactual = micros();
if (timeactual - timeanterior >= inter ) {
timeanterior = timeactual ;
if(estadoP == false ){
digitalWrite(pul,HIGH);
estadoP = true ;
}else {
digitalWrite(pul,LOW);
estadoP = false ;
pasoactual++;
if(pasoactual >= pasosV){
pasoactual = 0;
mover = false;
}
}
}
}
}
Título editado Moderador debido a la falta de respuestas del OP