Bonjour à tous,
Donc voila mon petit projet avance tout doucement, Le but est assez simple ont contrôle 2 x 8 neopixel (ring) à l’aide de 3 boutons et 1 capteur ultrason.
3 Boutons pour 3 mode différent:
-Bouton 1 Mode 1 on active le mode chenillard 6 couleur défilent.
-Bouton 2 Mode 2 on affiche une seul couleur fixe.
-Bouton 3 Mode 3 on éteint.
-Capteur Ultrason (HC-SR04) affiche une couleur quand il détecte ma main à moins de 7cm.
-Afficheurs qui affiche dans quel mode on est.
Voici mon soucis, après plusieurs tentative sans succès je viens demander un peu d’aide,
Actuellement lorsque j’appuie sur le bouton 2 on allume les neopixel ici en l’occurance en jaune, ce que je voudrais c’est qu’à chaque appuie sur le bouton 2 ont change de couleur, facile à dire mes je n’ai pas réussi.
Merci d’avance
#include <Adafruit_NeoPixel.h>
#define PIN 6
#define nbLED 8
#ifdef __AVR__
#include<avr/power.h>
#endif
#include <LiquidCrystal.h> // on importe la bibliothèque
LiquidCrystal monEcran(12,11,5,4,3,2); // on crée l'objet écran
Adafruit_NeoPixel strip = Adafruit_NeoPixel(nbLED, PIN, NEO_GRB + NEO_KHZ800);
#define trigPin 10 //Trig
#define echoPin 13 //Echo
//Déclaration des Variables
// 1 = bouton 1
// 2 = bouton 2
// 3 = bouton 3
int idBouton = 3; // on stock dans idBouton l'identifiant du dernier bouton qui a été appuyé
// -1 eteint
// 0 rouge
// 1 vert
// 2 bleu
// 3 cyan
// 4 jaune
// 5 magenta
int idCouleurCourante = -1; // on stock dans idCouleurCourante l'identifiant de la couleur qu'il faut afficher
int bouton1 = 7;
int bouton2 = 8;
int bouton3 = 9;
const int APPUI=0;
const int PAS_APPUI = 1;
//Variable Capteur Ultrason:
char pinTrig = 13;
char pinEcho = 10;
float distance;
//Initialisation du port série et des entrées sorties
void setup()
{
//Capteur Ultrason:
pinMode(pinTrig, OUTPUT);
pinMode(pinEcho, INPUT);
digitalWrite(pinTrig, HIGH);
//Bouton:
pinMode(bouton1, INPUT);
digitalWrite(bouton1, HIGH);
pinMode(bouton2, INPUT);
digitalWrite(bouton2, HIGH);
pinMode(bouton3, INPUT);
digitalWrite(bouton3, HIGH);
//NEOPIXEL:
strip.setBrightness(100);
strip.begin();
strip.show(); // Initialize all pixels to 'off'
Serial.begin(9600);
}
//programme principal
void loop()
{
menuPrinc();
capteur();
majIdBouton();
majIdCouleur();
uint32_t color = getCouleurCourante();
colorWipe(color, 100);
strip.show(); // je ne suis pas sur que cette ligne soit nécessaire
}
void majIdBouton()
{
//lecture de l'état du bouton et stockage dans etatBouton
boolean etatBouton1 = digitalRead(bouton1);
boolean etatBouton2 = digitalRead(bouton2);
boolean etatBouton3 = digitalRead(bouton3);
if(etatBouton1 == APPUI){
idBouton = 1;
}
else if(etatBouton2 == APPUI){
idBouton = 2;
}
else if(etatBouton3 == APPUI){
idBouton = 3;
screenAccueil();
}
}
void majIdCouleur()
{
if(idBouton == 1){ // si le dernier bouton appuyé est le 1 on poursuit la farandole
idCouleurCourante = (idCouleurCourante + 1) % 6;
chenillard();
}
else if(idBouton == 2){ // si le dernier bouton appuyé est le 2 on affiche jaune
idCouleurCourante = 4;
mode2();
}
else if(idBouton == 3){ // si le dernier bouton appuyé est le 3 on eteint
idCouleurCourante = -1;
}
else if(idBouton == 7){ // si le dernier bouton appuyé est le 3 on eteint
idCouleurCourante = 7;
}
}
uint32_t getCouleurCourante()
{
if(idCouleurCourante == 0)
{
return strip.Color(250, 0, 0);
}
else if (idCouleurCourante == 1)
{
return strip.Color(0, 250, 0);
}
else if (idCouleurCourante == 2)
{
return strip.Color(0, 0, 250);
}
else if (idCouleurCourante == 3)
{
return strip.Color(0, 250, 250);
}
else if (idCouleurCourante == 4)
{
return strip.Color(250, 250, 0);
}
else if (idCouleurCourante == 5)
{
return strip.Color(250, 0, 250);
}
else if (idCouleurCourante == 7)
{
return strip.Color(250, 0, 250);
}
else if (idCouleurCourante == 8)
{
return strip.Color(0, 100, 250);
}
else if (idCouleurCourante == -1)
{
return strip.Color(0, 0, 0);
}
}
//FONCTION BOUTON 1
void colorWipe(uint32_t c, uint8_t wait) {
for(uint16_t i=0; i<nbLED; i++) {
strip.setPixelColor(i, c);
strip.show();
delay(wait);
}
}
//Affichage lors de l'arrêt des NEOPIXEL
void screenAccueil(){
//Gestion Ecran
monEcran.begin(16,2); //on initialise la communication avec 16 colonnes et deux lignes
monEcran.clear(); // on efface l'écran
monEcran.setCursor(4,1); //on passe à la ligne suivante
monEcran.print("Bye Bye"); // on écrit Bonjour
delay(5000);
}
//Affichage Couleur Mode Bouton 2
void mode2(){
monEcran.begin(16,2); //on initialise la communication avec 16 colonnes et deux lignes
monEcran.clear(); // on efface l'écran
monEcran.print("Mode Couleur"); // on écrit Bonjour
monEcran.setCursor(0,1); //on passe à la ligne suivante
monEcran.print("Jaune"); // on écrit Bonjour
}
//Affichage Principale & après l'arrêt des Led
void menuPrinc(){
//Gestion Ecran
monEcran.begin(16,2); //on initialise la communication avec 16 colonnes et deux lignes
monEcran.clear(); // on efface l'écran
monEcran.print("Hello,"); // on écrit Bonjour
monEcran.setCursor(2,1); //on passe à la ligne suivante
monEcran.print("TitoGam3"); // on finit d'écrire
}
//Mode Bouton 1 Chenillard
void chenillard(){
monEcran.begin(16,2); //on initialise la communication avec 16 colonnes et deux lignes
monEcran.clear(); // on efface l'écran
monEcran.print("Mode 1"); // on écrit Bonjour
monEcran.setCursor(0,1); //on passe à la ligne suivante
monEcran.print("chenille"); // on finit d'écrire
}
void capteur()
{
digitalWrite(pinTrig, LOW);
delayMicroseconds(10);
digitalWrite(pinTrig, HIGH);
delayMicroseconds(10);
digitalWrite(pinTrig, LOW);
// Mesure de l'impulsion
distance = pulseIn(pinEcho, HIGH) /58.0;
//Si inférieur à 7cm::
if(distance < 7){
idBouton = 7;
// Affiche La Valeur
monEcran.clear();
monEcran.setCursor(0,0);
monEcran.print("Distance: ");
monEcran.setCursor(0,1);
monEcran.print(distance);
monEcran.println(" cm");
delay(200);
}
}