Demo entry 6350538

apolo

   

Submitted by Jol on Mar 12, 2017 at 16:29
Language: C. Code size: 5.0 kB.

/***** CONTROL DEL MOTOR ****************************************************************************************************/
//++ Mentres enable sigui HIGH el motor restarà apagat y no patirà ni consumirà. El xip apagarà tots els ports i no llegirà comandaments ++





void avanti (long pasos, int retard) 	 // avança (AMUNT) el motor un numero determinat de pasos amb un retard entre ells
{
	digitalWrite(dir, LOW);				     // direcció cap endavant
	for (a = 1; a <= pasos; a++) 
	{
    digitalWrite(stp, HIGH);   
    delay(retard);               			 // retard entre pasos en milisegons per regular la velocitat
    digitalWrite(stp, LOW);  
    delay(retard);           	
	}
	//pasosEndavant = pasosEndavant + pasos;     // guarda els pasos que va fent el motor endavant
  pActual = pActual + pasos;          // actualitza la posició suman els pasos que ha avançat
}



void recula (long pasos, int retard)			// retrocedeix (AVALL) el motor un numero determinat de pasos amb un retard entre ells
{	
	digitalWrite(dir, HIGH);					      // direcció cap endarrera
	for (a = 1; a <= pasos; a++) 
	{ 
    digitalWrite(stp, HIGH);   
    delay(retard);               			 // retard entre pasos en milisegons
    digitalWrite(stp, LOW);  
    delay(retard);           	
	}
  // pasosEndarrera = pasosEndarrera + pasos;   // guarda els pasos que va fent el motor endarrera
pActual = pActual - pasos;            // actualitza la posició restan els pasos que ha retrocedit
}



    void posicio ()                       // calcula la posició actual tenint en compte els moviments fets amb els polsadors
{
  //pActual = pasosEndavant - pasosEndarrera;
  Serial.print(" pActual ");  Serial.println(pActual); // sols per depurar           DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD

}



void situarMotor ()                   // mou el motor a la posició d'inici de les fotos
{
  if(posicioRetorn > 0)
  {
    digitalWrite(enable, LOW);        // activa el driver
    avanti (posicioRetorn,1);
    digitalWrite(enable, HIGH);       // desactiva el driver */ 

  }
  if(posicioRetorn < 0)
  {
    digitalWrite(enable, LOW);        // activa el driver
    recula (posicioRetorn * -1,1);    // converteix el número negatiu en positiu
    digitalWrite(enable, HIGH);       // desactiva el driver
  } 
}



void mouMotor ()
{
  if (pasosAmoure > 0)                          // comprova en quin sentit te que anar el motor, en aquest cas ha de retrocedir
    {
      digitalWrite(enable, LOW);                // activa el driver del motor
      // posa el motor al mínim de velocitat
//      digitalWrite(ms1, HIGH);                  // defineix la velocitat 
//      digitalWrite(ms2, HIGH);                  // del motor al mínim
      for(int i=1; i<=numeroFotos; i++)         // bucle de fotos i desplaçament segons el numero de fotos calculat en calcul1()
        {
          
          recula (pasosAmoure,1);               // mou el motor cap a la posició final
          ferFoto ();                           // fa la foto un cop parat el motor
          myGLCD.printNumI(i, 0, 16, 3,'0');    // mostra el nombre de fotos realitzades
          stop ();
      
        }
      // torna a restablir la velocitat del motor seleccionada anterirment
//      digitalWrite(ms1, resMotor [velMotor]);   // defineix la velocitat 
//      digitalWrite(ms2, resMotor [velMotor+1]); // del motor segons valor seleccionat
      digitalWrite(enable, HIGH);               // desactiva el driver del motor
    }

  if (pasosAmoure < 0)                          // comprova en quin sentit te que anar el motor, en aquest cas ha de avançar
    {
      //numeroFotos = numeroFotos * -1;         // converteix la variable en número positiu
      //pasosAmoure = pasosAmoure * -1;         // converteix el valor en positiu per poder enviar-ho al motor
      digitalWrite(enable, LOW);                // activa el driver del motor
      // posa el motor al mínim de velocitat
//      digitalWrite(ms1, HIGH);                  // defineix la velocitat 
//      digitalWrite(ms2, HIGH);                  // del motor al mínim
      for(int i=1; i<=numeroFotos; i++)         // bucle de fotos i desplaçament segons a numero de fotos calculat en calcul1()
        {
          avanti (pasosAmoure * -1,1);          // converteix el valor en positiu per poder enviar-ho al motor ----  mou el motor cap a la posició final
          ferFoto ();                           // fa la foto un cop parat el motor
          myGLCD.printNumI(i, 0, 16, 3,'0');    // mostra el nombre de fotos realitzades
          stop ();                              // comprova si s'ha polsat la tecla STOP

        }
      // torna a restablir la velocitat del motor seleccionada anterirment
//      digitalWrite(ms1, resMotor [velMotor]);   // defineix la velocitat 
//      digitalWrite(ms2, resMotor [velMotor+1]); // del motor segons valor seleccionat
      digitalWrite(enable, HIGH);               // desactiva el driver del motor
    }
}

This snippet took 0.01 seconds to highlight.

Back to the Entry List or Home.

Delete this entry (admin only).