Bonjour,
Ce sujet est la continuité du sujet " Arduino MEGA 2560 récupérer valeur depuis Ethernet " et je souhaite votre avis concernant la réalisation du code de récupération et traitement de messages I2C.
En effet je souhaite utiliser un arduino pour générer un signal carré, la valeur de la fréquence arrivera par I2C. Le hic c'est que le traitement de cette valeur est "lent" et ne me permet pas d'aller aussi vite que souhaité.
Le signal carré sature..
voici le code :
//COM 6
#include <Wire.h>
#define broche 11 // broche
int ledState = LOW; // ledState used to set the LED
unsigned long frequenceInt; // frequenceInt
unsigned long previousMicros = 0; // previousMicros take account the last state of the output (broche 12)
void setup() {
Wire.begin(); // join i2c bus (address optional for master)
Serial.begin(2000000); // start serial for output
pinMode(broche, OUTPUT); // output PIN setup in OUTPUT
}
void loop() {
Wire.requestFrom(8, 4); // request 6 bytes from peripheral device #8
unsigned long value = 0; // value
int i = 0;
while (Wire.available()) { // peripheral may send less than requested
unsigned long c = Wire.read(); // receive a byte and store it in unsigned long so it can be shifted later
value |= (c << (i*8)); // shift the received byte value and store it with the previous value
i++;
}
frequenceInt = value;
unsigned long currentMicros = micros();
if (currentMicros - previousMicros >= frequenceInt) { // here val must be the frequency value ( 1/2 period value)
previousMicros = currentMicros;
ledState = !ledState;
digitalWrite(broche, ledState);
}
}
Est-ce que le temps de traitement du message est contraint par le protocole I2C ? Si oui, puis-je utilisé un protocol plus rapide ?
J'ai estimé à 0,54ms le temps de traitement du message.
Lorsque je retire ces quelques lignes de code, j'arrive à obtenir un signal carré beaucoup plus rapide.
Merci d'avance pour vos conseils.