Overloaded Arduino processor?

Bonjour,
Si la réponse est déjà quelque part, je m'en excuse.

J'ai un Arduino avec une télécommande FLYSKY FS-I6.
L'entrée du récepteur radio est sur la broche 5 pour la manette de gauche et sur la 6 pour la manette de droite.
J'ai un moteur pas à pas contrôlé par un DM860H branché sur la broche DIR sur le pin 12 et le PUL sur le 11.

Lorsque je le contrôle le moteur seul, tout se passe bien. Mais lorsque je veux recevoir les commandes de la FLYSKY, le moteur donne des à-coups. L'Arduino est-il surchargé ?

// Arduino -> DM860H
// 12 -> DIR-
// 11 PUL-
// 5 volts -> DIR+ et PUL+
// Recepteur FLYSKY -> Commande gauche = 5 et commande droite = 6

// Entrèes utilisées FLYSKY
#define CH2 5
#define CH3 6
// Valeurs lues  FLYSKY
int ch2Value;  
int ch3Value;

// Cette fonction permet de lire la valeur des entrées analogiques (Les potentiomètres) FLYSKY 
int readChannel(int channelInput, int minLimit, int maxLimit, int defaultValue){  
  int ch = pulseIn(channelInput, HIGH, 30000);  
  if (ch < 100) return defaultValue;  
  return map(ch, 1000, 2000, minLimit, maxLimit);  
}  

#include <Stepper.h>
const int stepsPerRevolution=200;
Stepper myStepper(stepsPerRevolution,12,11);

void setup()
{
Serial.begin(115200);

// Mettre les pins en input  
pinMode(CH2, INPUT);  
pinMode(CH3, INPUT);

myStepper.setSpeed(8000); // reglage vitesse
}

void loop()
{
// Récupérer les valeurs de chaque entrée (Pose problème lorsqu'il n'est pas en commentaire)
ch2Value = readChannel(CH2, -100, 100, 0);  
ch3Value = readChannel(CH3, 0, 100, 0);

Serial.print("tCh2: ");  
Serial.println(ch2Value);  
Serial.print("tCh3: ");  
Serial.println(ch3Value);

 myStepper.step(stepsPerRevolution);

}

Tu as ici un timeout de 30ms. Si aucune impulsion n'est détectée pulseIn attend donc 30ms. Comme tu appelles 2x cette fonction cela peut bloquer pendant 60ms.
Quel est normalement la récurrence des impulsions?

Bonjour oasis797

Pour faire suite aux indications de @fdufnews , tu devrai mesurer tes impulsions en utilisant les interruptions, ainsi tu n'aurai plus rien de bloquant (comme pulseIn) pour gêner la gestion du moteur.

Ou autre option, l'usage de la bibliothèque RC_Receiver:
image

Cordialement
jpbbricole

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.