[Résolu] Aide Débutant Deux boucles à fusionner

Bonsoir/Bonjour

J’ai un problème un peu simplet je pense mais pourtant je bloque dessus complètement depuis 4heures.
J’ai une lampe led RGB et un moteur Pas à Pas. J’ai donc deux programmes différents que je voudrais fusionner. Le problème c’est que quand je fusionne tout ça, la led RGB continue à clignoter comme je le souhaite, aucune différence, sauf que le moteur fait un mouvement, puis laisse la place à led, puis fait un mouvement, puis laisse la place à la led et ainsi de suite, en bref le moteur est encore plus lent, au lieu de faire un tour en 5 secondes, il fait un tour en une minute, c’est trop, ma fonction loop n’est donc pas correcte. I need your help !

PS: j’ai consulté plusieurs tuto et sujets du forum mais je bloque toujours.

Merci d’avance pour votre aide.

Moteur pas à pas

int IN1 = 7; 
int IN2 = 6; 
int IN3 = 5; 
int IN4 = 4;

int _step = 0; 

boolean dir = false;

int _speed = 1;

 void setup() 
{ 
        pinMode(IN1, OUTPUT);  
        pinMode(IN2, OUTPUT);  
        pinMode(IN3, OUTPUT);  
        pinMode(IN4, OUTPUT);
} 


void loop() 
{  
  _step = StepperMotor(_step,dir, _speed);
}
int StepperMotor(int _step, int dir, int _speed)
{
  
 switch(_step){ 
   case 0: 
     digitalWrite(IN1, LOW);  
     digitalWrite(IN2, LOW); 
     digitalWrite(IN3, LOW); 
     digitalWrite(IN4, HIGH); 
   break;  
   case 1: 
     digitalWrite(IN1, LOW);  
     digitalWrite(IN2, LOW); 
     digitalWrite(IN3, HIGH); 
     digitalWrite(IN4, HIGH); 
   break;  
   case 2: 
     digitalWrite(IN1, LOW);  
     digitalWrite(IN2, LOW); 
     digitalWrite(IN3, HIGH); 
     digitalWrite(IN4, LOW); 
   break;  
   case 3: 
     digitalWrite(IN1, LOW);  
     digitalWrite(IN2, HIGH); 
     digitalWrite(IN3, HIGH); 
     digitalWrite(IN4, LOW); 
   break;  
   case 4: 
     digitalWrite(IN1, LOW);  
     digitalWrite(IN2, HIGH); 
     digitalWrite(IN3, LOW); 
     digitalWrite(IN4, LOW); 
   break;  
   case 5: 
     digitalWrite(IN1, HIGH);  
     digitalWrite(IN2, HIGH); 
     digitalWrite(IN3, LOW); 
     digitalWrite(IN4, LOW); 
   break;  
     case 6: 
     digitalWrite(IN1, HIGH);  
     digitalWrite(IN2, LOW); 
     digitalWrite(IN3, LOW); 
     digitalWrite(IN4, LOW); 
   break;  
   case 7: 
     digitalWrite(IN1, HIGH);  
     digitalWrite(IN2, LOW); 
     digitalWrite(IN3, LOW); 
     digitalWrite(IN4, HIGH); 
   break;  
   default: 
     digitalWrite(IN1, LOW);  
     digitalWrite(IN2, LOW); 
     digitalWrite(IN3, LOW); 
     digitalWrite(IN4, LOW); 
   break;  
 } 
 if(dir){ 
   _step++; 
 }else{ 
   _step--; 
 } 
 if(_step>7){ 
   _step=0; 
 } 
 if(_step<0){ 
   _step=7; 
 } 
 delay(_speed); 
 return _step;
}

Led RGB

int ledR = 1;
int ledB = 2;
int ledG = 3;
void setup() {
  
}

void loop() {
  analogWrite(ledR,0);
  analogWrite(ledG,255);
  analogWrite(ledB,255);
  delay(200);

  analogWrite(ledR,255);
  analogWrite(ledG,0);
  analogWrite(ledB,0);
  delay(50);
  
}

Bonsoir, C'est pas le delay(200) et le delay(50) dans ton code led RGB qui est en cause ? il ne faudrait pas utiliser plutôt quelque chose du genre: if (millis() - old_time >= 200){ ...}

Voilà, comme l'a dit soraka il faut remplacer les fonctions delay(), qui sont bloquantes, par des fonctions millis(). A chaque début de boucle tu fais un appel à millis(), et tu stocke cette valeur. Au débout de la boucle suivante tu compares la valeur enregistrée avec la valeur actuelle, puis te calcules la différence. Et tu teste la valeur de cette différence, en fonction du test tu appelles ou non les fonctions de mise à jour de ta led et de ton moteur. ;)

Merci beaucoup de votre aide je suis sur une piste!

EDIT: problème résolu avec plus ou moins de mal, merci pour vos indices!