Bonjour a tous, je ma frotte a un problème depuis quelque temps que je n'arrive pas à résoudre.
En fait, je cherche à dialoguer entre une UNO et un pic16f873(sur lequel je n'ai pas la main).
J'ai besoin d'envoyer une trame (7 bytes) en permanence (~toute les 50ms) au pic pour le maintenir "éveillé". là pas de soucis.
Lorsque celui ci me renvoi une trame (9bytes), mon UNO la prends bien en compte. Là il répond directe (n principe) par une autre trame (11bytes) mais celle-ci n'est pas reconnu par le pic....
J'ai fais des essais avec un terminal, en envoyant la trame de 11bytes et juste après avoir reçus celle de 9, et j'ai bien un retour du pic par une nouvelle trame.
Mais mon arduino n'y arrive pas...
Voici un code pour mieux comprendre :
#include <SoftwareSerial.h>
int iCmd;
byte byXor;
byte byCmd[40];
byte byRoutine[7] = {0x0b, 0x02, 0x41, 0x01, 0x26, 0x0f, 0x60};
byte byAskNumber[11] = {0x0b, 0x02, 0x42, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x41};
byte b = 0x00;
bool boCmd = false;
SoftwareSerial pic(10, 11); // RX, TX
void setup() {
Serial.begin(115200);
pic.begin (115200);
}
void loop() {
if (pic.available()) {
b = pic.read();
if (!boCmd && b == 0x0b) { //Là j'attends la reception d'une trame
byCmd[0] = b;
boCmd = true;
iCmd = 1;
byXor = 0x00;
}
else if (boCmd) { //J'enregistre la trame
byCmd[iCmd] = b;
iCmd++;
}
if (byXor == b && byCmd[iCmd - 2] == 0x0f) { //Je regarde si elle est finie-
boCmd = false; //son dernier octet est un xor-
InputCmd(byCmd); //du reste, précédé par l'octet 0F
}
else byXor ^= b; //Sinon je mets à jour mon comparateur de xor
}
else {
delay(50);
pic.write(byRoutine, sizeof(byRoutine)); //Pour maintenir "éveillé" le pic
}
}
void InputCmd(byte b[]) { //Ici je répond en fonction des trames reçues
if (b[2] == 0x41) pic.write(byAskNumber, sizeof(byAskNumber));
}
Voila, à savoir que je n'utilise plus SoftwareSerial...
Je m'en servait pour garder le debug sur Serial mais il n'a pas l'aire de bien gérer les 115200 bauds...
Par exemple si je reçois 0x40 il comprend 0xc0, 0x41 > 0xc1 etc...
En espérant avoir été suffisamment claire sur ma requête, merci d'avance pour votre aide!