protocole com pc/arduino rapide

tout d'abord explication du projet but:faire suivre une video sur des objet en mouvement (la partie video mapping je metrise) via 4 moteur pas a pas je pilote mes moteur via des carte stepper 1 borne sens de rotation 1 borne step/go depuis le logiciel video (touchdesiners) je peux envoyer en serial une série de chifre (1et0) correspondant a l'etat voulu de mes sortie arduino TYPE : 10010011\n 1/ je ne sais pas comment mettre la sequence reçu dans un tableau variable j'ai quelque piste de ce que j'ai vu d'autre programme mais je ne parviens pas a finaliser 2/ j'ai monter une sequence d'analyse du tableau variableet de mise en etat des sortie est elle valide?? les 4 premiere sont les broche step donc a front montant

j'ai mis des petite serie de ?????? dans mon code la ou sont mes trou et mes interrogation d'avance merci de prendre part au tribulation d'un "noobuino" ludo

//declaration des constante
const int st1=2;
const int st2=3;
const int st3=4;
const int st4=5;
const int st5=6;
const int st6=7;
const int st7=8;
const int st8=9;

int tabvar[9}; // tableau de variable d'entrée
int octetReception=0 // recepption

void setup() { 


Serial.begin(1382400); //start serial 


//  Broches de sorties   
 pinMode (st1,OUTPUT); 
 pinMode (st2,OUTPUT); 
 pinMode (st3,OUTPUT);
 pinMode (st4,OUTPUT);
 pinMode (st5,OUTPUT);
 pinMode (st6,OUTPUT);
 pinMode (st7,OUTPUT);
 pinMode (st8,OUTPUT);


}
 void loop(){

while (Serial.available()>0) { // tant qu'un octet en réception 

        octetReception=Serial.read(); // Lit l octet reçu 

        if (octetReception==10) { // si Octet reçu est le saut de ligne 
                analysetableau(chaineReception); // appelle la fonction d'analyse tableau

                break; // sort de la boucle while
        }
                else { // si le caractère reçu n'est pas un saut de ligne
               ?????????; // ajoute le caratère au tableau
        }

} // fin  réception

//----- une fois que le saut de ligne est reçu, on sort du While et on se positionne ici 


int tabvar[9}=(00000000); //RAZ le tableau de réception????????       
        
 void analysetableau {      // comparaison des donne et mise en etat des sortie  
        
//sortie ""a front montant""        
        if tabvar[0]=1 digitalWrite(st1,HIGHT)
        if tabvar[1]=1 digitalWrite(st2,HIGHT)
        if tabvar[2]=1 digitalWrite(st3,HIGHT)
        if tabvar[3]=1 digitalWrite(st4,HIGHT)
//sortie TOR     
        if tabvar[4]=1 digitalWrite(st5,HIGHT)
        else digitalWrite(st5,LOW)
        if tabvar[5]=1 digitalWrite(st6,HIGHT)
        else digitalWrite(st6,LOW)
        if tabvar[6]=1 digitalWrite(st7,HIGHT)
        else digitalWrite(st7,LOW)
        if tabvar[7]=1 digitalWrite(st8,HIGHT)
        else digitalWrite(st8,LOW)
//""redessante du front""        
        digitalWrite(st1,LOW)
        digitalWrite(st2,LOW)
        digitalWrite(st3,LOW)
        digitalWrite(st4,LOW)
}

Bonjour et bienvenue :slight_smile:

Il y a beaucoup d’erreurs de syntaxe dans ton code… Mieux vaut recommencer à partir d’une base propre.

Voici un exemple (non testé)

const uint16_t maxInputLenght = 16;

const uint8_t pins[] = { 2, 3, 4, 5, 6, 7, 8, 9 };

// Fonction pour vérifier si un string contient uniquement des 0 et des 1
bool isBinary( const char* s )
{
  for ( uint8_t i = 0, j = strlen(s); i < j; i++ )
    if ( s[i] != '0' && s[i] != '1' )
      return false;
      
  return true;
}


void setup()
{
  Serial.begin( 1382400 );
  
  // Mettre chaque pin contenus dans le tableau "pins" en mode OUTPUT
  for ( uint8_t i = 0; i < 8; i++ )
    pinMode( pins[i], OUTPUT );
}


void loop()
{
  if ( Serial.available() > 0 ) 
  {
    static char input[maxInputLenght];
    static uint8_t i;
    char c = Serial.read();

    // Si le charactère reçu n'est pas un '\n', on continue à remplir le tableau
    if ( c != '\n')
    {
      if (i < maxInputLenght-1)
        input[i++] = c;
    }
    
    // Si le caractère reçu est un '\n', on le remplace par un '\0'
    // (parce que les strings doivent être terminés par un '\0')
    // et le tableau est prêt à être analysé.
    else
    {
      input[i] = '\0';
      i = 0;
      
      // Si le string contient uniquement 8 valeurs binaires, on écrit chaque valeur au pin correspondant
      if ( isBinary(input) && strlen(input) == 8 )
      {
          for ( uint8_t i = 0; i < 8; i++ )
            digitalWrite( pins[i], input[i] - '0' ); // input[i] - '0' transforme les caractères '0' et '1' en chiffre 0 et 1
      }
    }
  }
}

Bonne chance

Edit - Quelques idées:

  • Si possible, envoyer un seul byte au lieu de 8 caractères ‘1’ ou ‘0’.

  • Si possible, grouper les pins de façon à ce qu’ils soient tous sur le même port (par exemple sur un Arduino Mega, les pins 22 à 29 sont sur le port A)

Ca permettrais de simplifier le code et le rendre beaucoup plus rapide.