Projet Arduino : changer d'état via bouton poussoir

Bonjour à tous,

Dans un premier temps j'espère que vous avez passé de bonnes fêtes.

Alors voilà mon projet est de créer un code Arduino d'un mélangeur de peinture rotatif.

Pour se faire j'utilise un moteur cc, et j'ai la chose suivante à faire :

  • Etat 0 ( allumage de la machine) : diode rouge allumée.

  • Etat 1 (déclenché par un bouton poussoir n°1) : diode verte allumée.

-Etat 2 (déclenché par un bouton poussoir n°2) : diode verte allumée+ une diode bleu allumée + moteur cc allumé en vitesse 1

  • Etat 3 (déclenché par un bouton poussoir n°3): diode verte allumée + deux diode bleu allumée + moteur cc allumé en vitesse 2

Le problème étant que mon niveau de codage est très limité, j'ai commencé par regarder comment allumé une diode via un bouton poussoir mais je ne comprend pas comment on fait pour changer d'état (et donc de vitesse) et si il faut tout écrire dans le void loop() ou si il faut créer plusieurs void loop().

Un énorme merci pour le temps que vous accorderez à m'aider,

Beerstien :slight_smile:

Bonjour,
Pour améliorer ton niveau de codage
https://eskimon.fr/
Il y a aussi les programmes d'exemple qui sont installés avec l'IDE Arduino.

Lorsque tu seras plus à l'aise il y a sur le forum français des tutos qui pourraient t'intéresser dont celui-là

je te dirais bien d'utiliser une biblio "button", mais vu la centaine qui existent avec le meme nom "button.h"...avec ou sans anti-rebonds

/*

 @version 1.1
 @author Alexander Brevig
 @contact alexanderbrevig@gmail.com

 Display the intuitive way of using a button when using this Hardware Abstraction class

@license
 Copyright (c) 2009 Alexander Brevig. All rights reserved.
 This code is subject to AlphaLicence.txt
 alphabeta.alexanderbrevig.com/AlphaLicense.txt

pas de debounce software il faut ajouter des delay

*/

#include "Button.h"  // fichiers h et cpp dans le dossier du croquis 

create a Button object at pin X 
/*
 Wiring:
         GND -----pushbutton ------ pin arduino
*/

// declaration des boutons en input pull up interne
Button button1 = Button(7,PULLUP); // bp1 pin 7
Button button2 = Button(8,PULLUP);  // bp2 pin 8
Button button3 = Button(9,PULLUP);  // bp3 pin 9
Button breset = Button(10,PULLUP);  // bouton de reset soft sur pin 10

// 4 Led
int LedR = 2; // rouge sur pin 2
int LedV = 3; // verte sur pin 3
int LedB1 = 4; // bleu no 1 sur pin 4
int LedB2 = 5;  // bleu no 2 sur pin 5

#define moteurCC 13  // sortie moteur

// software reset function
void(* resetFunc) (void) = 0; //declare reset function @ address 0

void setup(){

Serial.begin(9600);

  pinMode(LedR,OUTPUT); // sorties leds
  pinMode(LedV,OUTPUT); //
  pinMode(LedB1,OUTPUT); //
  pinMode(LedB2,OUTPUT); //

  // pas de pinMode sur boutons la biblio le fait
digitalWrite(LedR,HIGH);  // led rouge allumée
digitalWrite(LedV,LOW);  // eteinte
digitalWrite(LedB1,LOW);
digitalWrite(LedB2,LOW);
  Serial.println ("allume led rouge et moteur a l'arret");
  delay(200);
}

void loop(){
  if(button1.isPressed()){
  digitalWrite(LedV,HIGH);  // allume verte
 digitalWrite(LedR,LOW);  // eteint led rouge 
   digitalWrite(LedB1,LOW);  // bleue no1 eteinte
  digitalWrite(LedB2,LOW);  // bleue no2 eteinte
Serial.println ("allume led verte et moteur a l'arret");
 delay(200);

 // code moteur ARRET
 
  }   // end of button 1

  
  if(button2.isPressed())
  {
  digitalWrite(LedV,HIGH);  //allume led verte
  digitalWrite(LedR,LOW);  // eteint led rouge
  digitalWrite(LedB1,HIGH);  // bleue no1 allume
  digitalWrite(LedB2,LOW);  // bleue no2 eteinte
  Serial.println ("allume led verte+ bleue 1 et moteur V1");
    delay(200);
// code /fonction concernant moteur V1
// 

 
  }  // end of button 2

   if(button3.isPressed())
  {
   digitalWrite(LedV,HIGH);  //allume led verte
  digitalWrite(LedR,LOW);  // eteint led rouge
  digitalWrite(LedB1,HIGH);  // bleue no1 allume
  digitalWrite(LedB2,HIGH);  // bleue no2 allume
  Serial.println ("allume led verte + 2 bleues et moteur V2");

  delay(200);

  
  // code /fonction concernant moteur V2  
// 

  }// end of button 3

  if(breset.isPressed())
  {
     resetFunc();  //call reset
     //  100x plus rapide que appui bouton reset de l'uno
  }
}// end of loop

code tres basique, des tas de simplifications possibles : tableaux, structures,...
en piece jointe le zip complet avec fichiers h et cpp de la biblio utilisée, il suffit de dézipper, aller dans le dossier et cliquer sur l'ino, ne pas déplacer les fichiers dans un dossier library etc...
tu n'expliques pas si on doit passer par les 3 etapes dans l'ordre : ici on appuie sur n'importe quel bouton, avec une latence de 200ms, le bouton reset fait double emploi avec le bouton1, excepté pour la led rouge
boutonswitc.zip (3.6 KB)

Bonjour elektrax

???
Pourquoi ne pas passer par "la voie officielle" via Outils/Gérer les bibliothèques, rechercher button
image
et installer


Le détail est ici.
Après l'installation il ne reste plus qu'à faire l'exemple pour comprendre le "mécanique" des boutons.

Cordialement
jpbbricole

Bonjour,

Quelques petites questions pour compléter ton cahier des charges

  • comment est ce qu'on revient à l'état 0?
  • a quoi sert l'état 1?
  • est ce que les états doivent être déclenchés dans l'ordre? C'est à dire par exemple est ce qu'on peut passer de l'état 0 à l'état 3 ou faut-il passer par les états 1 puis 2

@ jpbricole,
oui bien sur, la biblio de Michael Adams (2016) est un fork de celle de Brevig (2009), noms fonctions différentes
manque aussi de détails de la part du demandeur : comment est commandé arret/vitesse1 et vitesse2 du moteur

@kamill : etat 0 : reset, comme j'ai écrit je ne vois pas de différence entre etat1 (arret moteur) et état 0,
A+

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.