Communication entre 2 arduino

Bonjour,

Je suis débutant en programmation et j'apprend l'Arduino en réalisant des petits projets.
Mon projet actuel est d'utiliser un écran tactile pour piloter un moteur pas à pas.
Le problème est que le shield arduino du moteur et celui de l'écran ne sont pas compatible sur une seule carte arduino (uno). J'ai essayé de nombreuses heures de résoudre ce problème mais sans succès.
Possédant une seconde arduino j'ai donc choisis de séparer l'écran et le moteur sur chacune des cartes et de faire communiquer ces dernières entre elles.
Cependant j'ai du mal a comprendre les différents tutos sur le sujet et tout ceux que j'ai testé n'ont rien donné.

Pour la carte moteur :

#include <Stepper.h>
#include <Wire.h>

const int stepsPerRevolution = 200;  // nombre de pas par tour

  // init
Stepper myStepper(stepsPerRevolution, 12,13);    

  // noms des pins
void Reset();
const int pwmA = 3;
const int pwmB = 11;
const int brakeA = 9;
const int brakeB = 8;
const int dirA = 12;
const int dirB = 13;
int s = 0;

void setup() 
{
Wire.begin(4);
Wire.onReceive(moteur);
Serial.begin(9600);

 //attribution des pins
pinMode(pwmA, OUTPUT);
pinMode(pwmB, OUTPUT);
pinMode(brakeA, OUTPUT);
pinMode(brakeB, OUTPUT);
pinMode(7, INPUT);
digitalWrite(pwmA, HIGH);
digitalWrite(pwmB, HIGH);
digitalWrite(brakeA, LOW);
digitalWrite(brakeB, LOW);

myStepper.setSpeed(20);   //vitesse du moteur
delay (5000); 
}

void loop()
{
  if (s==1)
  {
    myStepper.step(33);
    s=0;
  }
  delay(5);
}

void moteur(int s) 
{
  s = Wire.read();
}

Pour la carte écran tactile :

#include <mtds.h>
#include <string.h>
#include <stdint.h>
#include <Wire.h>

int s = 0;

int temps = 10;
char tps[3];

void setup() 
{
  bool  fStat;
  HBMP  hbmpDisplay;
  BMPD  bmpdDisplay;

  Serial.begin(115200);

  msDisp = millis() + 100000;

  // init
  while(true)
  {
    fStat = mtds.begin();
    if (fStat)
    {
      Serial.println("mtds.begin() succeeded");
      break;
    }
    else 
    {
      Serial.println("mtds.begin() failed");
      delay(1000);
    }
  }

   // definition zone de dessin
  hbmpDisplay = mtds.GetDisplayBitmap();
  mtds.GetBitmapDimensions(hbmpDisplay, &bmpdDisplay);
  Serial.println("Display dimensions in portrait orientation");
  Serial.print("  bmpd.dxco = ");
  Serial.print(bmpdDisplay.dxco, DEC);
  Serial.print("  bmpd.dyco = ");
  Serial.println(bmpdDisplay.dyco, DEC);

  // passage en mode paysage
  if (mtds.SetDisplayOrientation(dsoLandscape)) 
  {
    Serial.println("mtds.SetDisplayOrientation() succeeded");
  }
  else 
  {
    Serial.println("mtds.SetDisplayOrientation() failed");
  }
  Wire.begin();
  
}

void loop()   
{
  HDS    hds;
  MTCH    mtch;
  msCur = millis();

  //fonction d'affichage du "bouton" tactile
  Play();

  mtds.SetTchSensitivity(1);
  
    //detection d'une pression sur l'ecran
  if (mtds.GetMsgStatus() != 0) 
  {
       mtds.GetMsg((MEVT *)&mtch);
      
      //zone tactile du Bouton Play
        if ((20 <= mtch.xco)&&(90 >= mtch.xco)&&(145 <= mtch.yco)&&(215 >= mtch.yco))
            {
              Serial.println("Programme moteur marche");
               Wire.beginTransmission(4);
               Wire.write(1);
               Wire.endTransmission();
            }  
   } 
   delay(100);
   mtds.ClearMsgQueue();
}

... je ne montre pas La fonction d'affichage graphique pas nécessaire pour mon problème

J'ai essayé les codes ci-dessus mais n'ayant pas bien compris la démarche à effectuer je pense qu'ils contiennent des erreurs.
Savez vous comment je pourrai résoudre ce problème ?
Par ailleurs j'imagine que l'utilisation de 2 arduino n'est surement pas la seule/meilleure solution donc je suis preneur de toute autre solutions.

Oui, en donnant plus de renseignements. Si il n'y a pas assez de broches libres pour faire travailler les deux (écran et moteur), il n'y aura pas assez pour l"écran et le dialogue.
Le meilleur moyen est de mettre les deux sur une seule carte arduino.
Quel écran est utilisé? Comment est-il câblé?
Quel moteur est utilisé? Comment est-il commandé?
Au cas ou, c'est plus simple de changer la commande du moteur que d'utiliser deux cartes Uno. Pour faire tourner un moteur, avec 2€ on trouve des drivers qui n'utilisent que deux pins libres et n'importe lesquelles.

