Buen dia Jose Luis en principio saludarte y agradecer todo lo que haces por nosotros, es muy valioso, espero puedas vivir de esto, eso estaria barbaro,
MI CONSULTA ES LA SIGUIENTE: Estoy usando un PID para calcular impulsos de un motor paso a paso en funcion de un dato disponible por puerto Serie,(valores de distancia) ese dato ingresa cada 500 milisegundo lo cual creo que ahi esta el problema porque mis input son discretos y no valores analogicos, mi pregunta es si se te ocurre alguna solucion para transformar esos valores de entrada a analogicos, y simular algo por ejemplo si la orden de impulsos me hizo mover el motor a la izquierda por ejemplo 700 impulsos yo pude relacionar esos impulsos con la distancia y pude hacer que a medida que transcurren los impulsos me vaya disminuyendo la distancia POR si te sirve esta info para convertirla a Analogica y que funcione mi PID, tambien hice otro PID con un sensor potenciometro y anda perfecto, por eso mi duda, aca te paso parte del codigo,(puede faltar alguna parte pero en el void set up defino el PID tal cual vos lo esplicas eso no seri el problema pasa por ser discreta la entrada creo, te mando un abrazo y espero si se te ocurre alguna idea, GRACIAS
Void loop()
{
if (Serial.available() > 0)
{
delay(20);
bufferString = "";
while (Serial.available() > 0) {
bufferString += (char)Serial.read();
}
distancia = bufferString.toFloat();
distanciaAbs = fabs(distancia);
if ((distanciaAbs > 0) && (distanciaAbs <= 3.00))
inpDCorta = distancia;
pidDistCorta.Compute();
}
for (int i = 0; (i <= fabs(outDCorta)); i++) {
digitalWrite(enbl, distancia > 0 ? HIGH : LOW); // ANTI HORARIO. (PIN 8 Arduino) // PARA BANCO PRUEBA --> LOW : HIGH
digitalWrite(dirPin, HIGH); // Habilita DIR HIGH
digitalWrite(stepPin, HIGH); // Pulso Positivo
delayMicroseconds(TIEMPO_ENTRE_IMP2 * valorVelocidadGIRO); // Interrupcion de Pulso
digitalWrite(stepPin, LOW); // Pulso Positivo
delayMicroseconds(TIEMPO_ENTRE_IMP2 * valorVelocidadGIRO); // Interrupcion de Pulso
}