moteurs pas a pas + écran oled (rafraîchissement de l’écran cause des problèmes)

Bonjour a tous en ce moment je travail sur un slider motorisé (3 moteurs). C’est un projet pour le lycée (STI2D SIN). Pour qu’il soit plus facile d’utilisation j’utilise un écran oled 2.42 pouce. J’aimerais rafraîchir l’écran en même temps que les moteurs tournent mais lorsque l’écran se rafraîchi les moteurs s’arrête ce qui me dérange. Donc je cherche une solution pour que l’écran se rafraîchisse plus vite ou qqch comme ça…. Fin qu’au final je puisse ne plus avoir de pause.
Librairie : - AccelStepper (pour les moteurs)

  • U8glib.h (pour l’écran)

Le code pour l’écran

void draw(void) {
  clear_screen();
  if (Screen_State == 1){ //Screen_state == 1 = initialitation
    u8g.setFont(u8g_font_7x13B);
    u8g.setPrintPos(15, 10); 
    u8g.print("Initialisation");
    if(Home_State == 1){
    u8g.setFont(u8g_font_7x13B);
    u8g.setPrintPos(45, 40); 
    u8g.print("Home X");  
    }
    if(Home_State == 2){
    u8g.setFont(u8g_font_7x13B);
    u8g.setPrintPos(45, 40); 
    u8g.print("Home Y");  
    }
    if(Home_State == 3){
    u8g.setFont(u8g_font_7x13B);
    u8g.setPrintPos(45, 40); 
    u8g.print("Home Z");  
    }
    if(Home_State == 4){
    //RIEN (-;  
    }
  }
  if (Screen_State == 2){ //Screen_state == 2 = Menu
    if(Mode_M_A == 0)
      { 
        clear_screen();
        u8g.setFont(u8g_font_7x13B);
        u8g.setPrintPos(50, 9); 
        u8g.print("Mode");
        u8g.drawLine(0, 11, 128, 11);
        u8g.setPrintPos(25, 30); 
        u8g.print("Manuel");
        u8g.setPrintPos(25, 50); 
        u8g.print("Automatique");
        u8g.setPrintPos(5, 30);
        u8g.print(">"); 
      }
    if(Mode_M_A == 1)
      { 
        clear_screen();
        u8g.setFont(u8g_font_7x13B);
        u8g.setPrintPos(50, 9); 
        u8g.print("Mode");
        u8g.drawLine(0, 11, 128, 11);
        u8g.setPrintPos(25, 30); 
        u8g.print("Manuel");
        u8g.setPrintPos(25, 50); 
        u8g.print("Automatique");
        u8g.setPrintPos(5, 50);
        u8g.print(">"); 
      }  
  }
  if (Screen_State == 3){ //Screen_state == 3 = Manuel
     u8g.setFont(u8g_font_7x13B);
     u8g.drawLine(0, 11, 128, 11);
     u8g.setPrintPos(40, 9); 
     u8g.print("Manuel");
     u8g.drawFrame(0,18,40,40);
     u8g.drawFrame(43,18,40,40);
     
     /*
     MAP_joy1invers2 = map(analogRead(5),0,1023,1023,0);//calcul pour l'affichage des joystick sur l'ecran  
     MAP_joy1invers1 = map(analogRead(3),0,1023,1023,0);
     MAP_joy1_1 = map(MAP_joy1invers1 ,0,1023,5,35);
     MAP_joy1_2 = map(MAP_joy1invers2,0,1023,23,53);
     MAP_joy2_1 = map(analogRead(4),0,1023,23,53);
     
     u8g.drawBox(MAP_joy1_1-5,MAP_joy1_2-5,10,10);
     u8g.drawBox(MAP_joy2_1-5+25,32,10,10);
     */


     
     u8g.setFont(u8g_font_5x8);
     u8g.setPrintPos(90, 30); 
     u8g.print("X:");
     u8g.setPrintPos(100, 30); 
     u8g.print(stepperX.currentPosition());
     u8g.setPrintPos(90, 40); 
     u8g.print("Y:");
     u8g.setPrintPos(100, 40); 
     u8g.print(stepperY.currentPosition());
     u8g.setPrintPos(90, 50); 
     u8g.print("Z:");
     u8g.setPrintPos(100, 50); 
     u8g.print(stepperZ.currentPosition());  
  }
  if (Screen_State == 4){ //Screen_state == 4 = Manuel
    if(t==2)
    {
     u8g.setPrintPos(10, 30); 
     u8g.print("depl 1er pos"); 
    }
    if(t==1)
    {
     u8g.setPrintPos(10, 30); 
     u8g.print("depl 1er pos"); 
    }
    if(t==0)
    {
     u8g.setPrintPos(10, 30); 
     u8g.print("clic pour save 2eme pos"); 
    }
    if(t==-1)
    {
     u8g.setPrintPos(10, 30); 
     u8g.print("clic pour save 1er pos");
    }
        
  }
}

Le code pour les moteurs

void LimitStepperX ()
{
if ((analogRead(4)-509)*2 < -2) 
 {
     if (stepperX.currentPosition() > 0)
     {
        stepperX.setSpeed((analogRead(4)-509)*2);
        stepperX.runSpeed();
     }
  
 }
 
 if ((analogRead(4)-509)*2 > 2 ) 
  {
    if (stepperX.currentPosition() < 31556)
     {
        stepperX.setSpeed((analogRead(4)-509)*2);
        stepperX.runSpeed();
     }
  
  }
}

void LimitStepperY ()
{
 if ((analogRead(3)-490)*2 < -2) 
   {
   if (stepperZ.currentPosition() > 0)
      {
          stepperZ.setSpeed((analogRead(3)-490)*2);
          stepperZ.runSpeed();
      }
  
   }
 
 if ((analogRead(3)-490)*2 > 2) 
  {
    if (stepperZ.currentPosition() < 7346)
     {
          stepperZ.setSpeed((analogRead(3)-490)*2);
          stepperZ.runSpeed();
     }

  }
}



void LimitStepperZ ()
{
  if ((analogRead(5)-515)*2< -2) 
  {
    if (stepperY.currentPosition() > 0)
       {
          stepperY.setSpeed((analogRead(5)-515)*2);
          stepperY.runSpeed();
       }
  }
 
 
  if ((analogRead(5)-515)*2 > 2) 
  {
    if (stepperY.currentPosition() < 12766)
     {
        stepperY.setSpeed((analogRead(5)-515)*2);
        stepperY.runSpeed();
     }
  
  }
}

et le void loop

void loop()
{
 if(Screen_State == 3)
 {
  unsigned long currentMillis = millis();

  if (currentMillis - previousMillis >= 200) {
    
    previousMillis = currentMillis;
     u8g.firstPage();  
     do {
     draw();
     }while( u8g.nextPage() );
  }
 }
 
 Manuel_OR_Automatique();
 if(Stepper_active == HIGH){ 
   LimitStepperX(); // l:141
   LimitStepperY(); // l:164
   LimitStepperZ(); // l:189
 }

 if(Set_Position_Ative == HIGH){
   SetPosition();
 }

}

_12_03_2020_3EME.ino (10.7 KB)