Arduino, proteus, motor y dos finales de carrera...

Iniciado por jgarridc, 7 Abril 2016, 10:30 AM

0 Miembros y 3 Visitantes están viendo este tema.

jgarridc

Hola buenas a tod@s, el tema es que he montado en proteus un arduino con un motor y dos finales de carrera, al meter desde el terminal virtual unos comandos el programa hará una cosa u otra y según como estén los finales de carrera, pues lo mismo. El problema me viene a una vez que el programa ha terminado, si pulso los finales de carrera o envío un comando por el terminal virtual ya no me hace caso.
Lo que pretendo es que esté en un buble infinito y el arduino siga ejecutando el programa, hasta que yo decida pararlo o lo desconecte de la corriente...

const byte giroMotorDerecha = 8;
const byte giroMotorIzquierda = 12;
const byte sensorDerecha = 11;
const byte sensorIzquierda = 10;
char valor;
bool switchDer, switchIzq, mIzq, mDer;

void setup() {
  pinMode(giroMotorDerecha, OUTPUT);
  pinMode(giroMotorIzquierda, OUTPUT);
  pinMode(sensorDerecha, INPUT);
  pinMode(sensorIzquierda, INPUT);
  Serial.begin(9600); // inicializa comunicación serie
}

void loop() {

  switchDer = digitalRead(sensorDerecha);
  switchIzq = digitalRead(sensorIzquierda);
  mIzq = digitalRead(giroMotorIzquierda);
  mDer = digitalRead(giroMotorDerecha);

  // Leo del puerto serie la orden enviada Devuelve 'r', 'd', 'i'
  if (Serial.available() > 0)
     valor = Serial.read();

 
     
          if (switchDer)  // paroMotorDerecha
          digitalWrite(giroMotorDerecha, LOW);
     
          if (switchIzq) // paroMotorIzquierda
          digitalWrite(giroMotorIzquierda, LOW);
       

     
if (valor == 'r' && !switchDer && !switchIzq)
     digitalWrite(giroMotorDerecha, HIGH);
             
if (valor == 'd' && switchIzq && !switchDer)
     digitalWrite(giroMotorDerecha, HIGH);
         

if (valor == 'i' && switchDer && !switchIzq)
    digitalWrite(giroMotorIzquierda, HIGH);
             
                 
}

engel lex

#1
lo que está en void loop() debería repetirse eternamente, así funciona... no será que le estás exigiendo demasiada corriente al arduino y se apaga?

puedes pasar la imagen de lo que tienes armado en proteus?
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

jgarridc

#2
Es todo sobre proteus, de momento no he montado nada físico....pero en la simulación pasa como he descrito...

Proteus: https://www.dropbox.com/s/ofmymx0bm0advxt/prueba%20finales%20de%20carrera1.pdsprj?dl=0

Arduino: https://www.dropbox.com/s/uwg3ad5f7i3ultr/prueba%20finales%20de%20carrera.ino?dl=0

engel lex

puedes pasar la imagen de lo que tienes armado en proteus?
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

jgarridc

#4

engel lex

no veo nada que pueda causar el error, puede ser inherente a la simulación
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

jgarridc

En cuanto pueda lo monto en la protoboard y lo compruebo físicamente, mucha gracias.

Bundor

#7
El proteus es un poco castaña, prueba algo sencillo para ver si te funciona el puerto serial.
Enciende un led.

Si el puerto serie no te funciona se quedará como tu dices, llega un momento que no hace nada.


Te faltan los corchetes. El primer if va entre llaves con el resto de if para que puedan ver la variable valor. Pruebalo a ver.

void loop() {

  switchDer = digitalRead(sensorDerecha);
  switchIzq = digitalRead(sensorIzquierda);
  mIzq = digitalRead(giroMotorIzquierda);
  mDer = digitalRead(giroMotorDerecha);

  // Leo del puerto serie la orden enviada Devuelve 'r', 'd', 'i'
  if (Serial.available() > 0){
     valor = Serial.read();

 
     
          if (switchDer)  // paroMotorDerecha{
          digitalWrite(giroMotorDerecha, LOW);
          }
          if (switchIzq) // paroMotorIzquierda{
          digitalWrite(giroMotorIzquierda, LOW);
          }

     
         if (valor == 'r' && !switchDer && !switchIzq){
         digitalWrite(giroMotorDerecha, HIGH);
         }       
         if (valor == 'd' && switchIzq && !switchDer){
         digitalWrite(giroMotorDerecha, HIGH);
         }   

         if (valor == 'i' && switchDer && !switchIzq){
         digitalWrite(giroMotorIzquierda, HIGH);
         }         
  }               
}