Necesito controlar la posición de un motor usando un encoder y un potenciometro, el código esta casi completo pero no se que es lo que falte puesto que el motor nunca se detiene, el motor que estoy utilizando es FaulHaber 2342L012CR y estoy utilizando el arduino MEGA 2560
#define B 19
#define A 18
void setup() {
Serial.begin(9600);
pinMode(4,OUTPUT);
pinMode(6,OUTPUT);
pinMode(A0,INPUT);
analogWrite(9,200);
digitalWrite(4,HIGH);
digitalWrite(6,LOW);
attachInterrupt(4,ISR_EnA,RISING);
}
int var=0;
int y;
int ranura;
int v_enc=2173;
void loop() {
var = analogRead(A0);
y = map(var,0,1024,0,360)+1000;
Serial.print("Grados: ");
Serial.println(y);
ranura = y/0.46;
Serial.print("Ranura: ");
Serial.println(ranura);
if(ranura > v_enc) {
digitalWrite(4,HIGH);
digitalWrite(6,LOW);
Serial.print("v_enc: ");
Serial.println(v_enc);
}
else if (ranura< v_enc){
digitalWrite(4,LOW);
digitalWrite(6,HIGH);
Serial.print("v_enc: ");
Serial.println(v_enc);
}
else{
digitalWrite(4,HIGH);
digitalWrite(6,HIGH);
Serial.print("v_enc: ");
Serial.println(v_enc);
}
}
void ISR_EnA(){
if (digitalRead(B)){
v_enc ++;}
else
{
v_enc --;
}
}
Hola,
Sera mejor que expliques un poquito mas lo que hace cada parte del programa pero así la primera intentas una interrupción en el pin 4 y yo creo que ese pin no vale, para el uno son en el pin 2 ó 3 y el mega tiene mas pero el pin 4 no es un pin con interrupción en ningún modelo.
fijate que acá no podés invocar directamente el pin 4... pues en UNO sólo tienen interrupciones los pines 1 y 2, que se invocan 0 y 1 respectivamente... en tu caso poné el cable en el pin 1 y te quedaría
Bueno, creo que el interesado ya no esta interesado.
inelint:
UNO sólo tienen interrupciones los pines 1 y 2
Creo que te equivovas, los pines son el 2 y 3 para el uno y 2, 3, 18, 19, 20 y 21 para mega, lo puedes consultar en attachInterrupt()
inelint:
que se invocan 0 y 1 respectivamente... en tu caso poné el cable en el pin 1 y te quedaría
attachInterrupt(0,ISR_EnA,RISING);
De nuevo creo que estas errado, el pin 0 es el pin 0 y el pin 1 es el pin 1, así que si pone el cable en el pin 1 y luego llama al pin cero no funcionara. Puedes ver una imagen donde se ven claramente la numeracion de los pines Aquí
Ademas si recomiendas usar el pin 0 y/o el pin 1 que son la comunicación serie, deverias de comentar que no puede usar Serial.print ni Serial.begin