controle pompe electrique palier par palier en PWM

neodelavega:
bonjour bon j'ai reussi a reffaire marcher ma partie avec les solenoide apparemment quand on mais les BP sur 12 et 13 en pullup sa ne marche pas bref j'ai mis en 6 et 7 et j'ai donc mis mon afficheur 16seg sur 12 et 13 et la sa marche donc j'ai ressayer avec le code fusionner mais modifier mais mon potar ne repond pas est j'ai 1 ventilo qui reste bloquer a 20% et puis plus rien par contre la partie solenoide marche maintenant alors qu'avent non vous avez des idée ??

merci

Quelques remarques:

  1. les contraintes sur val1 et val2 devraient être appliquées APRES avoir modifié les valeurs et non pas pas avant car cela ne sert à rien
void loop() 
{

   if(digitalRead(12) == LOW)
 { 
   delay(5);
   val2++;
   val1--;                         //antie rebond
   while(digitalRead(12) == LOW);
   delay(5);
 } 
   else if(digitalRead(13) == LOW)
 {
   delay(5);
   val1++;
   val2--;                         //antie rebond
   while(digitalRead(13) == LOW);
   delay(5);
 }
 
  val1 = constrain(val1, 19, 25); // limite faible
  val2 = constrain(val2, 35, 41); // limite haute

 if (val1 == 19 && val2 == 41){
  digitalWrite (1, HIGH);
  myDisplay.scroll("R ", 10);}
  1. concernant la commande des discrets, j'ai pas très bien compris la logique mais il y a 5 discrets pour cette commande et après certains tests tu allumes un ou un autre et tu en éteints un ou un autre. Comme tu ne modifies pas à chaque fois les 5 discrets, tu risques de te retrouver assez vite avec des discrets dans un état non désiré. il faudrait faire un tableau des état attendus avec les conditions de commutation et bien vérifier (les empilements de "if" sont à la source de beaucoup d'erreurs)

  2. le pilotage de la pompe
    analogRead() retourne une valeur entre 0 et 1023 donc déjà le premier test est inutile la valeur ne pouvant pas être supérieure à 1023.
    Pour les valeurs > à 216 tu veux un PWM à 50 un IF et suffisant
    ensuite pour clarifier la chose je pense que tu devrais plutôt utiliser la fonction map pour créer une loi de pilotage de la pompe.
    Exemple (le code n'est pas vérifié)

  if (val > 216) {
    valPompe=50;
 } else {
   map(val,0,215,255,57);
}

Si tu veux une loi plus compliquée rien ne t'empêche de faire 2 (ou trois) map sur des segments différents.

  1. pour le pilotage du ventilo même remarque que pour la pompe.

  2. concernant les D0 et D1 si la liaison série n'est pas initialisée (pas de Serial.begin() dans le code) les broches sont libres avec quand même une restriction. Il ne faut pas être en conflit et l'outil de téléchargement (sonde, ou FT232 suivant la carte utilisée)