Arrêté l’incrémentation/décrémentation d’un bouton sur écran tft

Bonjour a Tous
A ceux qui me répondront sachez que je débute, et qu’avant de vous poser mon problème j’ai parcouru divers blogs et tutos, sans trouver réponse a mes questions, soyer donc indulgent, merci.

Je viens de réalisé un montage avec une Arduino méga, un écran tft Nextion , une barrette de huit néopixels et un potentiomètre.
Le but du montage est que quand on tourne le potentiomètre les néopixels s’allume les une dernier les autres et arrivé a une certaine valeur change de couleur et s’allume toutes en même temps, un peu comme un shift light moto.
Jusque la pas de problème, le montage et le code qui va avec fonctionne.
Je veux y ajouter une option, deux boutons un + et un - a l’aide de l’écran Nextion, incrémenter et décrémenter l’intensité lumineuse des néopixels,
la aussi pas de problème j’arrive a incrémenter et décrémenter l’intensité lumineuse, mais… je n’arrive pas a arrêter l’incrémentation quand elle a atteint ses extème qui est comprise entre 0 et 255, je que cherche est que quant l’incrémentation a atteint ses extrêmes et que même si on continu d’appuyer sur le bouton + de l’écran, la variable arrête de s’incrémenter et inversement pour la décrémentation.

J’ai essayé plusieurs méthodes avec des tests conditionnels mais sans résultat, je dois passer à coté de quelque chose, si une bonne âme pourrait me mettre sur une piste, ça me ferais avancé, merci.

#include <Adafruit_NeoPixel.h>
#include <Nextion.h>
Adafruit_NeoPixel strip = Adafruit_NeoPixel(8, 6, NEO_GRB + NEO_KHZ800);
//----------------------------------------------------------------------
#define nextion Serial
//----------------------------------------------------------------------
Nextion myNextion(nextion, 9600);
//----------------------------------------------------------------------
unsigned char valLum = 0;
int rpm = 0;
int g = 0;
int r = 0;
int b = 0;
//----------------------------------------------------------------------
void setup()
{
  Serial.begin(9600);
  myNextion.init();
  strip.begin();
  strip.show();
  pinMode(A2, INPUT);
  valLum =120 ; //initialisazation a 120 
}
//----------------------------------------------------------------------
void loop()
{
  String message = myNextion.listen(); //check for message
  Serial.println(message);  
  
  {
   if (message == "65 2 1 1 ffff ffff ffff") // appuis sur bouton + tft
   {
     valLum=valLum+9;  
     Serial.print("valLum vaut");
     Serial.println(valLum);    
   }
       
   if (message == "65 2 2 0 ffff ffff ffff") // appuis sur bouton - tft
   {
     valLum=valLum-9;
     Serial.print("valLum vaut");
     Serial.println(valLum);
   }
  delay(200);// pour test




  rpm = (analogRead(A2));
  strip.setBrightness(valLum);

  r = 0;
  for (r; r < 0;)
  {
    (r = 0);
  }
  for (r; r > 255;)
  {
    (r = 255);
  }

  g = (0.35 * rpm) - 30;
  for (g; g < 0;)
  {
    (g = 0);
  }
  for (g; g > 170;)
  {
    (g = 170);
  }


  if (rpm > 120) 
  {strip.setPixelColor(0, r, g, 0);}
  else 
  {strip.setPixelColor(0, 0, 0, 0);}
  
  if (rpm > 240) 
  {strip.setPixelColor(1, r, g, 0);}
  else 
  {strip.setPixelColor(1, 0, 0, 0);}
  
  if (rpm > 360) 
  {strip.setPixelColor(2, r, g, 0);}
  else 
  {strip.setPixelColor(2, 0, 0, 0);}
  
  if (rpm > 480) 
  {strip.setPixelColor(3, r, g, 0);}
  else 
  {strip.setPixelColor(3, 0, 0, 0);}
  
  if (rpm > 600) 
  {strip.setPixelColor(4, 0, 255, 0);}
  else 
  {strip.setPixelColor(4, 0, 0, 0);}
  
  if (rpm > 720) 
  {strip.setPixelColor(5, 255, 255, 0);}
  else 
  {strip.setPixelColor(5, 0, 0, 0);}
  
  if (rpm > 840) 
  {strip.setPixelColor(6, 255, 255, 0);}
  else 
  {strip.setPixelColor(6, 0, 0, 0);}
  
  if (rpm > 970) 
  {strip.setPixelColor(7, 255, 0, 0);}
  else 
  {strip.setPixelColor(7, 0, 0, 0);}

  if (rpm > 1000) 
  {
    for (int i = 0; i < strip.numPixels(); i++) {
      strip.setPixelColor(i, 255, 0, 0);
    }
    strip.show();
    delay(50);
    
    for (int i = 0; i < strip.numPixels(); i++) {
      strip.setPixelColor(i, 0, 0, 0);
    }
    strip.show();
    delay(50);
  }
  strip.show();
 }
}
  r = 0;
  for (r; r < 0;)
  {
    (r = 0);
  }
  for (r; r > 255;)
  {
    (r = 255);
  }

  g = (0.35 * rpm) - 30;
  for (g; g < 0;)
  {
    (g = 0);
  }
  for (g; g > 170;)
  {
    (g = 170);
  }

