Je réalise un enrouleur de rideau commander par un moto réducteur.
Le but serait d'enregistrer deux hauteurs (positions) du rideau "haute et basse", pour qu'il s'arrête automatiquement. Une sorte de butée.
Sachant que le rideau peut se dérouler de 6m maximum, je pensait prendre l'info du nombre de tour par le pignon avec un capteur a effet hall.
L'arduino commande le moteur dans un sens puis dans l'autre grâce à des relais. Recevant une tension à chaque passage d'une dent, il stock cette valeur incrémenté jusqu'à atteindre la valeur enregistré puis coupe le moteur.
Comment enregistrer une position (valeur) via un bouton poussoir branché sur l'arduino ?
La valeur sera stockée dans la mémoire de l'Arduino, ça n'a rien a voir avec le bouton poussoir.
A quoi sert ton bouton ? A lancer et arrêter le moteur ?
Dans ce cas, ton code attend l'appui sur le bouton, puis lance le moteur, compte les impulsions données par le capteur et arrête le moteur lorsque le nombre d'impressions attendu est atteint.
C'est la mémorisation sur l'arduino ou la commande «enregistre cette position comme position préférée» (ou plus généralement l'interface homme-machine) qui te pose un problème ?
J'ai des volets commandés par un système à module commerciaux (yokis) qui ont une position préférée (typiquement entrouvert) qui s'utilise par un code de type :
2 clics sur le poussoir --> le volet se met en position préférée
5 clics sur le poussoir --> mémorisation de la position comme position préférée
6 (ou je sais plus combien) clics --> effacement de la mémorisation
x clics : mémorisation de l'heure d'ouverture
tout ça avec comme interface homme-machine un seul et unique bouton. Le retour du module pour signaler la réception de la commande est un bref aller-retour du volet.
Pour enregistrer des données à conserver au delà d'un redémarrage on utilise l'eprom du microcontrôleur ou on utilise une eeprom externe, si il n'en a pas.
Sur les ESP qui n'ont pas d'eeprom, il est utilisé la mémoire flash, je crois
Je crois oui, la nano est basé sur le ATmega168, si je ne me trompe pas ?
J'ai oublié de préciser, qu'il ne faut pas abuser de l'écriture qui est limitée.
Tu veux enregistrer uniquement le nombre de cran pour la position basse et haute ou à chaque passage de la dent?
Une solution est d'utiliser une bibliothèque comme OneButton.
Tu utilises tes boutons haut et bas en simple click pour les déplacement, quand le rideau est en position bas, un double click enregistre la position basse et la même opération pour la position haute.
A chaque double click sur un des 2 boutons, leur position est enregistrée en EEPROM.
Pour rendre l'enregistrement/lecture plus facile, il faut créer une structure contenant ces 2 valeurs, ainsi, pour sauver la structure, un EEPROM.put et pour lire ces 2 valeurs, EEPROM.get
Bonjour @terwal
Non, la nano ( 32 kB de mémoire ) est basée sur un ATmega328. Il en existe avec des ATmega168, mais celles-ci sont bien moins puissantes en terme de mémoire :
Mémoire flash : 16 KB (dont 2KB utilisés par le bootloader)
La bonne solution semble être celle proposée par @jpbbricole, avec un bouton pour arrêter.
Donc avec 3 boutons (up, down, stop) avec un simple clic, tu montes / descend ou arrêtes le volet. Sans appui sur le stop, il s'arrête seul à la position mémorisée auparavant avec un double clic.
Le fonctionnement pourrait être celui-ci :
Au début, rien n'est mémorisé. On suppose que le volet est en position basse. Un clic sur 'up', le volet monte, tu le stoppes avec le bouton 'stop'. Double clic sur 'stop' : il mémorise la butée haute (on peut même se passer du double clic ici, il peut mémoriser la position automatiquement). A partir de maintenant, chaque fois que tu cliques sur 'up' , il s'arrête seul à la position mémorisée, sauf si tu appuies sur 'stop' (et si tu double-cliques ensuite, il remplace la position mémorisée par celle ci)
Même chose pour descendre.
Il faut juste l'arrêter (en montée ou en descente) la toute première fois que tu t'en sers, lorsque les positions de butée ne sont pas mémorisées.
Pour résumer :
'up' : monter
'down' : descendre
'stop' : stopper, double clic pour mémoriser (il faut se souvenir si on montait ou si on descendait pour savoir si on mémorise la butée haute ou basse)
Je pensais à arrêter avec le bouton stop et double-clique sur le bouton monter si l'on est en haut ou double-clique avec le bouton bas si l'on est en bas, pour mémoriser la position.
Pendant un mouvement, la pression sur n'importe bouton arrête le store.