mémoriser une valeur PWM en cours de progression

Nouveau projet faisant suite à l’application très concluante du code concernant la télécommande.
Ici, je cherche comment mémoriser et figer en conséquence le PWM en pin 6, lorsque j’interromps sa progression.
Le code suivant, me permet de démarrer led éteinte et arriver à allumage complet en un certain temps.
Je ne peux pas arrêter l’évolution, pas plus dans le sens inverse. c’est ou une progression totale ou diminution totale.
2 touches distinctes de la tlc gèrent le PWM. La led en pin 6 suit parfaitement à la demande.
1 touche est allouée à l’arrêt du PWM à l’instant T, au bon vouloir.

je suppose devoir mémoriser la valeur à l’instant T, devoir stopper la progression, et dupliquer la valeur mémorisée en sortie.

#include <IRremote.h>
 int IR = 11;                               // Récepteur IR en broche 11
                                                                          
 int i = 0;                                 // variable pour effectuer la variation
 const byte IR_RECEIVE_PIN = 11;
 int PWM = 6;                               // Déclaration Pin 6 sortie PWM 
 void setup(){
 IrReceiver.begin(IR_RECEIVE_PIN);
 pinMode(PWM,OUTPUT);
}
 void loop() {
 if (IrReceiver.decode()) { 

   if (IrReceiver.decodedIRData.decodedRawData == 0xE718FF00) {
       for (i = 0; i <= 255; i++){            
            analogWrite(PWM,i);              // touche tlc bleue 1 (V) inversée déclenche PWM+
            delay(50);  }}
                
    if (IrReceiver.decodedIRData.decodedRawData == 0xAD52FF00){
       for (i = 0; i <= 255; i++){
            analogWrite(PWM, 255 - i);     // touche tlc bleue (V)non inversée déclenche PWM -
            delay(50);  }}

    if (IrReceiver.decodedIRData.decodedRawData == 0xE31CFF00){          }  
    //  Touche prévue pour stopper la progression ou l'inverse.       

            IrReceiver.resume();
                   
           }}

Il faut écrire ton programme autrement, autour du fait que tu veux modifier le PWM (+1 ou -1) ou le garder constant.
Tu crées une variable globale que tu mets soit à -1, soit à +1 soit à 0 selon la touche qui est reçue. Et tu ajoutes cette valeur à ta variable d’intensité du PWM

Un truc comme ça :

#include <IRremote.h>
const byte IR_RECEIVE_PIN = 11;
int PWM = 6;                               // Déclaration Pin 6 sortie PWM
int variation = 0;
int intensite = 0;


void setup() {
  IrReceiver.begin(IR_RECEIVE_PIN);
  pinMode(PWM, OUTPUT);
}


void loop() {
  if (IrReceiver.decode()) {


    if (IrReceiver.decodedIRData.decodedRawData == 0xE718FF00) variation = 1;
    if (IrReceiver.decodedIRData.decodedRawData == 0xAD52FF00)variation = -1;
    if (IrReceiver.decodedIRData.decodedRawData == 0xE31CFF00) variation = 0;


    IrReceiver.resume();
    intensite += variation;
    constrain (intensite, 0, 255);
    analogWrite(PWM, intensite);     // touche tlc bleue (V)non inversée déclenche PWM -
    delay(50);
  }
}

Merci lesept - Tu as même dépassé de loin mes espérances.
Avec ton code, je peux donner une valeur de départ différente de 0 ou 255 au démarrage, ce qui peut être fort intéressant.
ça fonctionne à merveille, un grand merci.

Impec !

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