Go Down

Topic: diminuire valore pwm per intensita led (Read 630 times) previous topic - next topic

Fabrizio88

hola!
ho un problema che non riesco a capire..

ho preso una stip led e lo collegata ad arduino, usando anche il telecomando ad infrarossi.

Sono arrivato a far funzionare i bottoni ed accendere i vari colori.

Ora voglio diminuire ed alzare l'intensità di luce, ma credo che mi manchi un riferimento perchè appena premo il bottone non si abbassa di 10 come dovrebbe ma m esce una luce diversa (dal bianco diventa giallo), e mi si blocca tutto.
ho provato a mettere un delay ma niente.

qui il codice fino ad esso:

#include <IRremote.h>

#define led1 9
#define led2 10
#define led3 11

int RECV_PIN = 3;

IRrecv irrecv(RECV_PIN);
IRsend irsend;

int val = 0;         // variable to store the read value

decode_results results;
byte r = 0;
byte g = 0;
byte b = 0;

void setup()
{
  Serial.begin(9600);
  irrecv.enableIRIn(); // Start the receiver
}



void loop() {

     analogWrite(led1,r);
     analogWrite(led2,g);
     analogWrite(led3,b);

  if (irrecv.decode(&results)) {
//    storeCode(&results);
    //Serial.println(results->value,HEX);
    if (results.value == 0xF740BF) {
      r=0;
      g=0;
      b=0;
      Serial.println("spento");
    }
    if (results.value == 0xF7C03F) {
      r=255;
      g=255;
      b=255;
      Serial.println("acceso");
    }
    if (results.value == 0xF720DF) {
      r=0;
      g=255;
      b=0;
      Serial.println("rosso");
    }
    if (results.value == 0xF7A05F) {
      r=255;
      g=0;
      b=0;
      Serial.println("verde");
    }
    if (results.value == 0xF7609F) {
      r=0;
      g=0;
      b=255;
      Serial.println("blu");
    }
     if (results.value == 0xF7E01F) {
      r=255;
      g=255;
      b=255;
      Serial.println("bianco");
    }

if((results.value==0xF700FF) && (r<245) && (g<245) && (b<245)) { //245+10=255
    r = r+10;
    g = g+10;
    b = b+10;     
     Serial.println("aumento");
}

if (results.value==0xF7807F) {
    r = r-10;
    g = g-10;
    b = b-10;
     Serial.println("diminuisco");
}
   
    irrecv.resume(); // resume receiver

  }
delay(10);
}

Fabrizio88

il problema è che non sono capace a dichiarare più valori dentro analogwrite, perchè da

if (results.value==0xF7807F) {
    r = r-10;
    g = g-10;
    b = b-10;
     Serial.println("diminuisco");
}

tolgo g e b

if (results.value==0xF7807F) {
    r = r-10; 
     Serial.println("diminuisco");
}

il codice funziona e non si blocca, come faccio ad aggiungere gli altri 2 led?

uwefed

La libreria IRremote usa un timer e anche i PWM usano i timer (sempre 2 pin un timer).
Siccuramente le due cose vanno in conflitto. Adesso purtroppo non so dirti quali pin PWM non possono essere usati in contemporanea con la IRremote. Prova a cambiare i Pin PWM una alla volta.
Ciao Uwe

Fabrizio88

mm...

adesso ho cambiato codice, ma la solfa non cambia..

questo funziona:
  if(results.value == red){
     analogWrite(led1,0);
     analogWrite(led2,255);
     analogWrite(led3,0);
    brightness=255;

questo no:

    if (((results.value == fademinus) || (results.value == fademinus1)) && (brightness > 0)) {
      brightness = brightness - fade;
      Serial.print("Luminosita' decrementata a: ");
      Serial.println(brightness);
      analogWrite(led1, brightness);
      analogWrite(led2, brightness);
      analogWrite(led3, brightness);

quindi il problema non credo siano i pin pwm, ma è come se cambiando il valore brightness, legga solo il primo e vada in palla.
ho provato diverse soluzioni, come incorporare le1,led2,led3 con un #define, ma non funziona o non sono capace io..

uwefed

Correspondenza Timer con pin PWM
Code: [Select]

Timer output Arduino output Chip pin Pin name
OC0A 6 12 PD6
OC0B 5 11 PD5
OC1A 9 15 PB1
OC1B 10 16 PB2
OC2A 11 17 PB3
OC2B 3 5 PD3


La libreria IRremote usa il Timer 2 percui non funzionano i pin PWm 3 e 11.
Ciao Uwe

Go Up
 


Please enter a valid email to subscribe

Confirm your email address

We need to confirm your email address.
To complete the subscription, please click the link in the email we just sent you.

Thank you for subscribing!

Arduino
via Egeo 16
Torino, 10131
Italy