Bonjour à tous,
Je suis dans un projet ou je dois en gros: récupérer des infos d'un BMS sur un arduino, les envoyer sur une BDD hébergée sur une rpi puis envoyer des notifications sur un téléphone. Bref.
En gros le BMS m'envoie deux trame différentes, une qui me donne les tensions de toutes les cellules et qui est sur 28 octets et une autre trame avec des infos plus général.
Je stocke les deux trames dans deux tableaux différents et mon but serait d’arrêter la réception (je travaille sur les broches RX et TX de mon UNO) pendant par exemple 30min et re-lancer le programme pour reprendre les nouvelles infos plus tard.
J'ai essayé avec des delay() mais bien sur après des tests rapides je me rend compte que ce n'est pas du tout viable..
Donc je me suis intéressé au topic ou il y a des exemples avec des millis() pour que ma boucle ne se lance que tout les x temps mais je me heurte au problème de saturation de mon buffer...
Merci d'avance pour votre aide
Regarder la notice du BMS pour verifier l'existence eventuelle d'un protocole matériel ou logiciel permettant de contrôler le flux et donc suspendre l'émission
Bonjour,
J'ai la doc technique concernant la communication UART du BMS (que je ne peux pas divulguer désolé) mais elle sert "seulement" à traduire la trame que l'on reçoit, exemple: octet de start = 0x55 etc...
je me heurte au problème de saturation de mon buffer...
Tout dépend de quoi on parle : du buffer de l'UART ou de TON buffer.
Dans le premier cas il suffit de lire les caractères et de les ignorer jusqu'à rencontrer le START, ce que fait ton protocole.
Dans le deuxième cas il suffit de ne pas lire les caractères
Remarques :
Je ne vois aucune trace de millis() dans ton code.
Je ne vois vraiment pas l'intérêt de stocker START, longueur et CRC dans un buffer séparé.
Il n'y a aucun contrôle de la valeur du CRC.
J'ai la doc technique concernant la communication UART du BMS (que je ne peux pas divulguer désolé)
C'est plutôt nous qui sommes désolés pour toi, parce quand sans partage de doc sur ce forum l'aid n'est pas la même....
Si un contrôle de flux est disponible côté BMS alors la carte Arduino peut suspendre/relancer l'émission ce serait un façon d e régler le problème.
al1fch:
Si un contrôle de flux est disponible côté BMS alors la carte Arduino peut suspendre/relancer l'émission ce serait un façon d e régler le problème.
Comme je l'ai dit plus haut, il n'y en a pas. J'en ai déjà parlé avec le constructeur du BMS ^^.
Bon en faite je suis désolé, je pense que je vais reformuler mon problème car je me suis mal exprimé.
Le problème du buffer est un ancien problème (je n'ai pas reprit ce projet depuis plus d'une semaine car je bossais sur autre chose donc j'ai fais des erreurs sur le premier post).
Je voudrais juste effectuer deux fois (car le BMS m'envoie deux trame) ma boucle void loop() puis mettre l'arduino au dodo pendant un certain temps.
J'imagine qu'avec un simple for ça ne marche pas (j'imagine pas en faite, j'ai testé et ça n'a rien donné)
HBachetti quand vous dites arrêter de lire vous pouvez vous expliquer svp ?
(Merci de vos réponses hyper rapide à tous)