c'est supposé faire quoi cela??

un peu de révision sur les boucles serait sans doute pas mal

c'est supposé faire quoi cela??

C'est supposé d'allumé les néopixels progressivement en fonction de la position du potentiomètre, et ça fonctionne, de la a ce que ça ne soit pas écrit d'une façon élégante c'est très possible, mais je n'en suis pas encore la, et qui plus es ce n'est pas l'intitulé du sujet.

Cordialement

dans la condition d'incrémentation avant de faire "valLum=valLum+9"
il faut tester valLum
si valLum<= (255-9)
alors valLum=valLum+9
si non si valLum< 255
alors valLum=255
fin si
fin si
même principe pour la décrémentation

RDDT:
C'est supposé d'allumé les néopixels progressivement en fonction de la position du potentiomètre, et ça fonctionne, de la a ce que ça ne soit pas écrit d'une façon élégante c'est très possible, mais je n'en suis pas encore la

euh... ben en fait ça fait juste r = 0; je ne sais pas si vous appelez ça "fonctionner"..

idem

  g = (0.35 * rpm) - 30;
  for (g; g < 0;)
  {
    (g = 0);
  }
  for (g; g > 170;)
  {
    (g = 170);
  }

j'ai l'impression que vous confondez la boucle for avec le test if...

c'est pas plutôt un truc comme ça que vous voulez faire?

  g = (0.35 * rpm) - 30;
  if (g < 0) g = 0;
  else if (g > 170) g = 170;

c'est pas le sujet, mais si vous mélangez les bases, ça va pas être facile de progresser

Re

@rjnc38

Merci pour votre explication, je m'en suis inspiré pas avec les mêmes valeurs mais j'obtiens le résultat désiré (voir code).

@J-M-L

j'ai l'impression que vous confondez la boucle for avec le test if...

Très certainement, je doit dire que c'est un peu confus dans mon esprit, je manque de pratique.

mais si vous mélangez les bases, ça va pas être facile de progresser

Je ne peux que vous donné raison, ca viendra peu a peu.

Cordialement

#include <Adafruit_NeoPixel.h>
#include <Nextion.h>
Adafruit_NeoPixel strip = Adafruit_NeoPixel(8, 6, NEO_GRB + NEO_KHZ800);
//----------------------------------------------------------------------
#define nextion Serial
//----------------------------------------------------------------------
Nextion myNextion(nextion, 9600);
//----------------------------------------------------------------------
unsigned char valLum = 0;
int rpm = 0;
int g = 0;
int r = 0;
int b = 0;
//----------------------------------------------------------------------
void setup()
{
  Serial.begin(9600);
  myNextion.init();
  strip.begin();
  strip.show();
  pinMode(A2, INPUT);
  valLum =60 ; //initialisazation a 60 
}
//----------------------------------------------------------------------
void loop()
{  
  String message = myNextion.listen(); //check for message
  Serial.println(message);  
 { 
   if (message == "65 2 1 1 ffff ffff ffff"&& valLum<255) // appuis sur bouton + tft
   { 
     valLum=valLum+15;      
   }
    
   if (message == "65 2 2 0 ffff ffff ffff" && valLum>1) // appuis sur bouton - tft
   {
     valLum=valLum-15;
   }
 } 
     Serial.print("valLum vaut");
     Serial.println(valLum);
     delay(200);// pour test



  rpm = (analogRead(A2));
  strip.setBrightness(valLum);

  g = (0.35 * rpm) - 30;
  if (g < 0) 
  g = 0;
  else if (g > 170) 
  g = 170;

  if (rpm > 120) 
  {strip.setPixelColor(0, r, g, 0);}
  else 
  {strip.setPixelColor(0, 0, 0, 0);}
  
  if (rpm > 240) 
  {strip.setPixelColor(1, r, g, 0);}
  else 
  {strip.setPixelColor(1, 0, 0, 0);}
  
  if (rpm > 360) 
  {strip.setPixelColor(2, r, g, 0);}
  else 
  {strip.setPixelColor(2, 0, 0, 0);}
  
  if (rpm > 480) 
  {strip.setPixelColor(3, r, g, 0);}
  else 
  {strip.setPixelColor(3, 0, 0, 0);}
  
  if (rpm > 600) 
  {strip.setPixelColor(4, 0, 255, 0);}
  else 
  {strip.setPixelColor(4, 0, 0, 0);}
  
  if (rpm > 720) 
  {strip.setPixelColor(5, 255, 255, 0);}
  else 
  {strip.setPixelColor(5, 0, 0, 0);}
  
  if (rpm > 840) 
  {strip.setPixelColor(6, 255, 255, 0);}
  else 
  {strip.setPixelColor(6, 0, 0, 0);}
  
  if (rpm > 970) 
  {strip.setPixelColor(7, 255, 0, 0);}
  else 
  {strip.setPixelColor(7, 0, 0, 0);}

  if (rpm > 1000) 
  {
    for (int i = 0; i < strip.numPixels(); i++) {
      strip.setPixelColor(i, 255, 0, 0);
    }
    strip.show();
    delay(50);
    
    for (int i = 0; i < strip.numPixels(); i++) 
    {
      strip.setPixelColor(i, 0, 0, 0);
    }
    strip.show();
    delay(50);
  }
  strip.show(); 
}