Vitesse d'éxécution arduino uno r3

Salut à tous, j'utilise une carte arduino uno avec un écran lcd de chez 4D systems, et pour tester la vitesse d’exécution, j'ai réalisé un petit programme tout simple, on pousse sur un bouton et on incrémente la valeur d'un compteur, mais même en bougeant tous les delay ce n'est toujours pas très rapide, serait-ce à cause de la communication série avec mon écran? Ou comment faire pour augmenter la vitesse?

delay() est une fonction bloquante, arduino ne fait rien pendant ce temps.
Utilise millis() à la place pour aller plus vite.
Exemple ici http://arduino.cc/en/Tutorial/BlinkWithoutDelay

Bonjour,

Nous parler d'une vitesse d'exécution sans le code c'est contre productif ...

Rapidement :

  • delay() est une fonction bloquante (logique c'est son but).
  • Serial.print() est une fonction non bloquante mais qui peut ce bloquer si tu tente d'envoyer plus de 32 octets d'un coup (taille du buffer).

Désolé j'ai été un peu trop bref dans mon explication, en fait je fais un programme qui gère un écran LCD et un contrôleur de moteur brushless pour un kit d'assistance électrique de vélo, et une des fonctions du µContrôleur est d'afficher la vitesse, donc je désire compter un certain nombre de pulse pendant 3 secondes dans un premier temps, j'accélèrerais ensuite si ça fonctionne bien.
Et pour la vitesse d'éxécution j'ai essayé mon programme sur le moniteur série arduino, et je me suis rendu compte que c'était bien la communication série avec l'écran 4D Systems qui ralenti mon système, sans ça l'arduino capte environ toute les 6 ms.

Voici le système de communication de chez 4D, vous pensez qu'il y a moyen de faire aller plus vite, en plus il y a autre chose que je ne comprend pas, la trame de communication ne se trouve pas dans la boucle, alors elle est exécutée quand? en permanence ou une fois a chaque cycle de la boucle?

//------------------4D Systems-----------------------------//

#define READ_OBJ 0x00
#define WRITE_OBJ 0x01
#define REPORT_OBJ 0x05
#define REPORT_EVENT 0x07

const uint16_t digit = 0x0F00;
const uint16_t led = 0x1300;

uint8_t on;
uint8_t off;
uint8_t command;
uint16_t object, value;
boolean flag;

uint8_t nacAck() {
delay(10);
while (!Serial.available());
return Serial.read(); // 0xc6 or 0xd5
}

//------------------------------------------------------------------------------------//

bool readMessage(uint8_t &command0, uint16_t &object0, uint16_t &value0) {
bool flag0 = false;
uint8_t buffer[6];
uint8_t checksum = 0x00;
uint8_t i=0;
if (Serial.available()>0) {
buffer = Serial.read();

  • command0 = buffer[0];*
  • i++;*
  • checksum = command0;*
  • if (command0==REPORT_EVENT) {*
  • if (Serial.available()>3) {*
    _ buffer = Serial.read();_
    _ checksum ^= buffer*;
    i++;
    buffer = Serial.read();
    checksum ^= buffer;
    i++;
    object0 = buffer[1]<<8 | buffer[2];
    buffer = Serial.read();
    checksum ^= buffer;
    i++;
    object0 = buffer[1]<<8 | buffer[2];
    buffer = Serial.read();
    checksum ^= buffer;
    i++;
    value0 = buffer[3]<<8 | buffer[4];
    }
    }
    flag0 = (checksum==Serial.read());
    }
    return flag0;
    }
    bool sendMessage(uint8_t command0, uint16_t object0, uint16_t value0) {
    bool flag0 = false;_

    uint8_t buffer[6];
    uint8_t checksum = 0x00;
    uint8_t i=0;
    _ buffer = command0;
    checksum = command0;
    i++;
    buffer = object0 >>8;
    checksum ^= buffer;
    i++;
    buffer = object0 & 0xff;
    checksum ^= buffer;
    i++;
    buffer = value0 >>8;
    checksum ^= buffer;
    i++;
    buffer = value0 & 0xff;
    checksum ^= buffer;
    i++;
    buffer = checksum;
    i++;
    Serial.write(buffer, i);
    delay (1);
    return (nacAck()==0x06);
    }
    //---------------------------------------------------------------------------//*_