Antes que nada disculpad mis post anteriores, la ofuscación me pudo y ayer arrojé la toalla.
Hoy me he despertado bien temprano con la idea de sacar esto adelante. Pensando en no fallarme a mi mismo y no fallaros a vosotros que aunque no sea capaz de explicarlo, me sentía en deuda con la ayuda recibida de vuestra parte.
Como os digo, estaba ofuscado con tanta información que no llegaba a comprender del todo y por eso no podía manipular. Pero hoy, me he limitado a usar sólo todos los consejos que me habíais dado y que funcionaban. Por eso, he estado haciendo una mezcla entre el código de @PeterKantTropus (post #25) y uno muy básico que encontré para comprender el uso del driver que me recomendó @surbyte.
El código es el siguiente:
int sensor = 2; //sensor infrarrojos o electromagnético para contar vueltas del motor
int conta = 0;
int estadoCero = 0;
int dir=1;
unsigned long REPOSO = 5000;
int S00=0;//serie de pasos
int S01=0;
int S10=0;
int S20=0;
int S21=0;
int S30=0;
int plactual;
void setup() {
for(int j=4;j<=9;j++){ //declarar Pines del 4 al 9
pinMode(j,OUTPUT); // declarar pines anteriores como SALIDA
}
digitalWrite(4,0);
digitalWrite(7,0);
digitalWrite(8,0);
digitalWrite(9,0);
Serial.begin(9600); //iniciar puerto serie
pinMode(sensor, INPUT); //definir pin como entrada
plactual = digitalRead(sensor);
S00=1; // inicia el siguiente paso
}
void loop() {
if (digitalRead(sensor)!=plactual) { //contador de cambios del estado de sensor
conta=conta +dir;
plactual=digitalRead(sensor);
}
if (S00==1) { //soltar y dir+1, desactivar S00 activar S02
dir=+1;
delay(REPOSO);
digitalWrite(7,1);
//digitalWrite(4,0); //motor 2
digitalWrite(8,0);
//digitalWrite(9,0); //motor 2
analogWrite(5, 100); //motor 1 // Manejarme entre valores del 30 al 255
//analogWrite(6, 100); //motor 2 // Manejarme entre valores del 30 al 255
S00=0; //detiene este paso
S01=1; //activa el siguiente paso
}
if (S01==1) { // parar cuando llegue conta >=3,desactivar S01 y activar S1
if (conta>=8) {
digitalWrite(7,0);
//digitalWrite(4,0); //motor 2
digitalWrite(8,0);
//digitalWrite(9,0); //motor 2
analogWrite(5, 100); //motor 1 // Manejarme entre valores del 30 al 255
//analogWrite(6, 100); //motor 2 // Manejarme entre valores del 30 al 255
S01=0;//detiene este paso
S10=1;//activa el siguiente paso
}
}
if (S10==1) { //esperar1, y cuando se cumpla desactivar S10 y activar S2
delay (10000); //despues es conveniente cambiarlo por milis
S10=0;//detiene este paso
S20=1;//activa el siguiente paso
}
if (S20==1) { //dir= -1, recoger ,desactivar S20 y activar S21
dir=-1;
digitalWrite(7,0);
//digitalWrite(4,0); //motor 2
digitalWrite(8,1);
//digitalWrite(9,0); //motor 2
analogWrite(5, 100); //motor 1 // Manejarme entre valores del 30 al 255
//analogWrite(6, 100); //motor 2 // Manejarme entre valores del 30 al 255
S20=0; //detiene este paso
S21=1; //activa el siguiente paso
}
if (S21==1) { // parar cuando llegue conta =0, desactivar S21 y activar S3
if (conta<=0) {
digitalWrite(7,0);
//digitalWrite(4,0); //motor 2
digitalWrite(8,0);
//digitalWrite(9,0); //motor 2
analogWrite(5, 100); //motor 1 // Manejarme entre valores del 30 al 255
//analogWrite(6, 100); //motor 2 // Manejarme entre valores del 30 al 255
S21=0; //detiene este paso
S30=1; //activa el siguiente paso
}
}
if (S30==1) { //esperar2, y cuando se cumpla desactivar S30 y activar S0
delay (10000); //despues es conveniente cambiarlo por milis
S30=0;//detiene este paso
S00=1;//activa el siguiente paso
}
}
En el, como veréis, no hago uso de la rampa y por lo tanto no aprovecho al máximo las posibilidades que me brinda este driver. Lo siento @surbyte, no he logrado implementar la lectura del sensor en el código de rampa que me pasaste. Eso me ha consumido mucha energía y de ahí mi ofuscación. (Me faltan muchísimos conocimientos de programación) Pero al menos, con esta mezcla, puedo modificar el pwm y hacer que el movimiento del motor, aunque constante, sea más o menos rápido y así su inicio y parada no sean tan bruscos.
Espero que no tengáis en cuenta mis bajadas puntuales de moral y os mando un fuerte abrazo a todos. Gracias.