Go Down

Topic: problème recepteur IR et sortie PWM (Read 2 times) previous topic - next topic

bryce_30

Bonjour à tous,
j'ai découvert l'arduino il y a peu et je suis en train de tester un peu ses 'nombreuses' fonctionnalités !
je commande un rampe de LED via une sortie PWM de l'arduino en passant par un mosfet pour réguler ma luminosité.
jusque là aucun soucis, ça fonctionne nickel.
j'ai également tester un recepteur infra rouge pour commander une led, ça fonctionne aussi !
mon problème arrive lorsque j'essai de combiner les deux...
je fais varier la luminosité de ma rampe de LED, et je voudrais que lorsque j'appuie sur le bouton + ou - ça aille plus ou moins vite !
sauf que du coup ça ne varie plus du tout...  =( mes variables vont toujours dans le bon sens, mais la luminosité ne bouge plus :/

voici mon code :
Code: [Select]

#include <IRremote.h>

#define RECV_PIN 3
#define TEMOIN_PIN 8
#define RAMPE_PIN 11

#define PLUS_CODE 0xFF906F // +
#define MOINS_CODE 0xFFA857 // -

int brightness = 0;    // how bright the LED is
int fadeAmount = 1;    // how many points to fade the LED by


IRrecv irrecv(RECV_PIN);
decode_results results;

boolean led = true;


// the setup routine runs once when you press reset:
void setup()  {
  // declare pin 8 & 11 to be an output:
  pinMode(RAMPE_PIN, OUTPUT);
  pinMode(TEMOIN_PIN, OUTPUT);
 
  Serial.begin(9600);
  Serial.println("Reboot...");
 
  irrecv.enableIRIn(); // Start receiver
}


//R
void GetIRKey() {
  Serial.println("je rentre dans mon GetIRKey...");
  decode_results results;
  if (irrecv.decode(&results)) {
    Serial.print("Reçu:");
    Serial.println(results.value);

    switch (results.value) {
    case PLUS_CODE :
      Serial.println("+");
      led=true;
      if (fadeAmount > 1) {
        fadeAmount = fadeAmount + 1;
      }
      else if (fadeAmount < -1) {
        fadeAmount = fadeAmount - 1;
      }
     
      break;
    case MOINS_CODE :
      Serial.println("-");
      led=false;
      if (fadeAmount > 1) {
        fadeAmount = fadeAmount - 1;
      }
      else if (fadeAmount < -1) {
        fadeAmount = fadeAmount + 1;
      }
      break;
    default :
      Serial.print("unexpected value: ");
      Serial.println(results.value, HEX);
      break;
    }

    // Tempo pour eviter la repetition d'une commande non voulu
    //delay(200);
    irrecv.resume();  // reprise de la reception IR, necessaire

  }
}

// the loop routine runs over and over again forever:
void loop()  {
  digitalWrite(TEMOIN_PIN, led);

  GetIRKey();
 
  // set the brightness of pin 11:
  analogWrite(RAMPE_PIN, brightness);   
  // change the brightness for next time through the loop:
  brightness = brightness + fadeAmount;

  // reverse the direction of the fading at the ends of the fade:
  if (brightness == 0 || brightness == 255) {
    fadeAmount = -fadeAmount ;
  }     
  // wait for 30 milliseconds to see the dimming effect   
  delay(10);   

  Serial.print(fadeAmount);
  Serial.print("\t");
  Serial.print(brightness);
  Serial.println();
}



là ou je ne comprends pas c'est que si je vire la ligne "irrecv.enableIRIn(); // Start receiver" dans mon setup la luminosité varie... je la remet, ben plus rien !!!  :smiley-eek-blue:
donc je dois avoir un problème avec mon code IR mais je ne comprend pas pourquoi...

barbudor

Le problème se situe entre

Code: [Select]
int fadeAmount = 1;    // how many points to fade the LED by

et

Code: [Select]
      if (fadeAmount > 1) {
        fadeAmount = fadeAmount + 1;
      }
      else if (fadeAmount < -1) {
        fadeAmount = fadeAmount - 1;
      }



Relis calmement et essaye de simuler  la main
Barbuduino: Arduino sur Breadboard & VinciDuino: Clone Leonardo // WR703: Mini-routeur hacké // LauchPad MSP430 et Stellaris // Panda II Arduino-like .NetMF sous VisualC#
RTFC: Read That F.....g Code / RTFD: Read That F.....g Doc / RTFDS: Read That F.....g DataSheet / RTFS: Read That F.....g Schematic / Wot da ya wanna D.I.Y. today ?

bryce_30

#2
Nov 06, 2012, 05:35 pm Last Edit: Nov 06, 2012, 06:47 pm by bryce_30 Reason: 1
alors effectivement je viens de me rendre compte que j'avais un ligne en double
Quote
decode_results results;

mais j'ai beau la virer ça ne change rien...
ce qui est bizarre c'est que le code tourne quand même...

edit : quand mon brightness arrive en bout de course (donc soit à 0 soit à 255, je voie ma rampe qui s'éteint quelques dixièmes de secondes)

edit 2 : encore une petite précision mon code GetIRKey à l'air de fonctionner car dans mon moniteur série je vois passer les infos ! par contre à la place de les recevoir en héla comme prévu je reçois un code décimal on dirait (par exemple 16748655 pour le + et 16754775 pour le - mais il comprend que c'est le bon bouton...) je ne sais pas si je suis très clair...

barbudor

Non.
Le problème c'est tes if par rapport à la valeur initiale.

Si tu démarre avec
Code: [Select]
int fadeAmount = 1;

Que se passe t'il quand tu passes sur le if ?
Barbuduino: Arduino sur Breadboard & VinciDuino: Clone Leonardo // WR703: Mini-routeur hacké // LauchPad MSP430 et Stellaris // Panda II Arduino-like .NetMF sous VisualC#
RTFC: Read That F.....g Code / RTFD: Read That F.....g Doc / RTFDS: Read That F.....g DataSheet / RTFS: Read That F.....g Schematic / Wot da ya wanna D.I.Y. today ?

bryce_30

Sur les if de GetIRKey tu veux dire ?
alors effectivement il n'a pas l'air de faire les opérations demandées.... mais ça à la rigueur , c'est n'est qu'une histoire de condition pas bonne, il faut que je mette des >= ou <= je pense.
mais ce n'est pas ça qui empêche ma led de varier en luminosité j'ai essayé ! je pourrais supprimer les conditions que ça ne changerai pas mon problème.
j'insiste sur le fait que j'ai beau virer n'importe quelle partie de mon code ça ne résout pas mon problème ! SAUF si j'enlève
Code: [Select]
irrecv.enableIRIn(); // Start receiver

alors que ma variable brightness oscille bien entre 0 et 255 et fadeAmount bascule bien entre 1 et -1.... :/

Go Up