Go Down

Topic: Projet Pupitre Control Neoxipel (Read 192 times) previous topic - next topic

titogam3

Bonjour à tous,

j'ai un petit projet en tête, je souhaiterais me faire un petit pupitre composer de 5 boutons type Arcade + un bouton power ON/OFF qui me servira à alimenter le tout.

Le but du projet, est de pouvoir piloter des NeoPixels, donc pour ça pas de soucis j'ai trouver pas mal d'info, ce que j'aimerais c'est attribuer un mode sur chaque bouton.

Exemple: je met le pupitre en marche mes NeoPixel S'allume, et si j'appui sur le bouton 1 on change de couleur,
Si j'appui sur le bouton 2 ont passe à une autre couleur etc...

J'aimerais savoir si ce type de programme est complexe ?
Merci

lesept

#1
May 27, 2018, 03:31 pm Last Edit: May 27, 2018, 03:32 pm by lesept
Non, ce n'est pas complexe.
Dans la loop tu vas "lire" l'état des boutons et avec des if tu vas appeler des fonctions selon l'état de tes boutons. Lire l'état du bouton N ==> digitalRead(broche_du_bouton_numero_N)
Un bon tuto ici
A force d'essayer on finit par réussir... Donc, plus ça rate, plus on a de chances que ça marche (proverbe Sharduinok).

Leptro

Bonjour,
Je pense que c'est un projet très simple le plus compliqué s'il en est sera d'utiliser la librairie neopixel.

Autrement procéder comme ceci..

a l'initialisation --- écrire couleur 0 sur néo pixel.


Puis lire les boutons:

si bouton 1 appuyé écrire  couleur 1

si bouton2---- couleur 2.

Faire aussi une recherche sur machine à état.

Bonne bidouille..





titogam3

Merci à vous pour vos réponses,
Je regarder tout ça tranquillement,

Pour la librairie NeoPixel je devrais pouvoir me débrouiller j'ai réussi à faire un bout de programme qui fonctionne nickel mais sans bouton,

j'ai préparer mon pupitre je suis en train de tout câbler, je vous tien au courant pour la suite.
Merci encore.

titogam3

#4
Jun 02, 2018, 12:23 am Last Edit: Jun 02, 2018, 12:26 am by titogam3
Bon j'ai pu avancer un peu dans le projet, seulement je rencontre quelques soucis.
Je m'explique:

J'ai 3 boutons et un ring de 8 NeoPixels, actuellement j'utilise les 3 bouton pour différent mode,

bouton 1 mode 1: ont a un jeu de 8 couleurs différente qui défile, et ont reste allumé couleur Magenta.
bouton 2 mode 2: ont allume les NeoPixels en rouge.
bouton 3 mode 3: on eteint.

1er soucis que je rencontre, si j'appui sur le bouton 1 mes 8 couleurs défilent mais tant quelle ont pas toute défiler je peux pas passer au mode 2 ou même les éteindre, donc tant qu'on arrive pas à la fin c'est a dire qu'ont ces arrêter sur Magenta bin je peux rien faire,

Je sais pas si c'est très claire voici le code:

Code: [Select]
#include <Adafruit_NeoPixel.h>
#define PIN 6
#define nbLED 8
#ifdef __AVR__
#include<avr/power.h>
#endif

Adafruit_NeoPixel strip = Adafruit_NeoPixel(nbLED, PIN, NEO_GRB + NEO_KHZ800);

//Déclaration des Variables

int bouton1 = 2;
int bouton2 = 3;
int bouton3 = 4;
const int APPUI=0;
const int PAS_APPUI = 1;


//Initialisation du port série et des entrées sorties
void setup()
{
  pinMode(bouton1, INPUT);
  digitalWrite(bouton1, HIGH);
  pinMode(bouton2, INPUT);
  digitalWrite(bouton2, HIGH);
  pinMode(bouton3, INPUT);
  digitalWrite(bouton3, HIGH);
  strip.setBrightness(100);
  strip.begin();
  strip.show(); // Initialize all pixels to 'off'
  Serial.begin(9600);
}




//programme principal
void loop()
 {
    //lecture de l'état du bouton et stockage dans etatBouton
    boolean etatBouton1 = digitalRead(bouton1);
    boolean etatBouton2 = digitalRead(bouton2);
    boolean etatBouton3 = digitalRead(bouton3);



   //test des conditions
    if(etatBouton1==APPUI){
      colorWipe(strip.Color(250, 0, 0), 100); //rouge
      colorWipe(strip.Color(0, 250, 0), 100); //vert
      colorWipe(strip.Color(0, 0, 250), 100); //bleu
      colorWipe(strip.Color(0, 250, 250), 100); ///cyan
      colorWipe(strip.Color(250, 250, 0), 100); // jaune
      colorWipe(strip.Color(250, 0, 250), 100); //magenta
      strip.show();       
      delay(10);

    }
   
     
    if(etatBouton2==APPUI){
      colorWipe;
      colorWipe(strip.Color(250, 0, 0), 100); //rouge

    }
   if(etatBouton3==APPUI){
      colorWipe(strip.Color(0, 0, 0), 0); //Eteint
      strip.show();
      delay(10);
   
    }

    etatBouton1 = PAS_APPUI;
    etatBouton2 = PAS_APPUI;
    return;
   
 }

 
//FONCTION BOUTON 1
void colorWipe(uint32_t c, uint8_t wait) {
  for(uint16_t i=0; i<strip.numPixels(); i++) {
    strip.setPixelColor(i, c);
    strip.show();
    delay(wait);
  }
}





lesept

Tu a des delay dans ton code, ils bloquent le déroulement de ton programme. Il faut que tu etudies l'exemple blink without delay
Cherche le sur internet
A force d'essayer on finit par réussir... Donc, plus ça rate, plus on a de chances que ça marche (proverbe Sharduinok).

Go Up