Pages: [1]   Go Down
Author Topic: diminuire valore pwm per intensita led  (Read 507 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 3
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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);
}
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 3
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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?
Logged

BZ (I)
Offline Offline
Brattain Member
*****
Karma: 251
Posts: 21252
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 3
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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..
Logged

BZ (I)
Offline Offline
Brattain Member
*****
Karma: 251
Posts: 21252
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Correspondenza Timer con pin PWM
Code:
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
Logged

Pages: [1]   Go Up
Jump to: