Buenas tardes amigos, no consigo controlar la velocidad del motor a pasos, con el encoder, ahora estoy usando un potenciómetro de precisión, vía analógico, funciona bien pero el encoder me dará mas seguridad, ya que se trata de una bomba peristáltica para dosificación de químicos, y se requiere de exactitud para conseguir una mezcla perfecta, estos son los códigos que tengo.
#include <LiquidCrystal_I2C.h>
#include <SoftwareSerial.h>
#include <Wire.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
int CLK = 2;
int DT = 3;
int SW = 4;
int Bomba = 5;
int paro = 6;
int anteriorCLK;
int valorCLK;
int valorDT;
int valorSW;
int anteriorSW;
int cont;
void setup() {
Wire.begin();
lcd.begin(16, 2);
lcd.init();
lcd.backlight();
lcd.clear();
lcd.setCursor(0, 0);
Serial.begin(9600);
pinMode(Bomba, OUTPUT);
pinMode(paro, OUTPUT);
pinMode(CLK, INPUT);
pinMode(DT, INPUT);
pinMode(SW, INPUT);
digitalWrite(Bomba, LOW);
digitalWrite(paro, LOW);
anteriorCLK = digitalRead(CLK);
cont = 0;
}
void loop() {
valorCLK = digitalRead(CLK);
if (valorCLK != anteriorCLK) {
valorDT = digitalRead(DT);
if (valorDT == valorCLK) { //derecha
cont++;
if (cont > 255) {
cont = 0;
}
} else { //izquierda
cont--;
if (cont < 0) {
cont = 255;
}
}
analogWrite(Bomba, cont);
anteriorCLK = valorCLK;
Serial.print("velocidad ");
Serial.println(valorDT);
lcd.setCursor(0, 0);
lcd.print("velocidad ");
lcd.print(valorDT);
}
valorSW = digitalRead(SW);
if (valorSW != anteriorSW) {
valorSW = digitalRead(SW);
digitalWrite(paro, HIGH);
Serial.print("stop ");
Serial.println(valorSW);
lcd.setCursor(1, 0);
lcd.print("stop ");
lcd.print(valorSW);
}
}
Este es el que quiero que funcione
int steps = 5; // pin step 9
int direccion = 2; // pin dirección 3
int potenciometro; // lectura del potenciómetro
//int boton = 7; // pin pulsador
void setup() {
// inicializamos pin como salidas.
pinMode(steps, OUTPUT);
pinMode(direccion, OUTPUT);
// pinMode(boton, INPUT);
}
void loop() {
// int sentido = digitalRead(boton); // leemos el botón de dirección
// digitalWrite(direccion, sentido); // cambiamos de dirección según pulsador
potenciometro = analogRead(A0); // leemos el potenciómetro
potenciometro = map(potenciometro,0,1024,25,300); // adaptamos el valor leído a un retardo
digitalWrite(steps, HIGH); // Aquí generamos un flanco de bajada HIGH - LOW
delayMicroseconds(15); // Pequeño retardo para formar el pulso en STEP
digitalWrite(steps, LOW); // y el A4988 de avanzara un paso el motor
delayMicroseconds(potenciometro); // generamos un retardo con el valor leído del potenciometro
}
Este es el que estoy usando ahora de forma rudimentaria, ni siquiera le he incluido la LCD
Buena tarde.

