Projet distributeur de croquettes IHM locale

Bonjour, ma question est simple et si vous pouvez m'aider j'en serai ravi,

dans le cadre d'une automatisation d'un distributeur de croquettes

Je dois creer un programme pour une interface homme machine sur un lcd 16x2 qui consiste à :

afficher le nom du chien, la quantité de croquettes restante dans la gamelle jusque la tout va bien,

pour la suite je dois creer un sous menu, lorsque j'appuie sur un bouton poussoir (pin2) j'entre dans le sous menu qui me permettra d'augmenter la quantité de croquetttes journaliere ou la diminuer grace a deux autres boutons

MON QUESTION EST : COMMENT ENTRER DANS LE SOUS MENU / et si vous avez le temps m'expliquer le fonctionnement d'un sous menu aussi simple que celui dont j'ai besoin

Merci d'avance votre aide pourrait me sauver la vie

Pas facile sans voir ton code...
Il existe des bibliothèques pour gérer des menus sur Arduino : CohesiveComputing, Menu, MD_menu...

Au passage, ton message n'est pas dans la bonne section : demande à un modérateur de le déplacer (bouton report to moderator) et va lire les messages d'introduction sur la forum français

merci j'ai signalé au moderateur ma bétise

Avant de poster le code, enlève les lignes vides qui ne servent à rien et fais CTRL T dans l’IDE Arduino pour qu’il soit bien indenté. Ensuite, utilise les balises CODE (le bouton </> du forum) pour y mettre ton code. Ce sera plus facile à lire.

Ce que tu veux faire n’est pas un menu, mais juste afficher des messages en fonction des appuis sur les boutons. C’est plus simple.

en effet j’ai pensé que c’était plus simple de rentrer dans un sous programme lorsque j’appuie sur le bouton “valider” puis de modifier Plim a l’aide de deux autre bouton “+” et “-” puis de retourner a l’écran en appuyant sur valider à nouveau
c’est pas plus compliqué que ca mais je suis trop mauvais pour le faire désolé de vous soliciter autant,
si vous pouviez m’apprendre ou au moins me renseigner sur une piste éventuelle pour mener à bien mon projet

Encore un sujet bac qui n'a pas l’honnêteté de s’annoncer.
Le distributeur de croquette revient tous les ans, pas de chance.

Lenka12:
si vous avez le temps m’expliquer le fonctionnement d’un sous menu aussi simple que celui dont j’ai besoin

Pas de soucis, voici l’explication :

Menu → titre du menu

Sous-menu → titre du sous-menu


Retrait ou “puce” pour montrer que c’est un sous-menu

Plus terre à terre, édite ton poste et remet ton code en forme comme demandé précédemment et mets le entre les balises comme indiqué dans les premiers message en tête de forum.

De plus on est assez allergique pour les sujets “bac” qui plus est lorsqu’on essaye de nous les cacher.

c’est ma première fois sur un forum, si j’avais chercher à cacher le fait que ce soit un sujet de bac je l’aurai mieux fait sans parler d’elève ou de “projet”, j’ai tout simplement pensé que ce n’était pas pertinent de le préciser n’est-ce pas ?

bien que j’ai essayé de me debrouiller jusque la en perseverant seul, je suis bloqué, n’y voyez rien d’irrespectueux si je m’en remet àvous pour m’aider…

des conseils seraient les bienvenus, si encore une fois, vous avez du temps à m’accorder

ps: j’ai supprimé les lignes inutiles

#include <Wire.h>    
#include <math.h>
#include <rgb_lcd.h>

int pinBoutonV; 
int pinBouton3;
int pinBouton4;
int Plim = 650;
int etat2;
int etat3;
int Preste = 78; 

rgb_lcd lcd;
void setup()
{
  pinMode(2, INPUT);
  pinMode(3, INPUT);
  pinMode(4, INPUT);
  pinBoutonV = 2;
  pinBouton3 = 3;
  pinBouton4 = 4;
  Serial.begin(9600);
}

void loop()
{ lcd.begin(16, 2);

  etat2 = digitalRead(2);
  etat3 = digitalRead(3);
    
    lcd.print("ELIOS");
    lcd.setCursor(0,1);
    lcd.print(Preste);
    lcd.print("g");


if (etat2 == 1)
{
  lcd.clear();
  lcd.print("Dose par jour");
  lcd.setCursor(0,1); 
  lcd.print(Plim);
  lcd.setCursor(5,1);
  lcd.print("g");
}
 
}

Lenka12:
j'ai tout simplement pensé que ce n'était pas pertinent de le préciser n'est-ce pas ?

Justement ça l'aurait été....

j'étais dans une optique ou je vous derangeais dans votre temps libre donc j'ai fais au plus court pour pas vous accaparer trop longtemps
excusez moi , je comprends tout à fait que l'affluence d'élèves de terminale qui viennent "pleurer" ou meme demander à ce qu'on leur fasse leur projet vous démotive à m'aider

Ton problème n'est pas de faire un menu mais de traiter des appuis sur des boutons. Je vois que tu as 3 boutons :

  • Validation
  • Bouton 2
  • Bouton 3
    Pour faire ton code, il faut d'abord que tu décrives clairement ce qui doit se passer à chaque fois qu'un bouton est appuyé. Faire une sorte d'organigramme de ton besoin

Exemple :

  • Etat normal : affichage nom du chien, quantité de croquettes à distribuer
  • Appui B2 : Augmenter la quantité de croquettes de 5, attendre validation ou appui bouton 2 ou 3
  • Appui B3 : Diminuer la quantité de croquettes de 5, attendre validation ou appui bouton 2 ou 3
  • Appui V : Valider le nombre de croquettes choisi et donner les croquettes, puis revenir à l'état normal
    Est-ce bien ce que tu veux faire ? Sinon corrige.

Ensuite, tu vas écrire ta loop comme une lecture des 3 boutons en continu. A chaque appui détecté, tu dois savoir dans quel état tu es pour lancer l'action nécessaire. Je te suggère de coder ces actions comme autant de fonctions, comme par exemple :

void AugmenterCroquettes ()
{
NbCroquettes +=5;
}

Des fonctions toutes simples que tu appelles lorsque tu en as besoin.

Comme ça ton code sera facile à lire et à débuguer.

A toi de jouer !

Tu as pas beaucoup de temps pour changer le titre de ton sujet… après >>> poubelle

je ne sais pas comment changer le titre, mais je le fais volontier si tu m’indique comment faire…

Merci iesept, je vais faire comme ceci, juste une question comment j’indique que je veux entrer dans le void augmenter croquettes() , je met mon if (digitalRead(2) == 1) et c’est tout ?

En bas à droite :

More

Modify

Et tu peux corriger le titre du message.... à faire sur le premier message pour que le titre du sujet change.

Lenka12:
Comment j'indique que je veux entrer dans le void augmenter croquettes() , je met mon if (digitalRead(2) == 1) et c'est tout ?

pour appeler une fonction, il suffit... de l'appeler par son nom :

if (digitlRead(2) == 1 AugmenterCroquettes();

Lis de la doc sur le if et sur la programmation en général

Nickel merci à tous bonne soirée !

Bonsoir
Attention aux boutons et leurs rebonds. Fais une petite recherche, ça te servira.

Il existe une bibliothèque pour ça.
C’est celle de Bricoleau

Fais un bouton à la fois.