Vitesse acquisition des données via UART (moniteur série)


bonjour,

j'ai réalisé un programme sur pc qui envoi des octets par paquet de 128 sur le port série du pc (enfin ici c'est le cable usb de l'arduino) . aucun problème de ce côté là.

sur l'arduino uno j'ai un petit programme qui récupère ces octets pour les charger dans un tableau. ce programme fonctionne bien mais est trop lent à cause du temps nécessaire entre chaque octet reçu.

en effet je suis obligé, du côté du programme pc, de respecter un temps mort de 1seconde entre chaque octets envoyés sans quoi ça ne marche pas(le tableau ne se rempli pas à part le premier élément qui se trouve avec une valeur etrange).

voici mon petit sketch arduino:
code: [select]

int userbtn = 7;

int = 0;
int page_buff[128] ;          // buffer page eeprom

string chaine_rx = string();  // chaine de réception uart
int val_rx = 0;               // valeur de réception issue de chaine_rx
int k = 0;
//--------------------------------------------------
//           afficher buffer 128 octets            -
//--------------------------------------------------
void display_pbuff(void)
{
    (i=0; < 128; i++)
    {
      serial.print(i);
      serial.print(" : ");
      serial.println(page_buff[i]);
    }
}


//--------------------------------------------------
//           initialisation                        -
//--------------------------------------------------
void setup()
{         
    pinmode(userbtn, input); 
    serial.begin(9600);
    delay(10);
    serial.println("eeprom programmer");   
}


//--------------------------------------------------
//           boucle principale                     -
//--------------------------------------------------
void loop()
{
    int inval = digitalread(userbtn);
    if (inval == low)
    {
       display_pbuff();                  // afficher buffer sur appui du bouton
       delay(100);
    }
 
    if (serial.available() > 0)         // quand on reçois un octet
    {
      chaine_rx = serial.readstring();  //stock chaine dans chaine_rx
      val_rx = chaine_rx.toint();       // transformation en valeur numérique
             
      page_buff[k] = val_rx;            // remplir le buffer
      if (k < 128) {k = k + 1;}         // ne pas déborder
      if (k == 128) {serial.println("ack");}
     
    }
}


une idée ?

merci.

bon bah c'est bon.
c'est avec serial.settimeout() qu'on peut régler ça. par défaut c'est à 1000ms, ce qui explique tout.


Arduino Forum > International > Français (Moderators: jfs, Snootlab) > Vitesse acquisition des données via UART (moniteur série)


arduino

Comments