Tout d'abord merci pour ta réponse.
Ensuite, j'ai déjà étudié les broches disponibles et il n'était pas censé y avoir de conflit.
Séparément les programmes pour le moteur et pour l'écran fonctionnent correctement .
Mais lorsque je met les 2 sur la même carte avec un programme combinant moteur et écran cela ne fonctionne plus pour le moteur. L'écran fonctionne mais le moteur ne tourne pas (je sens qu'il "force" pour essayer de tourner mais sans y arriver, cela donne l'impression qu'il est bloqué alors qu'il n'est pas censé l'être)

L'écran est celui-ci : https://reference.digilentinc.com/reference/add-ons/mtdshield/reference-manual
le moteur est légèrement diffèrent mais fonctionne pareil que celui la : https://fr.rs-online.com/web/p/moteurs-a-courant-continu/5350338/
et il utilise le arduino motor shield rev3 : Arduino Motor Shield Rev3 — Arduino Official Store
je ne m'y connais pas beaucoup donc j'ai du mal à cibler le problème. Est-ce vraiment un conflit sur les broches ?

Il y a effectivement conflit car l'afficheur est SDI et utilise les broches 10 à 13 (on peut remplacer la 10 par la 8), et on ne peut pas changer de broches car SDI est une fonction hardware.
Le shield moteur utilise au moins 12 et 13 pour avancer. Ce qui est dommage, car c'est juste soft. Je suppose que ce shield est fait pour être utilisé seul.

Les shields sont pratiques si on n'a qu'une chose à mettre, pas deux. Pour moi, la bonne solution consiste à utiliser un driver non shield pour le moteur.

La résistance d'un enroulement du moteur est-elle bien de 6,5ohms? Cela est indispensable si on veut savoir comment le piloter.

D'accord merci pour cette explication.
Je pense que la résistance est bien de 6.5 ohms comment dois-je alors m'y prendre ?

Ah non, après vérification la résistance est de 5.4 ohms

Quelles sont les 3 dimensions du moteur? Qu'y a-t-il de marqué sur le moteur? Bien souvent c'est la référence et elle est valide. Pas sur celui de RS qui est une référence à eux. L'idéal est de trouver un N) du type17HS0000.

On peut classer les pas à pas en deux catégories, ceux qui devraient être alimentés en tension (5V ou 12V le plus souvent), pour les quels un pont est une bonne solution, et ceux qui devraient être alimentés en courant. Pour ces derniers, la résistance du bobinage est plus faible. J'ai bien l'impression que c'est ton cas. Avec 5.4ohms on est un peu au milieu des deux. Tant qu'à choisir un driver, autant trouver le bon. Le moteur du lien devrait être alimenté en courant en le limitant à 0.6A Sur la courbe de couple, il est marqué que l'essai se fait en 24V qui est l'alimentation du moteur (pas la tension à ses bornes). Alimenté par le shield Arduino en V, il y en a à peu près 4 à ses bornes, ce qui est correct.

Pour l'utilisation du shield, on n'est nullement obligé de l'emboiter? Rien n'empêche de le relier comme si c'étati une carte non shield. J'ai un écran qui se connecte comme le tiens, mais il est branché à côté!

Le moteur ne tourne pas (je sens qu'il "force" pour essayer de tourner mais sans y arriver, cela donne l'impression qu'il est bloqué alors qu'il n'est pas censé l'être)

Si le moteur est alimenté mais que l'on envoie pas les impulsions pour le faire tourner, on a exactement cette impression. Pour arrêter un moteur CC, un moteur universel, un moteur asynchrone... il faut couper le courant et lorsqu’ils sont arrêtés deviennent mous, libres, non résistants. Pour un pas à pas, c'est presque le contraire, c'est lorsqu'ils sont à l'arrêt que le couple est maximum. Le moteur bloque. C'est signe qu'il fonctionne.
Et ceci nous permet de voir si on peut utiliser le shield. Branche le moteur même sans le faire tourner. Il devrait s'échauffer. Si il est au nominal, sa température peut atteindre 50°C. Si il est froid, c'est qu'il est sous alimenté. On peut l'utiliser ainsi, on a simplement moins de couple. Si il chauffe rapidement en moins de 2mn, c'est que le courant est trop élevé, et ce n'est pas bon.
Si il faut utiliser un driver extérieur, il existe deux types de drivers, les uns sont sur des cartes (un que j'aime bien), les autres sont dans des boitiers (TB6600 par exemple) pour les plus forts courants.

Seul le numéro d'article et la date de fabrication sont marqué sur le moteur mais sa référence est 20SH42-0804A
Il y a sa datasheet si besoin : https://docs.rs-online.com/31c3/0900766b8157d545.pdf

je n'ai pas bien compris l'interprétation de la courbe de couple, je ne serais pas contre une explication.

Sur la courbe de couple, il est marqué que l'essai se fait en 24V qui est l'alimentation du moteur (pas la tension à ses bornes). Alimenté par le shield Arduino en V, il y en a à peu près 4 à ses bornes, ce qui est correct.

Effectivement le Shield peut être utilisé sans l'emboiter et seulement en reliant les broches utiles mais, là encore, le conflit avec l'écran subsistait.

D'après ce que j'ai compris utiliser un autre driver représente la meilleure solution mais je ne sais pas très bien comment ils fonctionnent.
Quels sont leurs particularités ? lequel serait le plus adapté ?