Projet Robot suiveur de ligne ET lecteur RFID

Bonjour,

Je suis sur un projet pour faire un robot qui a pour objectif de suivre une ligne noire ET de lire des tags RFID qui se trouvent sur cette ligne noire tout les 1m.

Pour faire simple, aujourd'hui je suis en possession d'un code qui permet au robot de suivre la ligne noire ( marche très bien ) et d'un code qui permet de lire les tags RFID ( marche également bien ). Cependant, je n'arrive pas a faire un unique programme qui permette à mon robot de faire les 2 en meme temps.

Si vous avez des idées pour régler mon problème je serais très reconnaissant :

Bonne journée,

Salut, en temps normal si on veut exécuter deux fonctions en même temps, les processeurs des ordinateurs standards sont équipés de plusieurs cœurs (6 pour ma part) ce qui signifie que chaque fonction ce fera exécuter en même temps sur un cœur et un autre. Cela s'appelle le Multithreading(Multi Processus), le problème avec l'Arduino (pour SIMPLIFIER) c'est qu'elle ne possède qu'un cœur donc le code que tu tape s'exécute de façon linéaire (si tu met une pose de 1 seconde dans une fonction c'est tout ton programme qui devra attendre que la fonction finisse sa pause d'1 seconde). Pour y remédier on va paralléliser le programme, en gros imaginons deux fonctions : une fait clignoter un LED toutes les secondes et l'autre toutes les 0.5 secondes. Si on exécute le code tel quel les LED vont en réalité clignoter toutes les 1.5 secondes. Mais si on sépare ce deux actions en fonction par exemple BlinkLedOne et BlinkLedTwo et que l'on dit à l'Arduino exécute BlinkLedOne, met en pause BlinkLedOne, exécute BlinkLedTwo, met en pause BlinkLedTwo, reviens sur BlinkLedOne, met en pause BlinkLedOne, reviens sur BlinkLedTwo, met en pause BlinkLedTwo, reviens sur BlinkLedOne, etc... et que l'on fait ça très rapidement alors les LED vont correctement clignoté enfin de moins à nos yeux en réalité il y'aura quelque ms ou µs de décalages du fait que les deux fonctions ne s'exécute pas tout à fait en même temps. Si tu as compris ce principe tu peux jeter un coup d’œil à la librairie "ProtoThread" ou (ma préféré) "Arduino Thread".
Bon courage ^^
Les liens:
ProtoThread ==> Arduino Project Hub
ArduinoThread => GitHub - ivanseidel/ArduinoThread: ⏳ A simple way to run Threads on Arduino

La solution des threads est une bonne solution mais c'est celle qui ne te permettra pas d'apprendre à programmer sur microcontrôleur . Une autre solution, avec le même inconvenient, serait d'utiliser un ESP32 qui a deux coeurs et peut faire du vrai parallélisme.

Pour apprendre et donc comprendre le microcontrôleur, il vaut mieux te lancer dans l'écriture d'un code qui joigne tes deux codes en veillant à ne pas bloquer l'une ou l'autre des fonctions. C'est plus compliqué mais c'est instructif...

Le forum sera là pour t'aider ou répondre à tes questions

Sur un microcontrôleur du type ARDUINO, si le robot n'est pas très rapide, il est possible de partager le temps entre lecture RFID et suivi de la ligne blanche, une fois l'un, une fois l'autre. Il n'est pas dit que le temps soit partagé à 50% / 50%.

Ensuite tout dépend du mode de fonctionnement et de la capacité à répondre rapidement du lecteur RFID et du capteur utilisé pour le suivi de ligne.

Salut, en temps normal si on veut exécuter deux fonctions en même temps, les processeurs des ordinateurs standards sont équipés de plusieurs cœurs (6 pour ma part) ce qui signifie que chaque fonction ce fera exécuter en même temps sur un cœur et un autre. Cela s'appelle le Multithreading(Multi Processus), le problème avec l'Arduino (pour SIMPLIFIER) c'est qu'elle ne possède qu'un cœur donc le code que tu tape s'exécute de façon linéaire

Pas d'accord du tout.
J'ai déjà développé un bon nombre d'applications sur divers processeurs mono-cœur en multithreading, dont 386, ARM7tdmi, STM32, etc.
Soit on dispose d'un OS multithread ou multiprocess (LINUX), soit sur les plateformes légères on utilise un noyau temps réel (FreeRTOS sur STM32 par exemple).

@+