Bonjours tout le monde, merci de vous retrouver ici dans mon topic
Possédant déjà un Arduino Léonardo et Méga, Je cherche à réaliser un robot commander par radio
La Léonardo pour la partie TX et la méga sur le châssis pour la RX
Pour le faire marcher dans un certain parcours c'est pas notre sujet
je cherche a exploiter la partie EEPROM de la Mega afin qu'il puisse mémoriser le parcours et soit le refaire(en repartant par le point de départ) soit de faire demi tour revenir sur le même parcours que l'aller (en arrivant au point de depart).
Mais aucune idée de commencement :'(, sauf que je dois mémoriser la durée en ms (ou la distance) et la direction, mais comment je peux sauvegarder la direction et la distance parcourue alors que l'eeprom ne contient que des variable de type BIT.
La librairie EEPROM permet d'accéder à la mémoire en écriture/lecture. Elle manipule des octets.
Après charge à l'application de convertir les autres types en octets.
Le problème c'est plutôt la taille de la mémoire qui ne permet pas de stocker beaucoup d'informations. il faudrait peut être envisager d'utiliser un lecteur de carte SD ou alors l'adjonction d'une EEPROM série externe (de plus grosse capacité que celle intégré à l'ATmega) ce qui ouvrirait d'autres horizons à ton robot
Tu as 4kB (soit 4096 octets) d'EEPROM dans ta Mega, garde déjà cette donnée de côté.
Tu souhaites enregistrer la durée de déplacement dans une direction en ms, ok. Un octet te permet d'enregistrer une durée de 256ms, 10 bits: 1024ms, 12 bits: 4096ms, 14 bits: 16384ms, 16 bits (donc 2 octets): 65536ms.
Il faut que tu définisses quelle sera la durée max d'un déplacement dans une direction pour définir le nombre de bits que tu utiliseras pour enregistrer cette donnée.
J'utiliserais la fonction millis() pour définir la durée d'un déplacement déplacement:
le robot reçoit un ordre de déplacement
j'enregistre le nombre que renvoie millis() dans une variable x
le robot se déplace dans une seule direction pendant un petit moment
le robot ne reçoit plus d'ordre de déplacement
j'enregistre dans l'EEPROM le nombre que renvoie millis() - le nombre enregistré dans la variable x
Si les déplacements n'excèdent pas 16.384 secondes (14 bits), tu peux enregistrer tes déplacements sur 2048 octets environ et aller jusqu'à un parcours d'une durée de 9h ( (16.384 * 2048) / 3600 ) !
Les 2 bits restants pourrait servir à enregistrer la direction, si et seulement si le robot n'est capable de se déplacer que dans 4 directions.
On serait sur du codage sur 2 octets donc (par exemple):
00xxxxxxxxxxxxxx pour la direction 'haut' (les x correspondent aux 14 bits de la durée de déplacement, toujours si la durée n'excède pas 16.384s)
01xxxxxxxxxxxxxx pour 'bas'
10xxxxxxxxxxxxxx pour 'gauche'
11xxxxxxxxxxxxxx pour 'droite'
Pour faire le parcours en sens inverse, il faut savoir le nombre de déplacements enregistrés en EEPROM (donc le nombre de changements de direction).
Réservons 2 octets pour enregistrer ce nombre. A chaque changement de direction, on enregistre le numéro du double octet utilisé pour la direction-durée.
A la fin du parcours, on commence à lire le dernier double octet enregistré en inversant les directions.
Mais il faut que tu donnes plus d'infos, et que tu définisses déjà ton cahier des charges.
@fdufnews : Puisque je cherche le principe et le raisonnement, la mémoire ne m’intéresse pas pour le moment, je testerai le robot pour un petit parcours.
*Pour la conversion, alors je fait une écriture sur l'eeprom de la valeur que renvoi millis() et l'IDE qui convertit directement ?
Et pour la direction j'écris quoi dans l'eeprom ?
@schizophrene :
Votre réponse m'a énormément aider.. mais j'ai mal a interpréter l'algorithme en ligne de code, un coup de pousse s'il vous plait, surtout pour la direction, enfin même la durée
sur mon lieu actuel je n'en ai aucun, sauf le matériel je veux recommencer a zéro; mais je peux eclaircir les chose un peu plus,
J'utilise la Lib VirtualWire avec les modules 434Mhz TX et RX pour envoyer un Char depuis la Léo(tx), Puis le recevoir avec la méga(rx)
la lettre 'a' pour avancer
la lettre 'r' pour reculer
la lettre 'd' pour droite
la lettre 'g' pour gauche
j'utilise des servo a rotation continue comme motorisation, et un chassis en pléxi ainsi les connexion j'utilise hitchman en attendant d'un chassis bien fini
Pour l'instant sur la Léo j'ai connecter 4 boutons poussoirs pour les 4 directions et un pour l'arrêt total
et je veux rajouter 4 boutons pour "enregistrer le parcours", "arreter l'enregistrement", "rejouer le meme parcours", et enfin "rejour au sens inverse" .. et c'est pour cela que j'ai créer ce topic ici
je dois repenser a un code ou je dois toujours recevoir les données qui arrivent de la Léo(TX/Boutons dedirection) et a tout moment sans avoir a attendre la fin de l’opération actuelle.